@foxui/core 0.4.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 +42 -0
- package/dist/components/accordion/accordion-content.svelte +22 -0
- package/dist/components/accordion/accordion-content.svelte.d.ts +4 -0
- package/dist/components/accordion/accordion-item.svelte +35 -0
- package/dist/components/accordion/accordion-item.svelte.d.ts +9 -0
- package/dist/components/accordion/accordion-trigger.svelte +40 -0
- package/dist/components/accordion/accordion-trigger.svelte.d.ts +7 -0
- package/dist/components/accordion/index.d.ts +6 -0
- package/dist/components/accordion/index.js +6 -0
- package/dist/components/alert/alert-description.svelte +16 -0
- package/dist/components/alert/alert-description.svelte.d.ts +5 -0
- package/dist/components/alert/alert-title.svelte +25 -0
- package/dist/components/alert/alert-title.svelte.d.ts +8 -0
- package/dist/components/alert/alert.svelte +122 -0
- package/dist/components/alert/alert.svelte.d.ts +79 -0
- package/dist/components/alert/index.d.ts +5 -0
- package/dist/components/alert/index.js +5 -0
- package/dist/components/avatar/Avatar.svelte +73 -0
- package/dist/components/avatar/Avatar.svelte.d.ts +14 -0
- package/dist/components/avatar/AvatarGroup.svelte +43 -0
- package/dist/components/avatar/AvatarGroup.svelte.d.ts +16 -0
- package/dist/components/avatar/index.d.ts +3 -0
- package/dist/components/avatar/index.js +3 -0
- package/dist/components/badge/Badge.svelte +80 -0
- package/dist/components/badge/Badge.svelte.d.ts +100 -0
- package/dist/components/badge/index.d.ts +1 -0
- package/dist/components/badge/index.js +1 -0
- package/dist/components/box/Box.svelte +23 -0
- package/dist/components/box/Box.svelte.d.ts +5 -0
- package/dist/components/box/index.d.ts +1 -0
- package/dist/components/box/index.js +1 -0
- package/dist/components/button/Button.svelte +103 -0
- package/dist/components/button/Button.svelte.d.ts +110 -0
- package/dist/components/button/index.d.ts +1 -0
- package/dist/components/button/index.js +1 -0
- package/dist/components/card/ImageCard.svelte +62 -0
- package/dist/components/card/ImageCard.svelte.d.ts +12 -0
- package/dist/components/card/index.d.ts +1 -0
- package/dist/components/card/index.js +1 -0
- package/dist/components/chat-bubble/ChatBubble.svelte +96 -0
- package/dist/components/chat-bubble/ChatBubble.svelte.d.ts +95 -0
- package/dist/components/chat-bubble/index.d.ts +1 -0
- package/dist/components/chat-bubble/index.js +1 -0
- package/dist/components/checkbox/checkbox.svelte +91 -0
- package/dist/components/checkbox/checkbox.svelte.d.ts +42 -0
- package/dist/components/checkbox/index.d.ts +1 -0
- package/dist/components/checkbox/index.js +1 -0
- package/dist/components/copy-code-button/AddCopyCodeButtons.svelte +35 -0
- package/dist/components/copy-code-button/AddCopyCodeButtons.svelte.d.ts +6 -0
- package/dist/components/copy-code-button/CopyCodeButton.svelte +69 -0
- package/dist/components/copy-code-button/CopyCodeButton.svelte.d.ts +7 -0
- package/dist/components/copy-code-button/index.d.ts +2 -0
- package/dist/components/copy-code-button/index.js +2 -0
- package/dist/components/head/Head.svelte +49 -0
- package/dist/components/head/Head.svelte.d.ts +10 -0
- package/dist/components/head/index.d.ts +1 -0
- package/dist/components/head/index.js +1 -0
- package/dist/components/heading/Heading.svelte +24 -0
- package/dist/components/heading/Heading.svelte.d.ts +8 -0
- package/dist/components/heading/Subheading.svelte +24 -0
- package/dist/components/heading/Subheading.svelte.d.ts +8 -0
- package/dist/components/heading/index.d.ts +3 -0
- package/dist/components/heading/index.js +3 -0
- package/dist/components/image/Image.svelte +80 -0
- package/dist/components/image/Image.svelte.d.ts +12 -0
- package/dist/components/image/index.d.ts +2 -0
- package/dist/components/image/index.js +1 -0
- package/dist/components/image-container/ImageContainer.svelte +15 -0
- package/dist/components/image-container/ImageContainer.svelte.d.ts +4 -0
- package/dist/components/image-container/index.d.ts +1 -0
- package/dist/components/image-container/index.js +1 -0
- package/dist/components/index.d.ts +34 -0
- package/dist/components/index.js +34 -0
- package/dist/components/input/Input.svelte +60 -0
- package/dist/components/input/Input.svelte.d.ts +46 -0
- package/dist/components/input/index.d.ts +2 -0
- package/dist/components/input/index.js +2 -0
- package/dist/components/label/Label.svelte +19 -0
- package/dist/components/label/Label.svelte.d.ts +4 -0
- package/dist/components/label/index.d.ts +1 -0
- package/dist/components/label/index.js +1 -0
- package/dist/components/modal/Modal.svelte +167 -0
- package/dist/components/modal/Modal.svelte.d.ts +33 -0
- package/dist/components/modal/index.d.ts +2 -0
- package/dist/components/modal/index.js +1 -0
- package/dist/components/navbar/Navbar.svelte +63 -0
- package/dist/components/navbar/Navbar.svelte.d.ts +8 -0
- package/dist/components/navbar/index.d.ts +1 -0
- package/dist/components/navbar/index.js +1 -0
- package/dist/components/number-input/NumberInput.svelte +201 -0
- package/dist/components/number-input/NumberInput.svelte.d.ts +98 -0
- package/dist/components/number-input/index.d.ts +2 -0
- package/dist/components/number-input/index.js +1 -0
- package/dist/components/paragraph/Paragraph.svelte +20 -0
- package/dist/components/paragraph/Paragraph.svelte.d.ts +5 -0
- package/dist/components/paragraph/index.d.ts +2 -0
- package/dist/components/paragraph/index.js +2 -0
- package/dist/components/popover/Popover.svelte +63 -0
- package/dist/components/popover/Popover.svelte.d.ts +14 -0
- package/dist/components/popover/index.d.ts +8 -0
- package/dist/components/popover/index.js +7 -0
- package/dist/components/popover/popover-content.svelte +28 -0
- package/dist/components/popover/popover-content.svelte.d.ts +7 -0
- package/dist/components/prose/Prose.svelte +107 -0
- package/dist/components/prose/Prose.svelte.d.ts +35 -0
- package/dist/components/prose/ProseCopyButton.svelte +12 -0
- package/dist/components/prose/ProseCopyButton.svelte.d.ts +8 -0
- package/dist/components/prose/index.d.ts +4 -0
- package/dist/components/prose/index.js +2 -0
- package/dist/components/scroll-area/BodyScrollArea.svelte +3 -0
- package/dist/components/scroll-area/BodyScrollArea.svelte.d.ts +19 -0
- package/dist/components/scroll-area/ScrollArea.svelte +71 -0
- package/dist/components/scroll-area/ScrollArea.svelte.d.ts +8 -0
- package/dist/components/scroll-area/index.d.ts +1 -0
- package/dist/components/scroll-area/index.js +1 -0
- package/dist/components/scroll-area/style.css +41 -0
- package/dist/components/select/Select.svelte +88 -0
- package/dist/components/select/Select.svelte.d.ts +13 -0
- package/dist/components/select/SelectChildren.svelte +29 -0
- package/dist/components/select/SelectChildren.svelte.d.ts +8 -0
- package/dist/components/select/SelectItem.svelte +31 -0
- package/dist/components/select/SelectItem.svelte.d.ts +4 -0
- package/dist/components/select/index.d.ts +3 -0
- package/dist/components/select/index.js +3 -0
- package/dist/components/select-2/Select.svelte +46 -0
- package/dist/components/select-2/Select.svelte.d.ts +12 -0
- package/dist/components/select-2/index.d.ts +1 -0
- package/dist/components/select-2/index.js +1 -0
- package/dist/components/sidebar/Sidebar.svelte +69 -0
- package/dist/components/sidebar/Sidebar.svelte.d.ts +9 -0
- package/dist/components/sidebar/index.d.ts +1 -0
- package/dist/components/sidebar/index.js +1 -0
- package/dist/components/slider/Slider.svelte +65 -0
- package/dist/components/slider/Slider.svelte.d.ts +4 -0
- package/dist/components/slider/SliderNumber.svelte +40 -0
- package/dist/components/slider/SliderNumber.svelte.d.ts +4 -0
- package/dist/components/slider/index.d.ts +3 -0
- package/dist/components/slider/index.js +3 -0
- package/dist/components/sonner/Toaster.svelte +73 -0
- package/dist/components/sonner/Toaster.svelte.d.ts +10 -0
- package/dist/components/sonner/index.d.ts +2 -0
- package/dist/components/sonner/index.js +2 -0
- package/dist/components/switch/index.d.ts +2 -0
- package/dist/components/switch/index.js +2 -0
- package/dist/components/switch/switch.svelte +27 -0
- package/dist/components/switch/switch.svelte.d.ts +4 -0
- package/dist/components/tabs/TabItem.svelte +56 -0
- package/dist/components/tabs/TabItem.svelte.d.ts +9 -0
- package/dist/components/tabs/Tabs.svelte +29 -0
- package/dist/components/tabs/Tabs.svelte.d.ts +12 -0
- package/dist/components/tabs/index.d.ts +2 -0
- package/dist/components/tabs/index.js +2 -0
- package/dist/components/textarea/index.d.ts +19 -0
- package/dist/components/textarea/index.js +2 -0
- package/dist/components/textarea/textarea.svelte +57 -0
- package/dist/components/textarea/textarea.svelte.d.ts +47 -0
- package/dist/components/theme-toggle/ThemeToggle.svelte +105 -0
- package/dist/components/theme-toggle/ThemeToggle.svelte.d.ts +7 -0
- package/dist/components/theme-toggle/index.d.ts +2 -0
- package/dist/components/theme-toggle/index.js +2 -0
- package/dist/components/toggle/index.d.ts +3 -0
- package/dist/components/toggle/index.js +3 -0
- package/dist/components/toggle/toggle.svelte +49 -0
- package/dist/components/toggle/toggle.svelte.d.ts +40 -0
- package/dist/components/toggle-group/index.d.ts +3 -0
- package/dist/components/toggle-group/index.js +3 -0
- package/dist/components/toggle-group/toggle-group-item.svelte +30 -0
- package/dist/components/toggle-group/toggle-group-item.svelte.d.ts +6 -0
- package/dist/components/toggle-group/toggle-group.svelte +41 -0
- package/dist/components/toggle-group/toggle-group.svelte.d.ts +8 -0
- package/dist/components/tooltip/index.d.ts +7 -0
- package/dist/components/tooltip/index.js +9 -0
- package/dist/components/tooltip/tooltip-content.svelte +21 -0
- package/dist/components/tooltip/tooltip-content.svelte.d.ts +4 -0
- package/dist/components/tooltip/tooltip.svelte +62 -0
- package/dist/components/tooltip/tooltip.svelte.d.ts +12 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/types.d.ts +1 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.js +5 -0
- package/package.json +82 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import { type VariantProps, tv } from 'tailwind-variants';
|
|
3
|
+
import { cn } from '../../utils';
|
|
4
|
+
|
|
5
|
+
export const badgeVariants = tv({
|
|
6
|
+
base: 'inline-flex items-center backdrop-blur-sm justify-center whitespace-nowrap rounded-2xl text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 duration-300 active:duration-100 [&_svg]:pointer-events-none [&_svg]:shrink-0',
|
|
7
|
+
variants: {
|
|
8
|
+
variant: {
|
|
9
|
+
primary:
|
|
10
|
+
'border border-accent-500/20 dark:border-accent-500/20 bg-accent-500/10 dark:bg-accent-500/10 text-accent-700 dark:text-accent-400',
|
|
11
|
+
primary_shift:
|
|
12
|
+
'border border-[oklch(from_var(--color-accent-500)_l_c_calc(h+35)_/_0.2)] dark:border-[oklch(from_var(--color-accent-500)_l_c_calc(h+35)_/_0.2)] bg-[oklch(from_var(--color-accent-500)_l_c_calc(h+35)_/_0.1)] text-[oklch(from_var(--color-accent-700)_l_c_calc(h+35))] dark:text-[oklch(from_var(--color-accent-400)_l_c_calc(h+35))]',
|
|
13
|
+
primary_shift_2:
|
|
14
|
+
'border border-[oklch(from_var(--color-accent-500)_l_c_calc(h+70)_/_0.2)] dark:border-[oklch(from_var(--color-accent-500)_l_c_calc(h+70)_/_0.2)] bg-[oklch(from_var(--color-accent-500)_l_c_calc(h+70)_/_0.1)] text-[oklch(from_var(--color-accent-700)_l_c_calc(h+70))] dark:text-[oklch(from_var(--color-accent-400)_l_c_calc(h+70))]',
|
|
15
|
+
secondary:
|
|
16
|
+
'bg-base-300/30 dark:bg-base-800/50 text-base-900 dark:text-base-50 border border-base-300/50 dark:border-base-700/30',
|
|
17
|
+
|
|
18
|
+
red: 'border border-red-500/20 dark:border-red-500/20 bg-red-500/10 dark:bg-red-500/10 text-red-700 dark:text-red-400',
|
|
19
|
+
yellow:
|
|
20
|
+
'border border-yellow-500/20 dark:border-yellow-500/20 bg-yellow-500/10 dark:bg-yellow-500/10 text-yellow-700 dark:text-yellow-400',
|
|
21
|
+
green:
|
|
22
|
+
'border border-green-500/20 dark:border-green-500/20 bg-green-500/10 dark:bg-green-500/10 text-green-700 dark:text-green-400',
|
|
23
|
+
blue: 'border border-blue-500/20 dark:border-blue-500/20 bg-blue-500/10 dark:bg-blue-500/10 text-blue-700 dark:text-blue-400',
|
|
24
|
+
indigo:
|
|
25
|
+
'border border-indigo-500/20 dark:border-indigo-500/20 bg-indigo-500/10 dark:bg-indigo-500/10 text-indigo-700 dark:text-indigo-400',
|
|
26
|
+
violet:
|
|
27
|
+
'border border-violet-500/20 dark:border-violet-500/20 bg-violet-500/10 dark:bg-violet-500/10 text-violet-700 dark:text-violet-400',
|
|
28
|
+
purple:
|
|
29
|
+
'border border-purple-500/20 dark:border-purple-500/20 bg-purple-500/10 dark:bg-purple-500/10 text-purple-700 dark:text-purple-400',
|
|
30
|
+
fuchsia:
|
|
31
|
+
'border border-fuchsia-500/20 dark:border-fuchsia-500/20 bg-fuchsia-500/10 dark:bg-fuchsia-500/10 text-fuchsia-700 dark:text-fuchsia-400',
|
|
32
|
+
pink: 'border border-pink-500/20 dark:border-pink-500/20 bg-pink-500/10 dark:bg-pink-500/10 text-pink-700 dark:text-pink-400',
|
|
33
|
+
rose: 'border border-rose-500/20 dark:border-rose-500/20 bg-rose-500/10 dark:bg-rose-500/10 text-rose-700 dark:text-rose-400',
|
|
34
|
+
orange:
|
|
35
|
+
'border border-orange-500/20 dark:border-orange-500/20 bg-orange-500/10 dark:bg-orange-500/10 text-orange-700 dark:text-orange-400',
|
|
36
|
+
amber:
|
|
37
|
+
'border border-amber-500/20 dark:border-amber-500/20 bg-amber-500/10 dark:bg-amber-500/10 text-amber-700 dark:text-amber-400',
|
|
38
|
+
lime: 'border border-lime-500/20 dark:border-lime-500/20 bg-lime-500/10 dark:bg-lime-500/10 text-lime-700 dark:text-lime-400',
|
|
39
|
+
emerald:
|
|
40
|
+
'border border-emerald-500/20 dark:border-emerald-500/20 bg-emerald-500/10 dark:bg-emerald-500/10 text-emerald-700 dark:text-emerald-400',
|
|
41
|
+
teal: 'border border-teal-500/20 dark:border-teal-500/20 bg-teal-500/10 dark:bg-teal-500/10 text-teal-700 dark:text-teal-400',
|
|
42
|
+
cyan: 'border border-cyan-500/20 dark:border-cyan-500/20 bg-cyan-500/10 dark:bg-cyan-500/10 text-cyan-700 dark:text-cyan-400',
|
|
43
|
+
sky: 'border border-sky-500/20 dark:border-sky-500/20 bg-sky-500/10 dark:bg-sky-500/10 text-sky-700 dark:text-sky-400'
|
|
44
|
+
},
|
|
45
|
+
size: {
|
|
46
|
+
sm: 'px-2 text-xs py-0.5 [&_svg]:size-3 gap-1.5',
|
|
47
|
+
md: 'px-3 py-1 [&_svg]:size-4 gap-2',
|
|
48
|
+
lg: 'px-4 text-lg py-1.5 [&_svg]:size-5 gap-2.5'
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
defaultVariants: {
|
|
52
|
+
variant: 'primary',
|
|
53
|
+
size: 'sm'
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
export type BadgeVariant = VariantProps<typeof badgeVariants>['variant'];
|
|
58
|
+
export type BadgeSize = VariantProps<typeof badgeVariants>['size'];
|
|
59
|
+
</script>
|
|
60
|
+
|
|
61
|
+
<script lang="ts">
|
|
62
|
+
import type { WithElementRef } from 'bits-ui';
|
|
63
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
64
|
+
|
|
65
|
+
let {
|
|
66
|
+
ref = $bindable(null),
|
|
67
|
+
class: className,
|
|
68
|
+
variant = 'primary',
|
|
69
|
+
size = 'sm',
|
|
70
|
+
children,
|
|
71
|
+
...restProps
|
|
72
|
+
}: WithElementRef<HTMLAttributes<HTMLSpanElement>> & {
|
|
73
|
+
variant?: BadgeVariant;
|
|
74
|
+
size?: BadgeSize;
|
|
75
|
+
} = $props();
|
|
76
|
+
</script>
|
|
77
|
+
|
|
78
|
+
<span bind:this={ref} class={cn(badgeVariants({ variant, size }), className)} {...restProps}>
|
|
79
|
+
{@render children?.()}
|
|
80
|
+
</span>
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { type VariantProps } from 'tailwind-variants';
|
|
2
|
+
export declare const badgeVariants: import("tailwind-variants").TVReturnType<{
|
|
3
|
+
variant: {
|
|
4
|
+
primary: string;
|
|
5
|
+
primary_shift: string;
|
|
6
|
+
primary_shift_2: string;
|
|
7
|
+
secondary: string;
|
|
8
|
+
red: string;
|
|
9
|
+
yellow: string;
|
|
10
|
+
green: string;
|
|
11
|
+
blue: string;
|
|
12
|
+
indigo: string;
|
|
13
|
+
violet: string;
|
|
14
|
+
purple: string;
|
|
15
|
+
fuchsia: string;
|
|
16
|
+
pink: string;
|
|
17
|
+
rose: string;
|
|
18
|
+
orange: string;
|
|
19
|
+
amber: string;
|
|
20
|
+
lime: string;
|
|
21
|
+
emerald: string;
|
|
22
|
+
teal: string;
|
|
23
|
+
cyan: string;
|
|
24
|
+
sky: string;
|
|
25
|
+
};
|
|
26
|
+
size: {
|
|
27
|
+
sm: string;
|
|
28
|
+
md: string;
|
|
29
|
+
lg: string;
|
|
30
|
+
};
|
|
31
|
+
}, undefined, "inline-flex items-center backdrop-blur-sm justify-center whitespace-nowrap rounded-2xl text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 duration-300 active:duration-100 [&_svg]:pointer-events-none [&_svg]:shrink-0", {
|
|
32
|
+
variant: {
|
|
33
|
+
primary: string;
|
|
34
|
+
primary_shift: string;
|
|
35
|
+
primary_shift_2: string;
|
|
36
|
+
secondary: string;
|
|
37
|
+
red: string;
|
|
38
|
+
yellow: string;
|
|
39
|
+
green: string;
|
|
40
|
+
blue: string;
|
|
41
|
+
indigo: string;
|
|
42
|
+
violet: string;
|
|
43
|
+
purple: string;
|
|
44
|
+
fuchsia: string;
|
|
45
|
+
pink: string;
|
|
46
|
+
rose: string;
|
|
47
|
+
orange: string;
|
|
48
|
+
amber: string;
|
|
49
|
+
lime: string;
|
|
50
|
+
emerald: string;
|
|
51
|
+
teal: string;
|
|
52
|
+
cyan: string;
|
|
53
|
+
sky: string;
|
|
54
|
+
};
|
|
55
|
+
size: {
|
|
56
|
+
sm: string;
|
|
57
|
+
md: string;
|
|
58
|
+
lg: string;
|
|
59
|
+
};
|
|
60
|
+
}, undefined, import("tailwind-variants").TVReturnType<{
|
|
61
|
+
variant: {
|
|
62
|
+
primary: string;
|
|
63
|
+
primary_shift: string;
|
|
64
|
+
primary_shift_2: string;
|
|
65
|
+
secondary: string;
|
|
66
|
+
red: string;
|
|
67
|
+
yellow: string;
|
|
68
|
+
green: string;
|
|
69
|
+
blue: string;
|
|
70
|
+
indigo: string;
|
|
71
|
+
violet: string;
|
|
72
|
+
purple: string;
|
|
73
|
+
fuchsia: string;
|
|
74
|
+
pink: string;
|
|
75
|
+
rose: string;
|
|
76
|
+
orange: string;
|
|
77
|
+
amber: string;
|
|
78
|
+
lime: string;
|
|
79
|
+
emerald: string;
|
|
80
|
+
teal: string;
|
|
81
|
+
cyan: string;
|
|
82
|
+
sky: string;
|
|
83
|
+
};
|
|
84
|
+
size: {
|
|
85
|
+
sm: string;
|
|
86
|
+
md: string;
|
|
87
|
+
lg: string;
|
|
88
|
+
};
|
|
89
|
+
}, undefined, "inline-flex items-center backdrop-blur-sm justify-center whitespace-nowrap rounded-2xl text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 duration-300 active:duration-100 [&_svg]:pointer-events-none [&_svg]:shrink-0", unknown, unknown, undefined>>;
|
|
90
|
+
export type BadgeVariant = VariantProps<typeof badgeVariants>['variant'];
|
|
91
|
+
export type BadgeSize = VariantProps<typeof badgeVariants>['size'];
|
|
92
|
+
import type { WithElementRef } from 'bits-ui';
|
|
93
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
94
|
+
type $$ComponentProps = WithElementRef<HTMLAttributes<HTMLSpanElement>> & {
|
|
95
|
+
variant?: BadgeVariant;
|
|
96
|
+
size?: BadgeSize;
|
|
97
|
+
};
|
|
98
|
+
declare const Badge: import("svelte").Component<$$ComponentProps, {}, "ref">;
|
|
99
|
+
type Badge = ReturnType<typeof Badge>;
|
|
100
|
+
export default Badge;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Badge, badgeVariants, type BadgeVariant } from './Badge.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Badge, badgeVariants } from './Badge.svelte';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../../utils';
|
|
3
|
+
import type { WithChildren, WithElementRef } from 'bits-ui';
|
|
4
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
ref,
|
|
8
|
+
children,
|
|
9
|
+
class: className,
|
|
10
|
+
...restProps
|
|
11
|
+
}: WithElementRef<WithChildren<HTMLAttributes<HTMLDivElement>>> = $props();
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<div
|
|
15
|
+
bind:this={ref}
|
|
16
|
+
class={cn(
|
|
17
|
+
'border-base-300/50 bg-base-300/20 backdrop-blur-2xl dark:border-base-800/50 dark:bg-base-900/30 text-base-900 dark:text-base-100 relative isolate w-full overflow-hidden rounded-2xl border p-4',
|
|
18
|
+
className
|
|
19
|
+
)}
|
|
20
|
+
{...restProps}
|
|
21
|
+
>
|
|
22
|
+
{@render children?.()}
|
|
23
|
+
</div>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { WithChildren, WithElementRef } from 'bits-ui';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
declare const Box: import("svelte").Component<WithElementRef<WithChildren<HTMLAttributes<HTMLDivElement>>>, {}, "">;
|
|
4
|
+
type Box = ReturnType<typeof Box>;
|
|
5
|
+
export default Box;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Box } from './Box.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Box } from './Box.svelte';
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { WithElementRef } from 'bits-ui';
|
|
3
|
+
import type { HTMLAnchorAttributes, HTMLButtonAttributes } from 'svelte/elements';
|
|
4
|
+
import { type VariantProps, tv } from 'tailwind-variants';
|
|
5
|
+
import { cn } from '../../utils';
|
|
6
|
+
|
|
7
|
+
export const buttonVariants = tv({
|
|
8
|
+
base: 'touch-manipulation hover:cursor-pointer backdrop-blur-md motion-safe:focus-visible:transition-transform focus-visible:outline-2 outline-offset-2 inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-2xl active:scale-95 text-sm font-medium motion-safe:transition-all disabled:pointer-events-none disabled:opacity-50 duration-300 active:duration-100 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
|
|
9
|
+
variants: {
|
|
10
|
+
variant: {
|
|
11
|
+
primary:
|
|
12
|
+
'focus-visible:outline-accent-500 border border-accent-500/20 dark:border-accent-500/20 hover:bg-accent-500/20 dark:hover:bg-accent-500/20 bg-accent-500/10 dark:bg-accent-500/10 text-accent-700 dark:text-accent-400',
|
|
13
|
+
secondary:
|
|
14
|
+
'focus-visible:outline-base-800 dark:focus-visible:outline-base-200 bg-base-300/30 dark:bg-base-800/50 text-base-900 dark:text-base-50 hover:bg-base-300/50 dark:hover:bg-base-700/50 border border-base-300/50 dark:border-base-700/30',
|
|
15
|
+
link: 'focus-visible:outline-base-900 dark:focus-visible:outline-base-50 text-base-800 dark:text-base-200 font-semibold hover:text-accent-600 dark:hover:text-accent-400 data-[current=true]:text-accent-600 dark:data-[current=true]:text-accent-400',
|
|
16
|
+
ghost:
|
|
17
|
+
'focus-visible:outline-base-900 dark:focus-visible:outline-base-50 text-base-800 dark:text-base-200 font-semibold hover:text-accent-600 hover:bg-accent-400/5 data-[current=true]:bg-accent-500/5 dark:hover:text-accent-400 dark:hover:bg-accent-700/5 data-[current=true]:text-accent-600 dark:data-[current=true]:text-accent-400 dark:data-[current=true]:bg-accent-500/5',
|
|
18
|
+
|
|
19
|
+
red: 'focus-visible:outline-red-500 border border-red-500/20 dark:border-red-500/20 hover:bg-red-500/20 dark:hover:bg-red-500/20 bg-red-500/10 dark:bg-red-500/10 text-red-700 dark:text-red-400',
|
|
20
|
+
yellow:
|
|
21
|
+
'focus-visible:outline-yellow-500 border border-yellow-500/20 dark:border-yellow-500/20 hover:bg-yellow-500/20 dark:hover:bg-yellow-500/20 bg-yellow-500/10 dark:bg-yellow-500/10 text-yellow-700 dark:text-yellow-400',
|
|
22
|
+
green:
|
|
23
|
+
'focus-visible:outline-green-500 border border-green-500/20 dark:border-green-500/20 hover:bg-green-500/20 dark:hover:bg-green-500/20 bg-green-500/10 dark:bg-green-500/10 text-green-700 dark:text-green-400',
|
|
24
|
+
blue: 'focus-visible:outline-blue-500 border border-blue-500/20 dark:border-blue-500/20 hover:bg-blue-500/20 dark:hover:bg-blue-500/20 bg-blue-500/10 dark:bg-blue-500/10 text-blue-700 dark:text-blue-400',
|
|
25
|
+
indigo:
|
|
26
|
+
'focus-visible:outline-indigo-500 border border-indigo-500/20 dark:border-indigo-500/20 hover:bg-indigo-500/20 dark:hover:bg-indigo-500/20 bg-indigo-500/10 dark:bg-indigo-500/10 text-indigo-700 dark:text-indigo-400',
|
|
27
|
+
violet:
|
|
28
|
+
'focus-visible:outline-violet-500 border border-violet-500/20 dark:border-violet-500/20 hover:bg-violet-500/20 dark:hover:bg-violet-500/20 bg-violet-500/10 dark:bg-violet-500/10 text-violet-700 dark:text-violet-400',
|
|
29
|
+
purple:
|
|
30
|
+
'focus-visible:outline-purple-500 border border-purple-500/20 dark:border-purple-500/20 hover:bg-purple-500/20 dark:hover:bg-purple-500/20 bg-purple-500/10 dark:bg-purple-500/10 text-purple-700 dark:text-purple-400',
|
|
31
|
+
fuchsia:
|
|
32
|
+
'focus-visible:outline-fuchsia-500 border border-fuchsia-500/20 dark:border-fuchsia-500/20 hover:bg-fuchsia-500/20 dark:hover:bg-fuchsia-500/20 bg-fuchsia-500/10 dark:bg-fuchsia-500/10 text-fuchsia-700 dark:text-fuchsia-400',
|
|
33
|
+
pink: 'focus-visible:outline-pink-500 border border-pink-500/20 dark:border-pink-500/20 hover:bg-pink-500/20 dark:hover:bg-pink-500/20 bg-pink-500/10 dark:bg-pink-500/10 text-pink-700 dark:text-pink-400',
|
|
34
|
+
rose: 'focus-visible:outline-rose-500 border border-rose-500/20 dark:border-rose-500/20 hover:bg-rose-500/20 dark:hover:bg-rose-500/20 bg-rose-500/10 dark:bg-rose-500/10 text-rose-700 dark:text-rose-400',
|
|
35
|
+
orange:
|
|
36
|
+
'focus-visible:outline-orange-500 border border-orange-500/20 dark:border-orange-500/20 hover:bg-orange-500/20 dark:hover:bg-orange-500/20 bg-orange-500/10 dark:bg-orange-500/10 text-orange-700 dark:text-orange-400',
|
|
37
|
+
amber:
|
|
38
|
+
'focus-visible:outline-amber-500 border border-amber-500/20 dark:border-amber-500/20 hover:bg-amber-500/20 dark:hover:bg-amber-500/20 bg-amber-500/10 dark:bg-amber-500/10 text-amber-700 dark:text-amber-400',
|
|
39
|
+
lime: 'focus-visible:outline-lime-500 border border-lime-500/20 dark:border-lime-500/20 hover:bg-lime-500/20 dark:hover:bg-lime-500/20 bg-lime-500/10 dark:bg-lime-500/10 text-lime-700 dark:text-lime-400',
|
|
40
|
+
emerald:
|
|
41
|
+
'focus-visible:outline-emerald-500 border border-emerald-500/20 dark:border-emerald-500/20 hover:bg-emerald-500/20 dark:hover:bg-emerald-500/20 bg-emerald-500/10 dark:bg-emerald-500/10 text-emerald-700 dark:text-emerald-400',
|
|
42
|
+
teal: 'focus-visible:outline-teal-500 border border-teal-500/20 dark:border-teal-500/20 hover:bg-teal-500/20 dark:hover:bg-teal-500/20 bg-teal-500/10 dark:bg-teal-500/10 text-teal-700 dark:text-teal-400',
|
|
43
|
+
cyan: 'focus-visible:outline-cyan-500 border border-cyan-500/20 dark:border-cyan-500/20 hover:bg-cyan-500/20 dark:hover:bg-cyan-500/20 bg-cyan-500/10 dark:bg-cyan-500/10 text-cyan-700 dark:text-cyan-400',
|
|
44
|
+
sky: 'focus-visible:outline-sky-500 border border-sky-500/20 dark:border-sky-500/20 hover:bg-sky-500/20 dark:hover:bg-sky-500/20 bg-sky-500/10 dark:bg-sky-500/10 text-sky-700 dark:text-sky-400'
|
|
45
|
+
},
|
|
46
|
+
size: {
|
|
47
|
+
default: 'px-3 py-1.5',
|
|
48
|
+
sm: 'px-2 text-xs py-1 font-base [&_svg]:size-3 gap-1.5',
|
|
49
|
+
lg: 'px-4 gap-2.5 text-lg py-2 font-semibold [&_svg]:size-5 gap-2.5',
|
|
50
|
+
icon: 'p-2',
|
|
51
|
+
iconSm: 'p-1.5 [&_svg]:size-3',
|
|
52
|
+
iconLg: 'p-3 [&_svg]:size-5'
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
defaultVariants: {
|
|
56
|
+
variant: 'primary',
|
|
57
|
+
size: 'default'
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
export type ButtonVariant = VariantProps<typeof buttonVariants>['variant'];
|
|
62
|
+
export type ButtonSize = VariantProps<typeof buttonVariants>['size'];
|
|
63
|
+
|
|
64
|
+
export type ButtonProps = WithElementRef<HTMLButtonAttributes> &
|
|
65
|
+
WithElementRef<HTMLAnchorAttributes> & {
|
|
66
|
+
variant?: ButtonVariant;
|
|
67
|
+
size?: ButtonSize;
|
|
68
|
+
checkCurrent?: boolean;
|
|
69
|
+
};
|
|
70
|
+
</script>
|
|
71
|
+
|
|
72
|
+
<script lang="ts">
|
|
73
|
+
let {
|
|
74
|
+
class: className,
|
|
75
|
+
variant = 'primary',
|
|
76
|
+
size = 'default',
|
|
77
|
+
ref = $bindable(null),
|
|
78
|
+
href = undefined,
|
|
79
|
+
type = 'button',
|
|
80
|
+
children,
|
|
81
|
+
...restProps
|
|
82
|
+
}: ButtonProps = $props();
|
|
83
|
+
</script>
|
|
84
|
+
|
|
85
|
+
{#if href}
|
|
86
|
+
<a
|
|
87
|
+
bind:this={ref}
|
|
88
|
+
class={cn(buttonVariants({ variant, size }), className)}
|
|
89
|
+
{href}
|
|
90
|
+
{...restProps}
|
|
91
|
+
>
|
|
92
|
+
{@render children?.()}
|
|
93
|
+
</a>
|
|
94
|
+
{:else}
|
|
95
|
+
<button
|
|
96
|
+
bind:this={ref}
|
|
97
|
+
class={cn(buttonVariants({ variant, size }), className)}
|
|
98
|
+
{type}
|
|
99
|
+
{...restProps}
|
|
100
|
+
>
|
|
101
|
+
{@render children?.()}
|
|
102
|
+
</button>
|
|
103
|
+
{/if}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { WithElementRef } from 'bits-ui';
|
|
2
|
+
import type { HTMLAnchorAttributes, HTMLButtonAttributes } from 'svelte/elements';
|
|
3
|
+
import { type VariantProps } from 'tailwind-variants';
|
|
4
|
+
export declare const buttonVariants: import("tailwind-variants").TVReturnType<{
|
|
5
|
+
variant: {
|
|
6
|
+
primary: string;
|
|
7
|
+
secondary: string;
|
|
8
|
+
link: string;
|
|
9
|
+
ghost: string;
|
|
10
|
+
red: string;
|
|
11
|
+
yellow: string;
|
|
12
|
+
green: string;
|
|
13
|
+
blue: string;
|
|
14
|
+
indigo: string;
|
|
15
|
+
violet: string;
|
|
16
|
+
purple: string;
|
|
17
|
+
fuchsia: string;
|
|
18
|
+
pink: string;
|
|
19
|
+
rose: string;
|
|
20
|
+
orange: string;
|
|
21
|
+
amber: string;
|
|
22
|
+
lime: string;
|
|
23
|
+
emerald: string;
|
|
24
|
+
teal: string;
|
|
25
|
+
cyan: string;
|
|
26
|
+
sky: string;
|
|
27
|
+
};
|
|
28
|
+
size: {
|
|
29
|
+
default: string;
|
|
30
|
+
sm: string;
|
|
31
|
+
lg: string;
|
|
32
|
+
icon: string;
|
|
33
|
+
iconSm: string;
|
|
34
|
+
iconLg: string;
|
|
35
|
+
};
|
|
36
|
+
}, undefined, "touch-manipulation hover:cursor-pointer backdrop-blur-md motion-safe:focus-visible:transition-transform focus-visible:outline-2 outline-offset-2 inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-2xl active:scale-95 text-sm font-medium motion-safe:transition-all disabled:pointer-events-none disabled:opacity-50 duration-300 active:duration-100 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", {
|
|
37
|
+
variant: {
|
|
38
|
+
primary: string;
|
|
39
|
+
secondary: string;
|
|
40
|
+
link: string;
|
|
41
|
+
ghost: string;
|
|
42
|
+
red: string;
|
|
43
|
+
yellow: string;
|
|
44
|
+
green: string;
|
|
45
|
+
blue: string;
|
|
46
|
+
indigo: string;
|
|
47
|
+
violet: string;
|
|
48
|
+
purple: string;
|
|
49
|
+
fuchsia: string;
|
|
50
|
+
pink: string;
|
|
51
|
+
rose: string;
|
|
52
|
+
orange: string;
|
|
53
|
+
amber: string;
|
|
54
|
+
lime: string;
|
|
55
|
+
emerald: string;
|
|
56
|
+
teal: string;
|
|
57
|
+
cyan: string;
|
|
58
|
+
sky: string;
|
|
59
|
+
};
|
|
60
|
+
size: {
|
|
61
|
+
default: string;
|
|
62
|
+
sm: string;
|
|
63
|
+
lg: string;
|
|
64
|
+
icon: string;
|
|
65
|
+
iconSm: string;
|
|
66
|
+
iconLg: string;
|
|
67
|
+
};
|
|
68
|
+
}, undefined, import("tailwind-variants").TVReturnType<{
|
|
69
|
+
variant: {
|
|
70
|
+
primary: string;
|
|
71
|
+
secondary: string;
|
|
72
|
+
link: string;
|
|
73
|
+
ghost: string;
|
|
74
|
+
red: string;
|
|
75
|
+
yellow: string;
|
|
76
|
+
green: string;
|
|
77
|
+
blue: string;
|
|
78
|
+
indigo: string;
|
|
79
|
+
violet: string;
|
|
80
|
+
purple: string;
|
|
81
|
+
fuchsia: string;
|
|
82
|
+
pink: string;
|
|
83
|
+
rose: string;
|
|
84
|
+
orange: string;
|
|
85
|
+
amber: string;
|
|
86
|
+
lime: string;
|
|
87
|
+
emerald: string;
|
|
88
|
+
teal: string;
|
|
89
|
+
cyan: string;
|
|
90
|
+
sky: string;
|
|
91
|
+
};
|
|
92
|
+
size: {
|
|
93
|
+
default: string;
|
|
94
|
+
sm: string;
|
|
95
|
+
lg: string;
|
|
96
|
+
icon: string;
|
|
97
|
+
iconSm: string;
|
|
98
|
+
iconLg: string;
|
|
99
|
+
};
|
|
100
|
+
}, undefined, "touch-manipulation hover:cursor-pointer backdrop-blur-md motion-safe:focus-visible:transition-transform focus-visible:outline-2 outline-offset-2 inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-2xl active:scale-95 text-sm font-medium motion-safe:transition-all disabled:pointer-events-none disabled:opacity-50 duration-300 active:duration-100 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", unknown, unknown, undefined>>;
|
|
101
|
+
export type ButtonVariant = VariantProps<typeof buttonVariants>['variant'];
|
|
102
|
+
export type ButtonSize = VariantProps<typeof buttonVariants>['size'];
|
|
103
|
+
export type ButtonProps = WithElementRef<HTMLButtonAttributes> & WithElementRef<HTMLAnchorAttributes> & {
|
|
104
|
+
variant?: ButtonVariant;
|
|
105
|
+
size?: ButtonSize;
|
|
106
|
+
checkCurrent?: boolean;
|
|
107
|
+
};
|
|
108
|
+
declare const Button: import("svelte").Component<ButtonProps, {}, "ref">;
|
|
109
|
+
type Button = ReturnType<typeof Button>;
|
|
110
|
+
export default Button;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Button, type ButtonProps, type ButtonSize, type ButtonVariant, buttonVariants } from './Button.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Button, buttonVariants } from './Button.svelte';
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../../utils';
|
|
3
|
+
import { ImageContainer } from '../image-container';
|
|
4
|
+
|
|
5
|
+
const {
|
|
6
|
+
src,
|
|
7
|
+
alt,
|
|
8
|
+
title,
|
|
9
|
+
description,
|
|
10
|
+
href,
|
|
11
|
+
class: className,
|
|
12
|
+
onclick
|
|
13
|
+
}: {
|
|
14
|
+
src: string;
|
|
15
|
+
alt: string;
|
|
16
|
+
title: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
href?: string;
|
|
19
|
+
onclick?: () => void;
|
|
20
|
+
class?: string;
|
|
21
|
+
} = $props();
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
{#snippet titleSnippet()}
|
|
25
|
+
<h3 class="text-base-900 dark:text-base-50 line-clamp-2 text-sm font-semibold">{title}</h3>
|
|
26
|
+
{/snippet}
|
|
27
|
+
|
|
28
|
+
<div
|
|
29
|
+
class={cn(
|
|
30
|
+
'group relative flex w-full flex-col gap-5 transition-opacity duration-300 ease-in-out',
|
|
31
|
+
href || onclick ? 'hover:opacity-80' : '',
|
|
32
|
+
className
|
|
33
|
+
)}
|
|
34
|
+
>
|
|
35
|
+
<ImageContainer
|
|
36
|
+
{src}
|
|
37
|
+
{alt}
|
|
38
|
+
containerClasses="w-full rounded-2xl overflow-hidden"
|
|
39
|
+
class={[
|
|
40
|
+
'aspect-video w-full object-cover transition-all duration-500 ease-in-out',
|
|
41
|
+
href || onclick ? 'group-hover:scale-105' : ''
|
|
42
|
+
]}
|
|
43
|
+
></ImageContainer>
|
|
44
|
+
<div class="flex max-w-xl flex-col gap-2">
|
|
45
|
+
{#if href}
|
|
46
|
+
<a {href}>
|
|
47
|
+
{@render titleSnippet()}
|
|
48
|
+
<span aria-hidden="true" class="absolute inset-0"></span>
|
|
49
|
+
</a>
|
|
50
|
+
{:else if onclick}
|
|
51
|
+
<button {onclick} class="inline-flex w-full cursor-pointer items-start">
|
|
52
|
+
{@render titleSnippet()}
|
|
53
|
+
<span aria-hidden="true" class="absolute inset-0"></span>
|
|
54
|
+
</button>
|
|
55
|
+
{:else}
|
|
56
|
+
{@render titleSnippet()}
|
|
57
|
+
{/if}
|
|
58
|
+
{#if description}
|
|
59
|
+
<p class="text-base-500 line-clamp-2 text-xs leading-4.5">{description}</p>
|
|
60
|
+
{/if}
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type $$ComponentProps = {
|
|
2
|
+
src: string;
|
|
3
|
+
alt: string;
|
|
4
|
+
title: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
href?: string;
|
|
7
|
+
onclick?: () => void;
|
|
8
|
+
class?: string;
|
|
9
|
+
};
|
|
10
|
+
declare const ImageCard: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
11
|
+
type ImageCard = ReturnType<typeof ImageCard>;
|
|
12
|
+
export default ImageCard;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as ImageCard } from './ImageCard.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as ImageCard } from './ImageCard.svelte';
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import { type VariantProps, tv } from 'tailwind-variants';
|
|
3
|
+
import { cn } from '../../utils';
|
|
4
|
+
|
|
5
|
+
export const badgeVariants = tv({
|
|
6
|
+
base: 'inline-flex items-center flex-col justify-start items-start whitespace-nowrap rounded-2xl text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 duration-300 active:duration-100 [&_svg]:pointer-events-none [&_svg]:shrink-0',
|
|
7
|
+
variants: {
|
|
8
|
+
variant: {
|
|
9
|
+
primary:
|
|
10
|
+
'border border-accent-500/20 dark:border-accent-500/20 bg-accent-500/10 dark:bg-accent-500/10 text-accent-700 dark:text-accent-400',
|
|
11
|
+
secondary:
|
|
12
|
+
'bg-base-300/30 dark:bg-base-800/50 text-base-900 dark:text-base-50 border border-base-300/50 dark:border-base-700/30',
|
|
13
|
+
|
|
14
|
+
red: 'border border-red-500/20 dark:border-red-500/20 bg-red-500/10 dark:bg-red-500/10 text-red-700 dark:text-red-400',
|
|
15
|
+
yellow:
|
|
16
|
+
'border border-yellow-500/20 dark:border-yellow-500/20 bg-yellow-500/10 dark:bg-yellow-500/10 text-yellow-700 dark:text-yellow-400',
|
|
17
|
+
green:
|
|
18
|
+
'border border-green-500/20 dark:border-green-500/20 bg-green-500/10 dark:bg-green-500/10 text-green-700 dark:text-green-400',
|
|
19
|
+
blue: 'border border-blue-500/20 dark:border-blue-500/20 bg-blue-500/10 dark:bg-blue-500/10 text-blue-700 dark:text-blue-400',
|
|
20
|
+
indigo:
|
|
21
|
+
'border border-indigo-500/20 dark:border-indigo-500/20 bg-indigo-500/10 dark:bg-indigo-500/10 text-indigo-700 dark:text-indigo-400',
|
|
22
|
+
violet:
|
|
23
|
+
'border border-violet-500/20 dark:border-violet-500/20 bg-violet-500/10 dark:bg-violet-500/10 text-violet-700 dark:text-violet-400',
|
|
24
|
+
purple:
|
|
25
|
+
'border border-purple-500/20 dark:border-purple-500/20 bg-purple-500/10 dark:bg-purple-500/10 text-purple-700 dark:text-purple-400',
|
|
26
|
+
fuchsia:
|
|
27
|
+
'border border-fuchsia-500/20 dark:border-fuchsia-500/20 bg-fuchsia-500/10 dark:bg-fuchsia-500/10 text-fuchsia-700 dark:text-fuchsia-400',
|
|
28
|
+
pink: 'border border-pink-500/20 dark:border-pink-500/20 bg-pink-500/10 dark:bg-pink-500/10 text-pink-700 dark:text-pink-400',
|
|
29
|
+
rose: 'border border-rose-500/20 dark:border-rose-500/20 bg-rose-500/10 dark:bg-rose-500/10 text-rose-700 dark:text-rose-400',
|
|
30
|
+
orange:
|
|
31
|
+
'border border-orange-500/20 dark:border-orange-500/20 bg-orange-500/10 dark:bg-orange-500/10 text-orange-700 dark:text-orange-400',
|
|
32
|
+
amber:
|
|
33
|
+
'border border-amber-500/20 dark:border-amber-500/20 bg-amber-500/10 dark:bg-amber-500/10 text-amber-700 dark:text-amber-400',
|
|
34
|
+
lime: 'border border-lime-500/20 dark:border-lime-500/20 bg-lime-500/10 dark:bg-lime-500/10 text-lime-700 dark:text-lime-400',
|
|
35
|
+
emerald:
|
|
36
|
+
'border border-emerald-500/20 dark:border-emerald-500/20 bg-emerald-500/10 dark:bg-emerald-500/10 text-emerald-700 dark:text-emerald-400',
|
|
37
|
+
teal: 'border border-teal-500/20 dark:border-teal-500/20 bg-teal-500/10 dark:bg-teal-500/10 text-teal-700 dark:text-teal-400',
|
|
38
|
+
cyan: 'border border-cyan-500/20 dark:border-cyan-500/20 bg-cyan-500/10 dark:bg-cyan-500/10 text-cyan-700 dark:text-cyan-400',
|
|
39
|
+
sky: 'border border-sky-500/20 dark:border-sky-500/20 bg-sky-500/10 dark:bg-sky-500/10 text-sky-700 dark:text-sky-400'
|
|
40
|
+
},
|
|
41
|
+
size: {
|
|
42
|
+
sm: 'px-2 text-xs py-0.5 [&_svg]:size-3 gap-1.5',
|
|
43
|
+
md: 'px-3 py-1.5 [&_svg]:size-4 gap-2',
|
|
44
|
+
lg: 'px-4 text-lg py-1.5 [&_svg]:size-5 gap-2.5'
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
defaultVariants: {
|
|
48
|
+
variant: 'primary',
|
|
49
|
+
size: 'md'
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
export type BadgeVariant = VariantProps<typeof badgeVariants>['variant'];
|
|
54
|
+
export type BadgeSize = VariantProps<typeof badgeVariants>['size'];
|
|
55
|
+
</script>
|
|
56
|
+
|
|
57
|
+
<script lang="ts">
|
|
58
|
+
import type { WithElementRef } from 'bits-ui';
|
|
59
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
60
|
+
|
|
61
|
+
let {
|
|
62
|
+
ref = $bindable(null),
|
|
63
|
+
class: className,
|
|
64
|
+
variant,
|
|
65
|
+
size = 'md',
|
|
66
|
+
children,
|
|
67
|
+
side = 'left',
|
|
68
|
+
...restProps
|
|
69
|
+
}: WithElementRef<HTMLAttributes<HTMLSpanElement>> & {
|
|
70
|
+
variant?: BadgeVariant;
|
|
71
|
+
size?: BadgeSize;
|
|
72
|
+
side?: 'left' | 'right';
|
|
73
|
+
} = $props();
|
|
74
|
+
|
|
75
|
+
if (variant === undefined) {
|
|
76
|
+
variant = side === 'right' ? 'primary' : 'secondary';
|
|
77
|
+
}
|
|
78
|
+
</script>
|
|
79
|
+
|
|
80
|
+
<div class="flex">
|
|
81
|
+
{#if side === 'right'}
|
|
82
|
+
<div class="grow"></div>
|
|
83
|
+
{/if}
|
|
84
|
+
|
|
85
|
+
<span
|
|
86
|
+
bind:this={ref}
|
|
87
|
+
class={cn(badgeVariants({ variant, size }), 'max-w-2/3 whitespace-normal', className)}
|
|
88
|
+
{...restProps}
|
|
89
|
+
>
|
|
90
|
+
{@render children?.()}
|
|
91
|
+
</span>
|
|
92
|
+
|
|
93
|
+
{#if side === 'left'}
|
|
94
|
+
<div class="grow"></div>
|
|
95
|
+
{/if}
|
|
96
|
+
</div>
|