@makolabs/ripple 0.0.1-dev.6 → 0.0.1-dev.8
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/README.md +393 -53
- package/dist/button/Button.svelte +5 -3
- package/dist/button/Button.svelte.d.ts +1 -1
- package/dist/button/button.d.ts +40 -63
- package/dist/button/button.js +15 -14
- package/dist/charts/Chart.svelte +533 -0
- package/dist/charts/Chart.svelte.d.ts +4 -0
- package/dist/drawer/Drawer.svelte +13 -2
- package/dist/drawer/Drawer.svelte.d.ts +1 -1
- package/dist/drawer/drawer.d.ts +0 -17
- package/dist/elements/alert/Alert.svelte +53 -0
- package/dist/elements/alert/Alert.svelte.d.ts +4 -0
- package/dist/elements/badge/Badge.svelte +13 -5
- package/dist/elements/badge/Badge.svelte.d.ts +1 -1
- package/dist/elements/badge/badge.d.ts +0 -12
- package/dist/elements/dropdown/Dropdown.svelte +32 -37
- package/dist/elements/dropdown/Dropdown.svelte.d.ts +1 -1
- package/dist/elements/dropdown/Select.svelte +143 -59
- package/dist/elements/dropdown/Select.svelte.d.ts +1 -1
- package/dist/elements/dropdown/dropdown.d.ts +34 -57
- package/dist/elements/dropdown/dropdown.js +10 -4
- package/dist/elements/dropdown/select.d.ts +34 -54
- package/dist/elements/dropdown/select.js +22 -14
- package/dist/elements/file-upload/FileUpload.svelte +213 -0
- package/dist/elements/file-upload/FileUpload.svelte.d.ts +4 -0
- package/dist/elements/progress/Progress.svelte +87 -0
- package/dist/elements/progress/Progress.svelte.d.ts +4 -0
- package/dist/elements/timeline/Timeline.svelte +92 -0
- package/dist/elements/timeline/Timeline.svelte.d.ts +7 -0
- package/dist/forms/Checkbox.svelte +54 -0
- package/dist/forms/Checkbox.svelte.d.ts +4 -0
- package/dist/forms/DateRange.svelte +493 -0
- package/dist/forms/DateRange.svelte.d.ts +4 -0
- package/dist/forms/Form.svelte +39 -0
- package/dist/forms/Form.svelte.d.ts +4 -0
- package/dist/forms/Input.svelte +86 -0
- package/dist/forms/Input.svelte.d.ts +4 -0
- package/dist/forms/NumberInput.svelte +159 -0
- package/dist/forms/NumberInput.svelte.d.ts +4 -0
- package/dist/forms/RadioInputs.svelte +64 -0
- package/dist/forms/RadioInputs.svelte.d.ts +4 -0
- package/dist/forms/RadioPill.svelte +66 -0
- package/dist/forms/RadioPill.svelte.d.ts +4 -0
- package/dist/forms/Slider.svelte +342 -0
- package/dist/forms/Slider.svelte.d.ts +4 -0
- package/dist/forms/Tags.svelte +181 -0
- package/dist/forms/Tags.svelte.d.ts +4 -0
- package/dist/forms/Toggle.svelte +132 -0
- package/dist/forms/Toggle.svelte.d.ts +4 -0
- package/dist/forms/slider.d.ts +143 -0
- package/dist/forms/slider.js +62 -0
- package/dist/header/Breadcrumbs.svelte +2 -1
- package/dist/header/Breadcrumbs.svelte.d.ts +1 -1
- package/dist/header/PageHeader.svelte +2 -2
- package/dist/header/PageHeader.svelte.d.ts +1 -1
- package/dist/header/breadcrumbs.d.ts +20 -14
- package/dist/header/breadcrumbs.js +6 -0
- package/dist/header/pageheaders.d.ts +1 -1
- package/dist/helper/date.d.ts +7 -0
- package/dist/helper/date.js +15 -0
- package/dist/index.d.ts +742 -9
- package/dist/index.js +59 -16
- package/dist/layout/card/Card.svelte +5 -8
- package/dist/layout/card/Card.svelte.d.ts +1 -1
- package/dist/layout/card/StatsCard.svelte +116 -87
- package/dist/layout/card/card.d.ts +22 -33
- package/dist/layout/card/card.js +9 -8
- package/dist/layout/card/stats-card.d.ts +23 -25
- package/dist/layout/card/stats-card.js +13 -13
- package/dist/layout/navbar/navbar.d.ts +0 -23
- package/dist/layout/sidebar/NavGroup.svelte +33 -41
- package/dist/layout/sidebar/NavGroup.svelte.d.ts +1 -1
- package/dist/layout/sidebar/NavItem.svelte +1 -1
- package/dist/layout/sidebar/NavItem.svelte.d.ts +1 -1
- package/dist/layout/sidebar/Sidebar.svelte +19 -25
- package/dist/layout/sidebar/Sidebar.svelte.d.ts +1 -1
- package/dist/layout/table/table.d.ts +1 -1
- package/dist/layout/tabs/tabs.d.ts +1 -1
- package/dist/modal/Modal.svelte +2 -1
- package/dist/modal/Modal.svelte.d.ts +1 -1
- package/dist/modal/modal.d.ts +0 -23
- package/dist/sonner/sonner.svelte +13 -0
- package/dist/sonner/sonner.svelte.d.ts +4 -0
- package/dist/types/variants.d.ts +1 -21
- package/dist/types/variants.js +1 -19
- package/dist/variants.d.ts +20 -0
- package/dist/variants.js +19 -0
- package/package.json +6 -2
- package/dist/button/index.d.ts +0 -1
- package/dist/button/index.js +0 -1
- package/dist/drawer/index.d.ts +0 -2
- package/dist/drawer/index.js +0 -1
- package/dist/elements/badge/index.d.ts +0 -2
- package/dist/elements/badge/index.js +0 -2
- package/dist/elements/dropdown/index.d.ts +0 -3
- package/dist/elements/dropdown/index.js +0 -2
- package/dist/header/index.d.ts +0 -4
- package/dist/header/index.js +0 -2
- package/dist/layout/card/index.d.ts +0 -4
- package/dist/layout/card/index.js +0 -2
- package/dist/layout/index.d.ts +0 -5
- package/dist/layout/index.js +0 -5
- package/dist/layout/navbar/index.d.ts +0 -2
- package/dist/layout/navbar/index.js +0 -2
- package/dist/layout/sidebar/index.d.ts +0 -2
- package/dist/layout/sidebar/index.js +0 -1
- package/dist/layout/sidebar/sidebar.d.ts +0 -46
- package/dist/layout/sidebar/sidebar.js +0 -1
- package/dist/layout/table/index.d.ts +0 -3
- package/dist/layout/table/index.js +0 -2
- package/dist/layout/tabs/index.d.ts +0 -3
- package/dist/layout/tabs/index.js +0 -3
- package/dist/modal/index.d.ts +0 -1
- package/dist/modal/index.js +0 -1
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Badge from '../elements/badge/Badge.svelte';
|
|
3
|
+
import { Size } from '../variants.js';
|
|
4
|
+
import { cn } from '../helper/cls.js';
|
|
5
|
+
import type { TagsProps } from '../index.js';
|
|
6
|
+
|
|
7
|
+
let {
|
|
8
|
+
value = $bindable([]),
|
|
9
|
+
name,
|
|
10
|
+
label,
|
|
11
|
+
errors,
|
|
12
|
+
placeholder = 'Type and press enter to add tags...',
|
|
13
|
+
size = Size.BASE,
|
|
14
|
+
class: className = '',
|
|
15
|
+
suggestions = [],
|
|
16
|
+
onaddtag: onAddTag,
|
|
17
|
+
onremovetag: onRemoveTag
|
|
18
|
+
}: TagsProps = $props();
|
|
19
|
+
|
|
20
|
+
let inputValue = $state('');
|
|
21
|
+
let inputRef = $state<HTMLInputElement | null>(null);
|
|
22
|
+
let showSuggestions = $state(false);
|
|
23
|
+
let highlightedIndex = $state(-1);
|
|
24
|
+
|
|
25
|
+
const isUnselected = (suggestion: string) => !value.includes(suggestion);
|
|
26
|
+
|
|
27
|
+
const matchesInput = (suggestion: string) =>
|
|
28
|
+
!inputValue || suggestion.toLowerCase().includes(inputValue.toLowerCase());
|
|
29
|
+
|
|
30
|
+
const filteredSuggestions = $derived(
|
|
31
|
+
showSuggestions ? suggestions.filter(isUnselected).filter(matchesInput).slice(0, 5) : []
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
function handleKeydown(event: KeyboardEvent) {
|
|
35
|
+
if (event.key === 'Enter') {
|
|
36
|
+
event.preventDefault();
|
|
37
|
+
if (highlightedIndex >= 0 && highlightedIndex < filteredSuggestions.length) {
|
|
38
|
+
handleTagAddition(filteredSuggestions[highlightedIndex]);
|
|
39
|
+
} else {
|
|
40
|
+
const tag = inputValue.trim();
|
|
41
|
+
if (tag) handleTagAddition(tag);
|
|
42
|
+
}
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (event.key === 'ArrowDown') {
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
if (!showSuggestions) {
|
|
49
|
+
showSuggestions = true;
|
|
50
|
+
highlightedIndex = 0;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
highlightedIndex = Math.min(highlightedIndex + 1, filteredSuggestions.length - 1);
|
|
54
|
+
if (highlightedIndex === -1 && filteredSuggestions.length > 0) highlightedIndex = 0;
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (event.key === 'ArrowUp') {
|
|
59
|
+
event.preventDefault();
|
|
60
|
+
highlightedIndex = Math.max(highlightedIndex - 1, -1);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (event.key === 'Escape') {
|
|
65
|
+
showSuggestions = false;
|
|
66
|
+
highlightedIndex = -1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function handleTagAddition(tag: string) {
|
|
71
|
+
if (!value.includes(tag)) {
|
|
72
|
+
value = [...value, tag];
|
|
73
|
+
onAddTag?.(tag);
|
|
74
|
+
}
|
|
75
|
+
inputValue = '';
|
|
76
|
+
showSuggestions = false;
|
|
77
|
+
highlightedIndex = -1;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function handleTagRemoval(tag: string) {
|
|
81
|
+
value = value.filter((t) => t !== tag);
|
|
82
|
+
onRemoveTag?.(tag);
|
|
83
|
+
inputRef?.focus();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function handleFocusOut(event: FocusEvent) {
|
|
87
|
+
const target = event.currentTarget as HTMLElement;
|
|
88
|
+
if (!target.contains(event.relatedTarget as Node)) {
|
|
89
|
+
showSuggestions = false;
|
|
90
|
+
highlightedIndex = -1;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function handleFocusIn() {
|
|
95
|
+
showSuggestions = true;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function handleSuggestionHover(index: number) {
|
|
99
|
+
highlightedIndex = index;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function handleSuggestionSelect(suggestion: string) {
|
|
103
|
+
handleTagAddition(suggestion);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const containerClass = $derived(
|
|
107
|
+
cn(
|
|
108
|
+
'relative flex flex-wrap gap-2 rounded-lg border bg-white shadow-sm px-3 py-2',
|
|
109
|
+
'border-gray-300 focus-within:border-primary-500 focus-within:ring-2 focus-within:ring-primary-500 focus-within:ring-offset-2',
|
|
110
|
+
{
|
|
111
|
+
'border-red-300 focus-within:border-red-500 focus-within:ring-red-500': errors?.length
|
|
112
|
+
},
|
|
113
|
+
className
|
|
114
|
+
)
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
const suggestionClass = $derived(
|
|
118
|
+
cn(
|
|
119
|
+
'absolute top-[calc(100%+8px)] right-0 left-0 z-50 max-h-[200px] overflow-auto rounded-lg border border-gray-300 bg-white shadow-lg'
|
|
120
|
+
)
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
const suggestionItemClass = $derived((isHighlighted: boolean) =>
|
|
124
|
+
cn(
|
|
125
|
+
'flex w-full cursor-pointer items-center px-3 py-2 text-sm transition-colors',
|
|
126
|
+
isHighlighted && 'bg-gray-50'
|
|
127
|
+
)
|
|
128
|
+
);
|
|
129
|
+
</script>
|
|
130
|
+
|
|
131
|
+
<div class="space-y-1">
|
|
132
|
+
{#if label}
|
|
133
|
+
<label for={name} class="block text-sm font-medium text-gray-700">{label}</label>
|
|
134
|
+
{/if}
|
|
135
|
+
<div class={containerClass} onfocusout={handleFocusOut}>
|
|
136
|
+
{#each value as tag}
|
|
137
|
+
<Badge {size} color="info" onclose={() => handleTagRemoval(tag)} class="shadow-xs">
|
|
138
|
+
{tag}
|
|
139
|
+
</Badge>
|
|
140
|
+
{/each}
|
|
141
|
+
<input
|
|
142
|
+
bind:this={inputRef}
|
|
143
|
+
bind:value={inputValue}
|
|
144
|
+
{name}
|
|
145
|
+
id={name}
|
|
146
|
+
{placeholder}
|
|
147
|
+
class={cn('min-w-[120px] flex-1 bg-transparent outline-none placeholder:text-gray-400', {
|
|
148
|
+
'text-sm': size === Size.SM,
|
|
149
|
+
'text-base': size === Size.BASE,
|
|
150
|
+
'text-lg': size === Size.LG
|
|
151
|
+
})}
|
|
152
|
+
type="text"
|
|
153
|
+
autocomplete="off"
|
|
154
|
+
onkeydown={handleKeydown}
|
|
155
|
+
onfocus={handleFocusIn}
|
|
156
|
+
/>
|
|
157
|
+
|
|
158
|
+
{#if showSuggestions && filteredSuggestions.length > 0}
|
|
159
|
+
<div class={suggestionClass}>
|
|
160
|
+
{#each filteredSuggestions as suggestion, i}
|
|
161
|
+
<button
|
|
162
|
+
type="button"
|
|
163
|
+
class={suggestionItemClass(i === highlightedIndex)}
|
|
164
|
+
onmousedown={() => handleSuggestionSelect(suggestion)}
|
|
165
|
+
onmouseover={() => handleSuggestionHover(i)}
|
|
166
|
+
onfocus={() => handleSuggestionHover(i)}
|
|
167
|
+
tabindex="-1"
|
|
168
|
+
>
|
|
169
|
+
{suggestion}
|
|
170
|
+
</button>
|
|
171
|
+
{/each}
|
|
172
|
+
</div>
|
|
173
|
+
{/if}
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
{#if errors?.length}
|
|
177
|
+
{#each errors as error}
|
|
178
|
+
<p class="text-sm text-red-600">{error}</p>
|
|
179
|
+
{/each}
|
|
180
|
+
{/if}
|
|
181
|
+
</div>
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../helper/cls.js';
|
|
3
|
+
import { Color, Size } from '../variants.js';
|
|
4
|
+
import type { ToggleProps } from '../index.js';
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
name,
|
|
8
|
+
id = name,
|
|
9
|
+
label,
|
|
10
|
+
disabled = false,
|
|
11
|
+
class: className = '',
|
|
12
|
+
size = Size.BASE,
|
|
13
|
+
color = Color.PRIMARY,
|
|
14
|
+
value = $bindable(false),
|
|
15
|
+
errors = [],
|
|
16
|
+
offColor = 'bg-gray-200',
|
|
17
|
+
onColor,
|
|
18
|
+
...restProps
|
|
19
|
+
}: ToggleProps = $props();
|
|
20
|
+
|
|
21
|
+
const activeColor = $derived(
|
|
22
|
+
onColor ||
|
|
23
|
+
{
|
|
24
|
+
[Color.PRIMARY]: 'bg-primary-500',
|
|
25
|
+
[Color.SECONDARY]: 'bg-secondary-500',
|
|
26
|
+
[Color.SUCCESS]: 'bg-green-500',
|
|
27
|
+
[Color.DANGER]: 'bg-red-500',
|
|
28
|
+
[Color.WARNING]: 'bg-yellow-500',
|
|
29
|
+
[Color.INFO]: 'bg-blue-500',
|
|
30
|
+
[Color.DEFAULT]: 'bg-gray-800'
|
|
31
|
+
}[color]
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
const toggleSize = $derived(
|
|
35
|
+
{
|
|
36
|
+
[Size.SM]: 'w-8 h-4',
|
|
37
|
+
[Size.BASE]: 'w-10 h-5',
|
|
38
|
+
[Size.LG]: 'w-12 h-6'
|
|
39
|
+
}[size]
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
const thumbSize = $derived(
|
|
43
|
+
{
|
|
44
|
+
[Size.SM]: 'h-3 w-3',
|
|
45
|
+
[Size.BASE]: 'h-4 w-4',
|
|
46
|
+
[Size.LG]: 'h-5 w-5'
|
|
47
|
+
}[size]
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
const thumbPosition = $derived(
|
|
51
|
+
{
|
|
52
|
+
[Size.SM]: value ? 'translate-x-4' : 'translate-x-0.5',
|
|
53
|
+
[Size.BASE]: value ? 'translate-x-5' : 'translate-x-0.5',
|
|
54
|
+
[Size.LG]: value ? 'translate-x-6' : 'translate-x-0.5'
|
|
55
|
+
}[size]
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
const toggleWrapperClasses = $derived(
|
|
59
|
+
cn(
|
|
60
|
+
'relative inline-flex items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2',
|
|
61
|
+
toggleSize,
|
|
62
|
+
value ? activeColor : offColor,
|
|
63
|
+
{
|
|
64
|
+
'opacity-50 cursor-not-allowed': disabled,
|
|
65
|
+
'cursor-pointer': !disabled,
|
|
66
|
+
'focus:ring-red-500': errors.length,
|
|
67
|
+
[`focus:ring-${color}-500`]: !errors.length
|
|
68
|
+
},
|
|
69
|
+
className
|
|
70
|
+
)
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
const thumbClasses = $derived(
|
|
74
|
+
cn(
|
|
75
|
+
'inline-block transform rounded-full bg-white transition-transform',
|
|
76
|
+
thumbSize,
|
|
77
|
+
thumbPosition
|
|
78
|
+
)
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
const labelClasses = $derived(
|
|
82
|
+
cn('text-sm font-medium', {
|
|
83
|
+
'text-gray-700': !errors.length,
|
|
84
|
+
'text-red-600': errors.length,
|
|
85
|
+
'opacity-50': disabled
|
|
86
|
+
})
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
function handleKeyDown(event: KeyboardEvent) {
|
|
90
|
+
if (disabled) return;
|
|
91
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
92
|
+
event.preventDefault();
|
|
93
|
+
value = !value;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
</script>
|
|
97
|
+
|
|
98
|
+
<div class="flex items-center">
|
|
99
|
+
{#if label}
|
|
100
|
+
<label for={id} class={cn('mr-3', labelClasses)}>{label}</label>
|
|
101
|
+
{/if}
|
|
102
|
+
<button
|
|
103
|
+
type="button"
|
|
104
|
+
role="switch"
|
|
105
|
+
aria-checked={value}
|
|
106
|
+
{id}
|
|
107
|
+
{name}
|
|
108
|
+
{disabled}
|
|
109
|
+
aria-invalid={!!errors.length}
|
|
110
|
+
aria-describedby={errors.length ? `${name}-errors` : undefined}
|
|
111
|
+
class={toggleWrapperClasses}
|
|
112
|
+
onclick={() => {
|
|
113
|
+
if (!disabled) value = !value;
|
|
114
|
+
}}
|
|
115
|
+
onkeydown={handleKeyDown}
|
|
116
|
+
tabindex={disabled ? -1 : 0}
|
|
117
|
+
{...restProps}
|
|
118
|
+
>
|
|
119
|
+
<span class={thumbClasses} aria-hidden="true"></span>
|
|
120
|
+
<input type="checkbox" class="hidden" {name} bind:checked={value} />
|
|
121
|
+
</button>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
{#if errors.length}
|
|
125
|
+
<div id="{name}-errors" class="mt-1">
|
|
126
|
+
{#each errors as error (error)}
|
|
127
|
+
<p class="text-sm text-red-600" role="alert">
|
|
128
|
+
{error}
|
|
129
|
+
</p>
|
|
130
|
+
{/each}
|
|
131
|
+
</div>
|
|
132
|
+
{/if}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { Size } from '../variants.js';
|
|
2
|
+
export declare const slider: import("tailwind-variants").TVReturnType<{
|
|
3
|
+
size: {
|
|
4
|
+
[Size.SM]: {
|
|
5
|
+
track: string;
|
|
6
|
+
thumb: string;
|
|
7
|
+
mark: string;
|
|
8
|
+
label: string;
|
|
9
|
+
value: string;
|
|
10
|
+
};
|
|
11
|
+
[Size.BASE]: {
|
|
12
|
+
track: string;
|
|
13
|
+
thumb: string;
|
|
14
|
+
mark: string;
|
|
15
|
+
label: string;
|
|
16
|
+
value: string;
|
|
17
|
+
};
|
|
18
|
+
[Size.LG]: {
|
|
19
|
+
track: string;
|
|
20
|
+
thumb: string;
|
|
21
|
+
mark: string;
|
|
22
|
+
label: string;
|
|
23
|
+
value: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
disabled: {
|
|
27
|
+
true: {
|
|
28
|
+
base: string;
|
|
29
|
+
thumb: string;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
hasError: {
|
|
33
|
+
true: {
|
|
34
|
+
track: string;
|
|
35
|
+
range: string;
|
|
36
|
+
thumb: string;
|
|
37
|
+
label: string;
|
|
38
|
+
value: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
}, {
|
|
42
|
+
base: string;
|
|
43
|
+
track: string;
|
|
44
|
+
range: string;
|
|
45
|
+
thumb: string[];
|
|
46
|
+
mark: string;
|
|
47
|
+
label: string;
|
|
48
|
+
value: string;
|
|
49
|
+
}, undefined, {
|
|
50
|
+
size: {
|
|
51
|
+
[Size.SM]: {
|
|
52
|
+
track: string;
|
|
53
|
+
thumb: string;
|
|
54
|
+
mark: string;
|
|
55
|
+
label: string;
|
|
56
|
+
value: string;
|
|
57
|
+
};
|
|
58
|
+
[Size.BASE]: {
|
|
59
|
+
track: string;
|
|
60
|
+
thumb: string;
|
|
61
|
+
mark: string;
|
|
62
|
+
label: string;
|
|
63
|
+
value: string;
|
|
64
|
+
};
|
|
65
|
+
[Size.LG]: {
|
|
66
|
+
track: string;
|
|
67
|
+
thumb: string;
|
|
68
|
+
mark: string;
|
|
69
|
+
label: string;
|
|
70
|
+
value: string;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
disabled: {
|
|
74
|
+
true: {
|
|
75
|
+
base: string;
|
|
76
|
+
thumb: string;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
hasError: {
|
|
80
|
+
true: {
|
|
81
|
+
track: string;
|
|
82
|
+
range: string;
|
|
83
|
+
thumb: string;
|
|
84
|
+
label: string;
|
|
85
|
+
value: string;
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
}, {
|
|
89
|
+
base: string;
|
|
90
|
+
track: string;
|
|
91
|
+
range: string;
|
|
92
|
+
thumb: string[];
|
|
93
|
+
mark: string;
|
|
94
|
+
label: string;
|
|
95
|
+
value: string;
|
|
96
|
+
}, import("tailwind-variants").TVReturnType<{
|
|
97
|
+
size: {
|
|
98
|
+
[Size.SM]: {
|
|
99
|
+
track: string;
|
|
100
|
+
thumb: string;
|
|
101
|
+
mark: string;
|
|
102
|
+
label: string;
|
|
103
|
+
value: string;
|
|
104
|
+
};
|
|
105
|
+
[Size.BASE]: {
|
|
106
|
+
track: string;
|
|
107
|
+
thumb: string;
|
|
108
|
+
mark: string;
|
|
109
|
+
label: string;
|
|
110
|
+
value: string;
|
|
111
|
+
};
|
|
112
|
+
[Size.LG]: {
|
|
113
|
+
track: string;
|
|
114
|
+
thumb: string;
|
|
115
|
+
mark: string;
|
|
116
|
+
label: string;
|
|
117
|
+
value: string;
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
disabled: {
|
|
121
|
+
true: {
|
|
122
|
+
base: string;
|
|
123
|
+
thumb: string;
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
hasError: {
|
|
127
|
+
true: {
|
|
128
|
+
track: string;
|
|
129
|
+
range: string;
|
|
130
|
+
thumb: string;
|
|
131
|
+
label: string;
|
|
132
|
+
value: string;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
}, {
|
|
136
|
+
base: string;
|
|
137
|
+
track: string;
|
|
138
|
+
range: string;
|
|
139
|
+
thumb: string[];
|
|
140
|
+
mark: string;
|
|
141
|
+
label: string;
|
|
142
|
+
value: string;
|
|
143
|
+
}, undefined, unknown, unknown, undefined>>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
import { Color, Size } from '../variants.js';
|
|
3
|
+
export const slider = tv({
|
|
4
|
+
slots: {
|
|
5
|
+
base: 'relative w-full',
|
|
6
|
+
track: 'absolute h-2 w-full rounded-full bg-gray-200 cursor-pointer',
|
|
7
|
+
range: 'absolute h-full rounded-full bg-primary-500',
|
|
8
|
+
thumb: [
|
|
9
|
+
'absolute top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-white border-2 border-primary-500',
|
|
10
|
+
'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2',
|
|
11
|
+
'hover:scale-110 transition-transform cursor-pointer'
|
|
12
|
+
],
|
|
13
|
+
mark: 'absolute text-sm text-gray-500 -translate-x-1/2',
|
|
14
|
+
label: 'mb-2 block text-sm font-medium text-gray-700',
|
|
15
|
+
value: 'mt-1 text-sm text-gray-500'
|
|
16
|
+
},
|
|
17
|
+
variants: {
|
|
18
|
+
size: {
|
|
19
|
+
[Size.SM]: {
|
|
20
|
+
track: 'h-1',
|
|
21
|
+
thumb: 'w-3 h-3',
|
|
22
|
+
mark: 'text-xs top-4',
|
|
23
|
+
label: 'text-xs',
|
|
24
|
+
value: 'text-xs'
|
|
25
|
+
},
|
|
26
|
+
[Size.BASE]: {
|
|
27
|
+
track: 'h-2',
|
|
28
|
+
thumb: 'w-4 h-4',
|
|
29
|
+
mark: 'text-sm top-6',
|
|
30
|
+
label: 'text-sm',
|
|
31
|
+
value: 'text-sm'
|
|
32
|
+
},
|
|
33
|
+
[Size.LG]: {
|
|
34
|
+
track: 'h-3',
|
|
35
|
+
thumb: 'w-5 h-5',
|
|
36
|
+
mark: 'text-base top-7',
|
|
37
|
+
label: 'text-base',
|
|
38
|
+
value: 'text-base'
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
disabled: {
|
|
42
|
+
true: {
|
|
43
|
+
base: 'opacity-50 cursor-not-allowed',
|
|
44
|
+
thumb: 'cursor-not-allowed hover:scale-100 active:scale-100'
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
hasError: {
|
|
48
|
+
true: {
|
|
49
|
+
track: 'bg-danger-200',
|
|
50
|
+
range: 'bg-danger-500',
|
|
51
|
+
thumb: 'border-danger-500 focus:ring-danger-500',
|
|
52
|
+
label: 'text-danger-600',
|
|
53
|
+
value: 'text-danger-600'
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
defaultVariants: {
|
|
58
|
+
size: Size.BASE,
|
|
59
|
+
disabled: false,
|
|
60
|
+
hasError: false
|
|
61
|
+
}
|
|
62
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { BreadcrumbsProps } from '../index.js';
|
|
2
2
|
declare const Breadcrumbs: import("svelte").Component<BreadcrumbsProps, {}, "">;
|
|
3
3
|
type Breadcrumbs = ReturnType<typeof Breadcrumbs>;
|
|
4
4
|
export default Breadcrumbs;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { cn } from '../helper/cls.js';
|
|
3
|
-
import {
|
|
3
|
+
import type { PageHeaderProps } from '../index.js';
|
|
4
4
|
import Breadcrumbs from './Breadcrumbs.svelte';
|
|
5
5
|
|
|
6
6
|
let {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
</script>
|
|
20
20
|
|
|
21
21
|
<div class={headerClasses}>
|
|
22
|
-
<div class="min-w-0
|
|
22
|
+
<div class="flex-1 min-w-0">
|
|
23
23
|
{#if hasBreadcrumbs}
|
|
24
24
|
<Breadcrumbs items={breadcrumbs} />
|
|
25
25
|
{/if}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
export type BreadcrumbItem = {
|
|
1
|
+
type BreadcrumbItem = {
|
|
3
2
|
label: string;
|
|
4
3
|
href: string;
|
|
5
4
|
current?: boolean;
|
|
6
5
|
};
|
|
7
6
|
export declare const breadcrumbs: import("tailwind-variants").TVReturnType<{
|
|
8
7
|
size: {
|
|
8
|
+
xs: {
|
|
9
|
+
base: string;
|
|
10
|
+
};
|
|
9
11
|
sm: {
|
|
10
12
|
base: string;
|
|
11
13
|
};
|
|
@@ -26,6 +28,9 @@ export declare const breadcrumbs: import("tailwind-variants").TVReturnType<{
|
|
|
26
28
|
semibold: {
|
|
27
29
|
item: string;
|
|
28
30
|
};
|
|
31
|
+
bold: {
|
|
32
|
+
item: string;
|
|
33
|
+
};
|
|
29
34
|
};
|
|
30
35
|
color: {
|
|
31
36
|
default: {
|
|
@@ -73,6 +78,9 @@ export declare const breadcrumbs: import("tailwind-variants").TVReturnType<{
|
|
|
73
78
|
wrapper: string;
|
|
74
79
|
}, undefined, {
|
|
75
80
|
size: {
|
|
81
|
+
xs: {
|
|
82
|
+
base: string;
|
|
83
|
+
};
|
|
76
84
|
sm: {
|
|
77
85
|
base: string;
|
|
78
86
|
};
|
|
@@ -93,6 +101,9 @@ export declare const breadcrumbs: import("tailwind-variants").TVReturnType<{
|
|
|
93
101
|
semibold: {
|
|
94
102
|
item: string;
|
|
95
103
|
};
|
|
104
|
+
bold: {
|
|
105
|
+
item: string;
|
|
106
|
+
};
|
|
96
107
|
};
|
|
97
108
|
color: {
|
|
98
109
|
default: {
|
|
@@ -140,6 +151,9 @@ export declare const breadcrumbs: import("tailwind-variants").TVReturnType<{
|
|
|
140
151
|
wrapper: string;
|
|
141
152
|
}, import("tailwind-variants").TVReturnType<{
|
|
142
153
|
size: {
|
|
154
|
+
xs: {
|
|
155
|
+
base: string;
|
|
156
|
+
};
|
|
143
157
|
sm: {
|
|
144
158
|
base: string;
|
|
145
159
|
};
|
|
@@ -160,6 +174,9 @@ export declare const breadcrumbs: import("tailwind-variants").TVReturnType<{
|
|
|
160
174
|
semibold: {
|
|
161
175
|
item: string;
|
|
162
176
|
};
|
|
177
|
+
bold: {
|
|
178
|
+
item: string;
|
|
179
|
+
};
|
|
163
180
|
};
|
|
164
181
|
color: {
|
|
165
182
|
default: {
|
|
@@ -206,15 +223,4 @@ export declare const breadcrumbs: import("tailwind-variants").TVReturnType<{
|
|
|
206
223
|
separator: string;
|
|
207
224
|
wrapper: string;
|
|
208
225
|
}, undefined, unknown, unknown, undefined>>;
|
|
209
|
-
export type
|
|
210
|
-
items: BreadcrumbItem[];
|
|
211
|
-
size?: keyof typeof breadcrumbs.variants.size;
|
|
212
|
-
weight?: keyof typeof breadcrumbs.variants.weight;
|
|
213
|
-
color?: keyof typeof breadcrumbs.variants.color;
|
|
214
|
-
icon?: Component;
|
|
215
|
-
class?: string;
|
|
216
|
-
listclass?: string;
|
|
217
|
-
itemclass?: string;
|
|
218
|
-
separatorclass?: string;
|
|
219
|
-
wrapperclass?: string;
|
|
220
|
-
};
|
|
226
|
+
export type { BreadcrumbItem };
|
|
@@ -9,6 +9,9 @@ export const breadcrumbs = tv({
|
|
|
9
9
|
},
|
|
10
10
|
variants: {
|
|
11
11
|
size: {
|
|
12
|
+
xs: {
|
|
13
|
+
base: 'items-center text-xs'
|
|
14
|
+
},
|
|
12
15
|
sm: {
|
|
13
16
|
base: 'items-center text-sm'
|
|
14
17
|
},
|
|
@@ -28,6 +31,9 @@ export const breadcrumbs = tv({
|
|
|
28
31
|
},
|
|
29
32
|
semibold: {
|
|
30
33
|
item: 'font-semibold'
|
|
34
|
+
},
|
|
35
|
+
bold: {
|
|
36
|
+
item: 'font-bold'
|
|
31
37
|
}
|
|
32
38
|
},
|
|
33
39
|
color: {
|