@makolabs/ripple 0.0.1-dev.7 → 0.0.1-dev.9

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.
Files changed (114) hide show
  1. package/README.md +393 -53
  2. package/dist/button/Button.svelte +5 -3
  3. package/dist/button/Button.svelte.d.ts +1 -1
  4. package/dist/button/button.d.ts +40 -63
  5. package/dist/button/button.js +15 -14
  6. package/dist/charts/Chart.svelte +533 -0
  7. package/dist/charts/Chart.svelte.d.ts +4 -0
  8. package/dist/drawer/Drawer.svelte +13 -2
  9. package/dist/drawer/Drawer.svelte.d.ts +1 -1
  10. package/dist/drawer/drawer.d.ts +0 -17
  11. package/dist/elements/alert/Alert.svelte +53 -0
  12. package/dist/elements/alert/Alert.svelte.d.ts +4 -0
  13. package/dist/elements/badge/Badge.svelte +13 -5
  14. package/dist/elements/badge/Badge.svelte.d.ts +1 -1
  15. package/dist/elements/badge/badge.d.ts +0 -12
  16. package/dist/elements/dropdown/Dropdown.svelte +32 -37
  17. package/dist/elements/dropdown/Dropdown.svelte.d.ts +1 -1
  18. package/dist/elements/dropdown/Select.svelte +143 -59
  19. package/dist/elements/dropdown/Select.svelte.d.ts +1 -1
  20. package/dist/elements/dropdown/dropdown.d.ts +34 -57
  21. package/dist/elements/dropdown/dropdown.js +10 -4
  22. package/dist/elements/dropdown/select.d.ts +34 -54
  23. package/dist/elements/dropdown/select.js +22 -14
  24. package/dist/elements/file-upload/FileUpload.svelte +213 -0
  25. package/dist/elements/file-upload/FileUpload.svelte.d.ts +4 -0
  26. package/dist/elements/progress/Progress.svelte +87 -0
  27. package/dist/elements/progress/Progress.svelte.d.ts +4 -0
  28. package/dist/elements/timeline/Timeline.svelte +92 -0
  29. package/dist/elements/timeline/Timeline.svelte.d.ts +7 -0
  30. package/dist/forms/Checkbox.svelte +54 -0
  31. package/dist/forms/Checkbox.svelte.d.ts +4 -0
  32. package/dist/forms/DateRange.svelte +493 -0
  33. package/dist/forms/DateRange.svelte.d.ts +4 -0
  34. package/dist/forms/Form.svelte +39 -0
  35. package/dist/forms/Form.svelte.d.ts +4 -0
  36. package/dist/forms/Input.svelte +86 -0
  37. package/dist/forms/Input.svelte.d.ts +4 -0
  38. package/dist/forms/NumberInput.svelte +159 -0
  39. package/dist/forms/NumberInput.svelte.d.ts +4 -0
  40. package/dist/forms/RadioInputs.svelte +64 -0
  41. package/dist/forms/RadioInputs.svelte.d.ts +4 -0
  42. package/dist/forms/RadioPill.svelte +66 -0
  43. package/dist/forms/RadioPill.svelte.d.ts +4 -0
  44. package/dist/forms/Slider.svelte +342 -0
  45. package/dist/forms/Slider.svelte.d.ts +4 -0
  46. package/dist/forms/Tags.svelte +181 -0
  47. package/dist/forms/Tags.svelte.d.ts +4 -0
  48. package/dist/forms/Toggle.svelte +132 -0
  49. package/dist/forms/Toggle.svelte.d.ts +4 -0
  50. package/dist/forms/slider.d.ts +143 -0
  51. package/dist/forms/slider.js +62 -0
  52. package/dist/header/Breadcrumbs.svelte +2 -1
  53. package/dist/header/Breadcrumbs.svelte.d.ts +1 -1
  54. package/dist/header/PageHeader.svelte +2 -2
  55. package/dist/header/PageHeader.svelte.d.ts +1 -1
  56. package/dist/header/breadcrumbs.d.ts +20 -14
  57. package/dist/header/breadcrumbs.js +6 -0
  58. package/dist/header/pageheaders.d.ts +1 -1
  59. package/dist/helper/date.d.ts +7 -0
  60. package/dist/helper/date.js +15 -0
  61. package/dist/index.d.ts +742 -9
  62. package/dist/index.js +59 -16
  63. package/dist/layout/card/Card.svelte +5 -8
  64. package/dist/layout/card/Card.svelte.d.ts +1 -1
  65. package/dist/layout/card/StatsCard.svelte +116 -87
  66. package/dist/layout/card/card.d.ts +22 -33
  67. package/dist/layout/card/card.js +9 -8
  68. package/dist/layout/card/stats-card.d.ts +23 -25
  69. package/dist/layout/card/stats-card.js +13 -13
  70. package/dist/layout/navbar/navbar.d.ts +0 -23
  71. package/dist/layout/sidebar/NavGroup.svelte +25 -44
  72. package/dist/layout/sidebar/NavGroup.svelte.d.ts +1 -1
  73. package/dist/layout/sidebar/NavItem.svelte +1 -1
  74. package/dist/layout/sidebar/NavItem.svelte.d.ts +1 -1
  75. package/dist/layout/sidebar/Sidebar.svelte +20 -26
  76. package/dist/layout/sidebar/Sidebar.svelte.d.ts +1 -1
  77. package/dist/layout/table/table.d.ts +1 -1
  78. package/dist/layout/tabs/tabs.d.ts +1 -1
  79. package/dist/modal/Modal.svelte +2 -1
  80. package/dist/modal/Modal.svelte.d.ts +1 -1
  81. package/dist/modal/modal.d.ts +0 -23
  82. package/dist/sonner/sonner.svelte +13 -0
  83. package/dist/sonner/sonner.svelte.d.ts +4 -0
  84. package/dist/types/variants.d.ts +1 -21
  85. package/dist/types/variants.js +1 -19
  86. package/dist/variants.d.ts +20 -0
  87. package/dist/variants.js +19 -0
  88. package/package.json +6 -2
  89. package/dist/button/index.d.ts +0 -1
  90. package/dist/button/index.js +0 -1
  91. package/dist/drawer/index.d.ts +0 -2
  92. package/dist/drawer/index.js +0 -1
  93. package/dist/elements/badge/index.d.ts +0 -2
  94. package/dist/elements/badge/index.js +0 -2
  95. package/dist/elements/dropdown/index.d.ts +0 -3
  96. package/dist/elements/dropdown/index.js +0 -2
  97. package/dist/header/index.d.ts +0 -4
  98. package/dist/header/index.js +0 -2
  99. package/dist/layout/card/index.d.ts +0 -4
  100. package/dist/layout/card/index.js +0 -2
  101. package/dist/layout/index.d.ts +0 -5
  102. package/dist/layout/index.js +0 -5
  103. package/dist/layout/navbar/index.d.ts +0 -2
  104. package/dist/layout/navbar/index.js +0 -2
  105. package/dist/layout/sidebar/index.d.ts +0 -2
  106. package/dist/layout/sidebar/index.js +0 -1
  107. package/dist/layout/sidebar/sidebar.d.ts +0 -46
  108. package/dist/layout/sidebar/sidebar.js +0 -1
  109. package/dist/layout/table/index.d.ts +0 -3
  110. package/dist/layout/table/index.js +0 -2
  111. package/dist/layout/tabs/index.d.ts +0 -3
  112. package/dist/layout/tabs/index.js +0 -3
  113. package/dist/modal/index.d.ts +0 -1
  114. 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,4 @@
1
+ import type { TagsProps } from '../index.js';
2
+ declare const Tags: import("svelte").Component<TagsProps, {}, "value">;
3
+ type Tags = ReturnType<typeof Tags>;
4
+ export default Tags;
@@ -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,4 @@
1
+ import type { ToggleProps } from '../index.js';
2
+ declare const Toggle: import("svelte").Component<ToggleProps, {}, "value">;
3
+ type Toggle = ReturnType<typeof Toggle>;
4
+ export default Toggle;
@@ -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,6 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { cn } from '../helper/cls.js';
3
- import { breadcrumbs, type BreadcrumbsProps } from './breadcrumbs.js';
3
+ import { breadcrumbs } from './breadcrumbs.js';
4
+ import type { BreadcrumbsProps } from '../index.js';
4
5
 
5
6
  let {
6
7
  items = [],
@@ -1,4 +1,4 @@
1
- import { type BreadcrumbsProps } from './breadcrumbs.js';
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 { type PageHeaderProps } from './pageheaders.js';
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 flex-1">
22
+ <div class="flex-1 min-w-0">
23
23
  {#if hasBreadcrumbs}
24
24
  <Breadcrumbs items={breadcrumbs} />
25
25
  {/if}
@@ -1,4 +1,4 @@
1
- import { type PageHeaderProps } from './pageheaders.js';
1
+ import type { PageHeaderProps } from '../index.js';
2
2
  declare const PageHeader: import("svelte").Component<PageHeaderProps, {}, "">;
3
3
  type PageHeader = ReturnType<typeof PageHeader>;
4
4
  export default PageHeader;
@@ -1,11 +1,13 @@
1
- import type { Component } from 'svelte';
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 BreadcrumbsProps = {
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: {
@@ -1,5 +1,5 @@
1
1
  import { type ClassValue } from 'tailwind-variants';
2
- import type { BreadcrumbItem } from './breadcrumbs.js';
2
+ import type { BreadcrumbItem } from '../index.js';
3
3
  import type { Snippet } from 'svelte';
4
4
  export type PageHeaderProps = {
5
5
  title: string;
@@ -0,0 +1,7 @@
1
+ export declare const DATE_FORMAT: {
2
+ ISO: string;
3
+ READABLE: string;
4
+ SHORT: string;
5
+ };
6
+ export declare function formatDateTime(time: Date | string, format?: string): string;
7
+ export declare function getRelativeTime(time: Date | string): string;