@mrintel/villain-ui 0.3.0 → 0.6.3
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 -21
- package/README.md +3490 -1296
- package/dist/components/buttons/Button.svelte +27 -33
- package/dist/components/buttons/Button.svelte.d.ts +4 -1
- package/dist/components/buttons/ButtonGroup.svelte +17 -30
- package/dist/components/buttons/FloatingActionButton.svelte +20 -44
- package/dist/components/buttons/FloatingActionButton.svelte.d.ts +2 -1
- package/dist/components/buttons/IconButton.svelte +23 -53
- package/dist/components/buttons/IconButton.svelte.d.ts +2 -1
- package/dist/components/buttons/LinkButton.svelte +24 -37
- package/dist/components/buttons/LinkButton.svelte.d.ts +4 -1
- package/dist/components/buttons/buttonClasses.d.ts +5 -0
- package/dist/components/buttons/buttonClasses.js +8 -3
- package/dist/components/cards/Card.svelte +60 -46
- package/dist/components/cards/Card.svelte.d.ts +6 -2
- package/dist/components/cards/Container.svelte +17 -33
- package/dist/components/cards/Divider.svelte +36 -52
- package/dist/components/cards/Divider.svelte.d.ts +2 -0
- package/dist/components/cards/Grid.svelte +55 -44
- package/dist/components/cards/Panel.svelte +18 -32
- package/dist/components/cards/Panel.svelte.d.ts +2 -1
- package/dist/components/cards/SectionHeader.svelte +24 -38
- package/dist/components/cards/SectionHeader.svelte.d.ts +1 -0
- package/dist/components/data/Avatar.svelte +48 -67
- package/dist/components/data/Badge.svelte +45 -32
- package/dist/components/data/Badge.svelte.d.ts +7 -1
- package/dist/components/data/CalendarGrid.svelte +433 -0
- package/dist/components/data/CalendarGrid.svelte.d.ts +25 -0
- package/dist/components/data/CalendarGrid.types.d.ts +7 -0
- package/dist/components/data/CalendarGrid.types.js +1 -0
- package/dist/components/data/CodeBlock.svelte +119 -121
- package/dist/components/data/CodeBlock.svelte.d.ts +8 -0
- package/dist/components/data/List.svelte +87 -64
- package/dist/components/data/List.svelte.d.ts +7 -0
- package/dist/components/data/Pagination.svelte +121 -123
- package/dist/components/data/Pagination.svelte.d.ts +5 -0
- package/dist/components/data/Sparkline.svelte +117 -0
- package/dist/components/data/Sparkline.svelte.d.ts +43 -0
- package/dist/components/data/Stat.svelte +92 -103
- package/dist/components/data/Table.svelte +443 -76
- package/dist/components/data/Table.svelte.d.ts +23 -2
- package/dist/components/data/Table.types.d.ts +14 -0
- package/dist/components/data/Table.types.js +1 -0
- package/dist/components/data/Tag.svelte +51 -53
- package/dist/components/data/Tag.svelte.d.ts +5 -1
- package/dist/components/data/index.d.ts +4 -0
- package/dist/components/data/index.js +2 -0
- package/dist/components/forms/Checkbox.svelte +39 -51
- package/dist/components/forms/Checkbox.svelte.d.ts +3 -1
- package/dist/components/forms/DatePicker.svelte +61 -0
- package/dist/components/forms/DatePicker.svelte.d.ts +15 -0
- package/dist/components/forms/DateTimePicker.svelte +63 -0
- package/dist/components/forms/DateTimePicker.svelte.d.ts +16 -0
- package/dist/components/forms/FileUpload.svelte +136 -164
- package/dist/components/forms/FileUpload.svelte.d.ts +1 -0
- package/dist/components/forms/Input.svelte +282 -57
- package/dist/components/forms/Input.svelte.d.ts +9 -3
- package/dist/components/forms/InputGroup.svelte +7 -7
- package/dist/components/forms/RadioGroup.svelte +77 -87
- package/dist/components/forms/RadioGroup.svelte.d.ts +3 -1
- package/dist/components/forms/RangeSlider.svelte +90 -116
- package/dist/components/forms/Select.svelte +106 -71
- package/dist/components/forms/Select.svelte.d.ts +3 -1
- package/dist/components/forms/Switch.svelte +44 -56
- package/dist/components/forms/Switch.svelte.d.ts +3 -1
- package/dist/components/forms/Textarea.svelte +52 -57
- package/dist/components/forms/Textarea.svelte.d.ts +3 -1
- package/dist/components/forms/TimePicker.svelte +63 -0
- package/dist/components/forms/TimePicker.svelte.d.ts +16 -0
- package/dist/components/forms/formClasses.d.ts +3 -0
- package/dist/components/forms/formClasses.js +3 -0
- package/dist/components/forms/index.d.ts +3 -0
- package/dist/components/forms/index.js +3 -0
- package/dist/components/navigation/Breadcrumbs.svelte +56 -59
- package/dist/components/navigation/Breadcrumbs.svelte.d.ts +1 -0
- package/dist/components/navigation/ContextMenu.svelte +133 -83
- package/dist/components/navigation/ContextMenu.svelte.d.ts +8 -1
- package/dist/components/navigation/DropdownMenu.svelte +139 -80
- package/dist/components/navigation/DropdownMenu.svelte.d.ts +8 -1
- package/dist/components/navigation/Menu.svelte +72 -48
- package/dist/components/navigation/Navbar.svelte +111 -32
- package/dist/components/navigation/Navbar.svelte.d.ts +6 -0
- package/dist/components/navigation/Sidebar.svelte +236 -35
- package/dist/components/navigation/Sidebar.svelte.d.ts +2 -0
- package/dist/components/navigation/Tabs.svelte +86 -54
- package/dist/components/navigation/Tabs.svelte.d.ts +5 -1
- package/dist/components/overlays/Alert.svelte +81 -99
- package/dist/components/overlays/Alert.svelte.d.ts +5 -1
- package/dist/components/overlays/CommandPalette.svelte +182 -217
- package/dist/components/overlays/Drawer.svelte +158 -167
- package/dist/components/overlays/Drawer.svelte.d.ts +3 -1
- package/dist/components/overlays/Dropdown.svelte +62 -30
- package/dist/components/overlays/Dropdown.svelte.d.ts +2 -0
- package/dist/components/overlays/Modal.svelte +125 -130
- package/dist/components/overlays/Modal.svelte.d.ts +3 -1
- package/dist/components/overlays/Popover.svelte +106 -131
- package/dist/components/overlays/ProgressBar.svelte +29 -45
- package/dist/components/overlays/SkeletonLoader.svelte +66 -82
- package/dist/components/overlays/Spinner.svelte +33 -43
- package/dist/components/overlays/Toast.svelte +111 -140
- package/dist/components/overlays/Toast.svelte.d.ts +3 -0
- package/dist/components/overlays/Tooltip.svelte +94 -115
- package/dist/components/overlays/Tooltip.svelte.d.ts +3 -1
- package/dist/components/typography/Code.svelte +10 -14
- package/dist/components/typography/Heading.svelte +15 -22
- package/dist/components/typography/Heading.svelte.d.ts +1 -0
- package/dist/components/typography/Text.svelte +21 -24
- package/dist/components/typography/Text.svelte.d.ts +2 -1
- package/dist/components/utilities/Accordion.svelte +54 -67
- package/dist/components/utilities/Accordion.svelte.d.ts +4 -1
- package/dist/components/utilities/Carousel.svelte +124 -152
- package/dist/components/utilities/Collapse.svelte +46 -60
- package/dist/components/utilities/Hero.svelte +42 -0
- package/dist/components/utilities/Hero.svelte.d.ts +10 -0
- package/dist/components/utilities/Portal.svelte +47 -72
- package/dist/components/utilities/ScrollArea.svelte +33 -41
- package/dist/components/utilities/SystemConsole.svelte +310 -0
- package/dist/components/utilities/SystemConsole.svelte.d.ts +20 -0
- package/dist/components/utilities/SystemInterface.svelte +726 -0
- package/dist/components/utilities/SystemInterface.svelte.d.ts +19 -0
- package/dist/components/utilities/index.d.ts +4 -0
- package/dist/components/utilities/index.js +3 -0
- package/dist/components/utilities/utilities.types.d.ts +46 -0
- package/dist/components/utilities/utilities.types.js +4 -0
- package/dist/index.d.ts +49 -4
- package/dist/index.js +4 -4
- package/dist/theme.css +2821 -218
- package/package.json +83 -76
|
@@ -1,33 +1,27 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
{disabled}
|
|
29
|
-
onclick={onclick}
|
|
30
|
-
class="{baseClasses} {variantClasses[variant]} {sizeClasses[size]} {disabled ? disabledClasses : ''}"
|
|
31
|
-
>
|
|
32
|
-
{@render children?.()}
|
|
33
|
-
</button>
|
|
1
|
+
<script lang="ts">import { variantClasses, sizeClasses, disabledClasses } from './buttonClasses';
|
|
2
|
+
let { variant = 'primary', size = 'md', disabled = false, type = 'button', onclick, iconBefore, iconAfter, class: className = '', children, ...restProps } = $props();
|
|
3
|
+
const baseClasses = 'inline-flex items-center justify-center rounded-[var(--radius-lg)] font-[var(--font-body)] transition-all duration-300 ease-[var(--ease-luxe)] cursor-pointer gap-2';
|
|
4
|
+
const classes = $derived(`${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${disabled ? disabledClasses : ''} ${className}`);
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<button
|
|
8
|
+
{type}
|
|
9
|
+
{disabled}
|
|
10
|
+
onclick={onclick}
|
|
11
|
+
class={classes}
|
|
12
|
+
{...restProps}
|
|
13
|
+
>
|
|
14
|
+
{#if iconBefore}
|
|
15
|
+
<span class="inline-flex items-center justify-center">
|
|
16
|
+
{@render iconBefore()}
|
|
17
|
+
</span>
|
|
18
|
+
{/if}
|
|
19
|
+
{#if children}
|
|
20
|
+
{@render children()}
|
|
21
|
+
{/if}
|
|
22
|
+
{#if iconAfter}
|
|
23
|
+
<span class="inline-flex items-center justify-center">
|
|
24
|
+
{@render iconAfter()}
|
|
25
|
+
</span>
|
|
26
|
+
{/if}
|
|
27
|
+
</button>
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
interface Props {
|
|
1
|
+
export interface Props {
|
|
2
2
|
variant?: 'primary' | 'secondary' | 'ghost';
|
|
3
3
|
size?: 'sm' | 'md' | 'lg';
|
|
4
4
|
disabled?: boolean;
|
|
5
5
|
type?: 'button' | 'submit' | 'reset';
|
|
6
6
|
onclick?: (event: MouseEvent) => void;
|
|
7
|
+
iconBefore?: import('svelte').Snippet;
|
|
8
|
+
iconAfter?: import('svelte').Snippet;
|
|
7
9
|
children?: import('svelte').Snippet;
|
|
10
|
+
class?: string;
|
|
8
11
|
}
|
|
9
12
|
declare const Button: import("svelte").Component<Props, {}, "">;
|
|
10
13
|
type Button = ReturnType<typeof Button>;
|
|
@@ -1,30 +1,17 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const mergedBorderClasses = {
|
|
20
|
-
horizontal: '[&>*:not(:first-child)]:ml-[-1px] [&>*:not(:first-child):not(:last-child)]:rounded-none [&>*:first-child]:rounded-r-none [&>*:last-child]:rounded-l-none',
|
|
21
|
-
vertical: '[&>*:not(:first-child)]:mt-[-1px] [&>*:not(:first-child):not(:last-child)]:rounded-none [&>*:first-child]:rounded-b-none [&>*:last-child]:rounded-t-none'
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const spacingClasses = 'gap-2';
|
|
25
|
-
const baseClasses = 'flex bg-transparent';
|
|
26
|
-
</script>
|
|
27
|
-
|
|
28
|
-
<div class="{baseClasses} {orientationClasses[orientation]} {spacing ? spacingClasses : mergedBorderClasses[orientation]}">
|
|
29
|
-
{@render children?.()}
|
|
30
|
-
</div>
|
|
1
|
+
<script lang="ts">"use strict";
|
|
2
|
+
let { orientation = 'horizontal', spacing = false, children } = $props();
|
|
3
|
+
const orientationClasses = {
|
|
4
|
+
horizontal: 'flex-row',
|
|
5
|
+
vertical: 'flex-col'
|
|
6
|
+
};
|
|
7
|
+
const mergedBorderClasses = {
|
|
8
|
+
horizontal: '[&>*:not(:first-child)]:ml-[-1px] [&>*:not(:first-child):not(:last-child)]:rounded-none [&>*:first-child]:rounded-r-none [&>*:last-child]:rounded-l-none',
|
|
9
|
+
vertical: '[&>*:not(:first-child)]:mt-[-1px] [&>*:not(:first-child):not(:last-child)]:rounded-none [&>*:first-child]:rounded-b-none [&>*:last-child]:rounded-t-none'
|
|
10
|
+
};
|
|
11
|
+
const spacingClasses = 'gap-2';
|
|
12
|
+
const baseClasses = 'flex bg-transparent';
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<div class="{baseClasses} {orientationClasses[orientation]} {spacing ? spacingClasses : mergedBorderClasses[orientation]}">
|
|
16
|
+
{@render children?.()}
|
|
17
|
+
</div>
|
|
@@ -1,44 +1,20 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
'bottom-right': 'bottom-6 right-6',
|
|
22
|
-
'bottom-left': 'bottom-6 left-6',
|
|
23
|
-
'top-right': 'top-6 right-6',
|
|
24
|
-
'top-left': 'top-6 left-6'
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const sizeClasses = {
|
|
28
|
-
md: 'w-14 h-14 text-base',
|
|
29
|
-
lg: 'w-16 h-16 text-lg'
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
const baseClasses = 'fixed z-50 flex items-center justify-center rounded-[var(--radius-pill)] bg-[var(--color-accent)] text-[var(--color-text)] accent-glow hover-lift shadow-[var(--shadow-deep)] transition-all duration-300 ease-[var(--ease-luxe)] cursor-pointer animate-[glow-pulse_3s_ease-in-out_infinite] hover:scale-110';
|
|
33
|
-
const disabledClasses = 'opacity-50 cursor-not-allowed pointer-events-none';
|
|
34
|
-
</script>
|
|
35
|
-
|
|
36
|
-
<button
|
|
37
|
-
type="button"
|
|
38
|
-
{disabled}
|
|
39
|
-
aria-label={ariaLabel}
|
|
40
|
-
onclick={onclick}
|
|
41
|
-
class="{baseClasses} {positionClasses[position]} {sizeClasses[size]} {disabled ? disabledClasses : ''}"
|
|
42
|
-
>
|
|
43
|
-
{@render children?.()}
|
|
44
|
-
</button>
|
|
1
|
+
<script lang="ts">import { fabSizeClasses, disabledClasses } from './buttonClasses';
|
|
2
|
+
let { position = 'bottom-right', size = 'lg', disabled = false, ariaLabel, onclick, children, class: className = '' } = $props();
|
|
3
|
+
const positionClasses = {
|
|
4
|
+
'bottom-right': 'bottom-6 right-6',
|
|
5
|
+
'bottom-left': 'bottom-6 left-6',
|
|
6
|
+
'top-right': 'top-6 right-6',
|
|
7
|
+
'top-left': 'top-6 left-6'
|
|
8
|
+
};
|
|
9
|
+
const baseClasses = 'fixed z-[var(--z-50)] flex items-center justify-center rounded-[var(--radius-pill)] bg-[var(--color-accent)] text-[var(--color-text)] accent-glow hover-lift shadow-[var(--shadow-deep)] transition-all duration-300 ease-[var(--ease-luxe)] cursor-pointer animate-[glow-pulse_3s_ease-in-out_infinite] hover:scale-110';
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<button
|
|
13
|
+
type="button"
|
|
14
|
+
{disabled}
|
|
15
|
+
aria-label={ariaLabel}
|
|
16
|
+
onclick={onclick}
|
|
17
|
+
class="{baseClasses} {positionClasses[position]} {fabSizeClasses[size]} {disabled ? disabledClasses : ''} {className}"
|
|
18
|
+
>
|
|
19
|
+
{@render children?.()}
|
|
20
|
+
</button>
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
interface Props {
|
|
1
|
+
export interface Props {
|
|
2
2
|
position?: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
|
|
3
3
|
size?: 'md' | 'lg';
|
|
4
4
|
disabled?: boolean;
|
|
5
5
|
ariaLabel: string;
|
|
6
6
|
onclick?: (event: MouseEvent) => void;
|
|
7
7
|
children?: import('svelte').Snippet;
|
|
8
|
+
class?: string;
|
|
8
9
|
}
|
|
9
10
|
declare const FloatingActionButton: import("svelte").Component<Props, {}, "">;
|
|
10
11
|
type FloatingActionButton = ReturnType<typeof FloatingActionButton>;
|
|
@@ -1,53 +1,23 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const variantClasses = {
|
|
25
|
-
primary: 'bg-[var(--color-accent)] text-[var(--color-text)] accent-glow',
|
|
26
|
-
secondary: 'bg-transparent text-[var(--color-text)] border border-[var(--color-border-strong)] hover:border-[var(--color-accent)]',
|
|
27
|
-
ghost: 'bg-transparent text-[var(--color-text)] hover:bg-[var(--color-base-2)]'
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const sizeClasses = {
|
|
31
|
-
sm: 'w-8 h-8 text-sm',
|
|
32
|
-
md: 'w-10 h-10 text-base',
|
|
33
|
-
lg: 'w-12 h-12 text-lg'
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const shapeClasses = {
|
|
37
|
-
circle: 'rounded-[var(--radius-pill)]',
|
|
38
|
-
square: 'rounded-[var(--radius-lg)]'
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const baseClasses = 'inline-flex items-center justify-center font-[var(--font-body)] transition-all duration-300 ease-[var(--ease-luxe)] cursor-pointer hover-lift';
|
|
42
|
-
const disabledClasses = 'opacity-50 cursor-not-allowed pointer-events-none';
|
|
43
|
-
</script>
|
|
44
|
-
|
|
45
|
-
<button
|
|
46
|
-
{type}
|
|
47
|
-
{disabled}
|
|
48
|
-
aria-label={ariaLabel}
|
|
49
|
-
onclick={onclick}
|
|
50
|
-
class="{baseClasses} {variantClasses[variant]} {sizeClasses[size]} {shapeClasses[shape]} {disabled ? disabledClasses : ''}"
|
|
51
|
-
>
|
|
52
|
-
{@render children?.()}
|
|
53
|
-
</button>
|
|
1
|
+
<script lang="ts">import { variantClasses, disabledClasses } from './buttonClasses';
|
|
2
|
+
let { variant = 'ghost', size = 'md', shape = 'circle', disabled = false, type = 'button', ariaLabel, onclick, children, class: className = '' } = $props();
|
|
3
|
+
const iconSizeClasses = {
|
|
4
|
+
sm: 'w-10 h-10 text-sm',
|
|
5
|
+
md: 'w-12 h-12 text-base',
|
|
6
|
+
lg: 'w-14 h-14 text-lg'
|
|
7
|
+
};
|
|
8
|
+
const shapeClasses = {
|
|
9
|
+
circle: 'rounded-[var(--radius-pill)]',
|
|
10
|
+
square: 'rounded-[var(--radius-lg)]'
|
|
11
|
+
};
|
|
12
|
+
const baseClasses = 'inline-flex items-center justify-center font-[var(--font-body)] transition-all duration-300 ease-[var(--ease-luxe)] cursor-pointer hover-lift';
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<button
|
|
16
|
+
{type}
|
|
17
|
+
{disabled}
|
|
18
|
+
aria-label={ariaLabel}
|
|
19
|
+
onclick={onclick}
|
|
20
|
+
class="{baseClasses} {variantClasses[variant]} {iconSizeClasses[size]} {shapeClasses[shape]} {disabled ? disabledClasses : ''} {className}"
|
|
21
|
+
>
|
|
22
|
+
{@render children?.()}
|
|
23
|
+
</button>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
interface Props {
|
|
1
|
+
export interface Props {
|
|
2
2
|
variant?: 'primary' | 'secondary' | 'ghost';
|
|
3
3
|
size?: 'sm' | 'md' | 'lg';
|
|
4
4
|
shape?: 'circle' | 'square';
|
|
@@ -7,6 +7,7 @@ interface Props {
|
|
|
7
7
|
ariaLabel: string;
|
|
8
8
|
onclick?: (event: MouseEvent) => void;
|
|
9
9
|
children?: import('svelte').Snippet;
|
|
10
|
+
class?: string;
|
|
10
11
|
}
|
|
11
12
|
declare const IconButton: import("svelte").Component<Props, {}, "">;
|
|
12
13
|
type IconButton = ReturnType<typeof IconButton>;
|
|
@@ -1,37 +1,24 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const disabledClasses = 'opacity-50 pointer-events-none';
|
|
26
|
-
|
|
27
|
-
const computedRel = $derived(target === '_blank' ? (rel || 'noopener noreferrer') : rel);
|
|
28
|
-
</script>
|
|
29
|
-
|
|
30
|
-
<a
|
|
31
|
-
href={disabled ? undefined : href}
|
|
32
|
-
{target}
|
|
33
|
-
rel={computedRel}
|
|
34
|
-
class="{baseClasses} {variantClasses[variant]} {sizeClasses[size]} {disabled ? disabledClasses : ''}"
|
|
35
|
-
>
|
|
36
|
-
{@render children?.()}
|
|
37
|
-
</a>
|
|
1
|
+
<script lang="ts">import { variantClasses, sizeClasses, disabledClasses } from './buttonClasses';
|
|
2
|
+
let { href, variant = 'primary', size = 'md', disabled = false, target, rel, children, iconBefore, iconAfter, class: className = '' } = $props();
|
|
3
|
+
const baseClasses = 'inline-flex items-center justify-center rounded-[var(--radius-lg)] font-[var(--font-body)] transition-all duration-300 ease-[var(--ease-luxe)] no-underline gap-2';
|
|
4
|
+
const computedRel = $derived(target === '_blank' ? (rel || 'noopener noreferrer') : rel);
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<a
|
|
8
|
+
href={disabled ? undefined : href}
|
|
9
|
+
{target}
|
|
10
|
+
rel={computedRel}
|
|
11
|
+
class="{baseClasses} {variantClasses[variant]} {sizeClasses[size]} {disabled ? disabledClasses : ''} {className}"
|
|
12
|
+
>
|
|
13
|
+
{#if iconBefore}
|
|
14
|
+
<span class="inline-flex items-center justify-center">
|
|
15
|
+
{@render iconBefore()}
|
|
16
|
+
</span>
|
|
17
|
+
{/if}
|
|
18
|
+
{@render children?.()}
|
|
19
|
+
{#if iconAfter}
|
|
20
|
+
<span class="inline-flex items-center justify-center">
|
|
21
|
+
{@render iconAfter()}
|
|
22
|
+
</span>
|
|
23
|
+
{/if}
|
|
24
|
+
</a>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
interface Props {
|
|
1
|
+
export interface Props {
|
|
2
2
|
href: string;
|
|
3
3
|
variant?: 'primary' | 'secondary' | 'ghost';
|
|
4
4
|
size?: 'sm' | 'md' | 'lg';
|
|
@@ -6,6 +6,9 @@ interface Props {
|
|
|
6
6
|
target?: '_self' | '_blank' | '_parent' | '_top';
|
|
7
7
|
rel?: string;
|
|
8
8
|
children?: import('svelte').Snippet;
|
|
9
|
+
iconBefore?: import('svelte').Snippet;
|
|
10
|
+
iconAfter?: import('svelte').Snippet;
|
|
11
|
+
class?: string;
|
|
9
12
|
}
|
|
10
13
|
declare const LinkButton: import("svelte").Component<Props, {}, "">;
|
|
11
14
|
type LinkButton = ReturnType<typeof LinkButton>;
|
|
@@ -4,7 +4,12 @@ export const variantClasses = {
|
|
|
4
4
|
ghost: 'bg-transparent text-[var(--color-text)] hover:bg-[var(--color-base-2)] hover-lift'
|
|
5
5
|
};
|
|
6
6
|
export const sizeClasses = {
|
|
7
|
-
sm: 'px-3 py-1.5 text-sm',
|
|
8
|
-
md: 'px-4 py-2 text-base',
|
|
9
|
-
lg: 'px-
|
|
7
|
+
sm: 'px-3 py-1.5 text-sm font-medium',
|
|
8
|
+
md: 'px-4 py-2 text-base font-medium',
|
|
9
|
+
lg: 'px-5 py-2.5 text-lg font-semibold'
|
|
10
|
+
};
|
|
11
|
+
export const disabledClasses = 'opacity-50 cursor-not-allowed pointer-events-none';
|
|
12
|
+
export const fabSizeClasses = {
|
|
13
|
+
md: 'w-16 h-16 text-base',
|
|
14
|
+
lg: 'w-18 h-18 text-lg'
|
|
10
15
|
};
|
|
@@ -1,46 +1,60 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
1
|
+
<script lang="ts">let { padding = 'md', href, target = '_self', rel, class: className = '', children, header, footer, iconBefore, ...restProps } = $props();
|
|
2
|
+
// Compute rel attribute: use explicit rel if provided, otherwise default to 'noopener noreferrer' for target='_blank'
|
|
3
|
+
const relValue = $derived(rel ?? (target === '_blank' ? 'noopener noreferrer' : undefined));
|
|
4
|
+
const paddingClasses = {
|
|
5
|
+
none: 'p-0',
|
|
6
|
+
sm: 'p-4',
|
|
7
|
+
md: 'p-6',
|
|
8
|
+
lg: 'p-8'
|
|
9
|
+
};
|
|
10
|
+
const baseClasses = $derived(`panel-raised rounded-[var(--radius-lg)] transition-all duration-300 ease-[var(--ease-luxe)] ${href ? 'no-underline' : ''}`);
|
|
11
|
+
export {};
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
{#if href}
|
|
15
|
+
<a {href} {target} rel={relValue} class="{baseClasses} {paddingClasses[padding]} {className}" {...restProps}>
|
|
16
|
+
{#if iconBefore}
|
|
17
|
+
<div class="card-icon">
|
|
18
|
+
{@render iconBefore()}
|
|
19
|
+
</div>
|
|
20
|
+
{/if}
|
|
21
|
+
{#if header}
|
|
22
|
+
<div class="pb-3 mb-3 border-b border-border-strong">
|
|
23
|
+
{@render header()}
|
|
24
|
+
</div>
|
|
25
|
+
{/if}
|
|
26
|
+
|
|
27
|
+
<div>
|
|
28
|
+
{@render children?.()}
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
{#if footer}
|
|
32
|
+
<div class="pt-3 mt-3 border-t border-border-strong">
|
|
33
|
+
{@render footer()}
|
|
34
|
+
</div>
|
|
35
|
+
{/if}
|
|
36
|
+
</a>
|
|
37
|
+
{:else}
|
|
38
|
+
<div class="{baseClasses} {paddingClasses[padding]} {className}" {...restProps}>
|
|
39
|
+
{#if iconBefore}
|
|
40
|
+
<div class="card-icon">
|
|
41
|
+
{@render iconBefore()}
|
|
42
|
+
</div>
|
|
43
|
+
{/if}
|
|
44
|
+
{#if header}
|
|
45
|
+
<div class="pb-3 mb-3 border-b border-border-strong">
|
|
46
|
+
{@render header()}
|
|
47
|
+
</div>
|
|
48
|
+
{/if}
|
|
49
|
+
|
|
50
|
+
<div>
|
|
51
|
+
{@render children?.()}
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
{#if footer}
|
|
55
|
+
<div class="pt-3 mt-3 border-t border-border-strong">
|
|
56
|
+
{@render footer()}
|
|
57
|
+
</div>
|
|
58
|
+
{/if}
|
|
59
|
+
</div>
|
|
60
|
+
{/if}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
|
-
interface Props {
|
|
2
|
+
export interface Props {
|
|
3
3
|
padding?: 'none' | 'sm' | 'md' | 'lg';
|
|
4
|
-
|
|
4
|
+
href?: string;
|
|
5
|
+
target?: '_blank' | '_self' | '_parent' | '_top';
|
|
6
|
+
rel?: string;
|
|
7
|
+
class?: string;
|
|
5
8
|
children?: Snippet;
|
|
6
9
|
header?: Snippet;
|
|
7
10
|
footer?: Snippet;
|
|
11
|
+
iconBefore?: Snippet;
|
|
8
12
|
}
|
|
9
13
|
declare const Card: import("svelte").Component<Props, {}, "">;
|
|
10
14
|
type Card = ReturnType<typeof Card>;
|
|
@@ -1,33 +1,17 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const sizeClasses = {
|
|
19
|
-
sm: 'max-w-screen-sm',
|
|
20
|
-
md: 'max-w-screen-md',
|
|
21
|
-
lg: 'max-w-screen-lg',
|
|
22
|
-
xl: 'max-w-screen-xl',
|
|
23
|
-
full: 'max-w-full'
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
const centeredClasses = centered ? 'mx-auto' : '';
|
|
27
|
-
const paddingClasses = padding ? 'px-4 md:px-6 lg:px-8' : '';
|
|
28
|
-
const baseClasses = 'w-full';
|
|
29
|
-
</script>
|
|
30
|
-
|
|
31
|
-
<div class="{baseClasses} {sizeClasses[size]} {centeredClasses} {paddingClasses}">
|
|
32
|
-
{@render children?.()}
|
|
33
|
-
</div>
|
|
1
|
+
<script lang="ts">let { size = 'lg', centered = true, padding = true, class: className = '', children, ...restProps } = $props();
|
|
2
|
+
const sizeClasses = {
|
|
3
|
+
sm: 'max-w-screen-sm',
|
|
4
|
+
md: 'max-w-screen-md',
|
|
5
|
+
lg: 'max-w-screen-lg',
|
|
6
|
+
xl: 'max-w-screen-xl',
|
|
7
|
+
full: 'max-w-full'
|
|
8
|
+
};
|
|
9
|
+
const centeredClasses = centered ? 'mx-auto' : '';
|
|
10
|
+
const paddingClasses = padding ? 'px-4 md:px-6 lg:px-8 py-8 md:py-12 lg:py-16' : '';
|
|
11
|
+
const baseClasses = 'w-full';
|
|
12
|
+
export {};
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<div class="{baseClasses} {sizeClasses[size]} {centeredClasses} {paddingClasses} {className}" {...restProps}>
|
|
16
|
+
{@render children?.()}
|
|
17
|
+
</div>
|