@makolabs/ripple 3.7.0 → 3.8.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/dist/ai/AIChatInterface.svelte +1 -1
- package/dist/elements/accordion/Accordion.svelte +5 -1
- package/dist/elements/dropdown/Select.svelte +29 -0
- package/dist/elements/file-upload/FileUpload.svelte +11 -3
- package/dist/elements/file-upload/FilesPreview.svelte +8 -2
- package/dist/file-browser/FileBrowser.svelte +8 -0
- package/dist/filters/CompactFilters.svelte +14 -3
- package/dist/header/PageHeader.svelte +10 -4
- package/dist/layout/sidebar/NavGroup.svelte +4 -2
- package/dist/layout/sidebar/NavItem.svelte +7 -2
- package/dist/layout/tabs/Tab.svelte +3 -2
- package/dist/layout/tabs/Tab.svelte.d.ts +1 -0
- package/dist/layout/tabs/TabGroup.svelte +3 -0
- package/package.json +3 -2
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
header,
|
|
27
27
|
children,
|
|
28
28
|
icon: Icon,
|
|
29
|
+
iconPosition = 'start',
|
|
29
30
|
testId
|
|
30
31
|
}: AccordionProps = $props();
|
|
31
32
|
|
|
@@ -109,7 +110,7 @@
|
|
|
109
110
|
|
|
110
111
|
{#snippet accordionHeaderContent()}
|
|
111
112
|
<div class="flex items-start justify-start gap-3">
|
|
112
|
-
{#if Icon}
|
|
113
|
+
{#if Icon && iconPosition === 'start'}
|
|
113
114
|
<Icon class="text-default-500 size-5" />
|
|
114
115
|
{/if}
|
|
115
116
|
<div class="flex flex-col items-start text-left">
|
|
@@ -120,6 +121,9 @@
|
|
|
120
121
|
<p class="text-default-500 text-xs font-normal">{description}</p>
|
|
121
122
|
{/if}
|
|
122
123
|
</div>
|
|
124
|
+
{#if Icon && iconPosition === 'end'}
|
|
125
|
+
<Icon class="text-default-500 size-5" />
|
|
126
|
+
{/if}
|
|
123
127
|
</div>
|
|
124
128
|
{@render summary?.()}
|
|
125
129
|
{/snippet}
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
multiple = false,
|
|
27
27
|
placeholder = 'Select an option',
|
|
28
28
|
searchable = false,
|
|
29
|
+
clearable = false,
|
|
29
30
|
disabled = false,
|
|
30
31
|
size = Size.MD,
|
|
31
32
|
class: className = '',
|
|
@@ -95,6 +96,7 @@
|
|
|
95
96
|
items.find((i) => i.value === value)
|
|
96
97
|
);
|
|
97
98
|
const selectedItems = $derived(items.filter((i) => valueArray.includes(i.value)));
|
|
99
|
+
const hasSelection = $derived(valueArray.some((v) => v !== ''));
|
|
98
100
|
|
|
99
101
|
const filteredItems = $derived.by<SelectItem[]>(() => {
|
|
100
102
|
if (isAsync) return asyncResults;
|
|
@@ -215,6 +217,15 @@
|
|
|
215
217
|
}
|
|
216
218
|
}
|
|
217
219
|
|
|
220
|
+
function handleClear(event: MouseEvent) {
|
|
221
|
+
// Don't let the click bubble to the trigger and open the dropdown.
|
|
222
|
+
event.stopPropagation();
|
|
223
|
+
event.preventDefault();
|
|
224
|
+
if (disabled) return;
|
|
225
|
+
value = multiple ? [] : '';
|
|
226
|
+
onselect({ value });
|
|
227
|
+
}
|
|
228
|
+
|
|
218
229
|
function handleClickOutside(event: MouseEvent) {
|
|
219
230
|
if (!open) return;
|
|
220
231
|
// On mobile the sheet handles its own close via backdrop.
|
|
@@ -385,6 +396,24 @@
|
|
|
385
396
|
</span>
|
|
386
397
|
|
|
387
398
|
<span class="ml-auto flex flex-shrink-0 items-center pl-2">
|
|
399
|
+
{#if clearable && hasSelection && !disabled}
|
|
400
|
+
<button
|
|
401
|
+
type="button"
|
|
402
|
+
onclick={handleClear}
|
|
403
|
+
aria-label="Clear selection"
|
|
404
|
+
class="text-default-400 hover:text-default-700 relative z-10 mr-1 flex size-5 cursor-pointer items-center justify-center rounded"
|
|
405
|
+
data-testid={buildTestId('select', 'clear', testId)}
|
|
406
|
+
>
|
|
407
|
+
<svg class="size-3" viewBox="0 0 12 12" fill="none" aria-hidden="true">
|
|
408
|
+
<path
|
|
409
|
+
d="M3 3l6 6M9 3l-6 6"
|
|
410
|
+
stroke="currentColor"
|
|
411
|
+
stroke-width="1.5"
|
|
412
|
+
stroke-linecap="round"
|
|
413
|
+
/>
|
|
414
|
+
</svg>
|
|
415
|
+
</button>
|
|
416
|
+
{/if}
|
|
388
417
|
{#if Icon}
|
|
389
418
|
<Icon class={triggerIconClass} />
|
|
390
419
|
{:else}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { cn } from '../../helper/cls.js';
|
|
3
|
+
import { buildTestId } from '../../helper/testid.js';
|
|
3
4
|
import { fileUpload } from './file-upload.js';
|
|
4
5
|
import Button from '../../button/Button.svelte';
|
|
5
6
|
import Spinner from '../spinner/Spinner.svelte';
|
|
@@ -25,7 +26,8 @@
|
|
|
25
26
|
clearButtonLabel = 'Clear All',
|
|
26
27
|
filesListLabel = 'Selected files',
|
|
27
28
|
listMaxHeight = 'max-h-64',
|
|
28
|
-
header
|
|
29
|
+
header,
|
|
30
|
+
testId
|
|
29
31
|
}: FileUploadProps = $props();
|
|
30
32
|
|
|
31
33
|
const slots = $derived(fileUpload({ size }));
|
|
@@ -169,7 +171,10 @@
|
|
|
169
171
|
}
|
|
170
172
|
</script>
|
|
171
173
|
|
|
172
|
-
<div
|
|
174
|
+
<div
|
|
175
|
+
class={cn('flex w-full flex-col gap-4', className)}
|
|
176
|
+
data-testid={testId ? buildTestId('fileupload', undefined, testId) : undefined}
|
|
177
|
+
>
|
|
173
178
|
{#if header}
|
|
174
179
|
{@render header()}
|
|
175
180
|
{/if}
|
|
@@ -191,6 +196,7 @@
|
|
|
191
196
|
ondrop={handleDrop}
|
|
192
197
|
for={id}
|
|
193
198
|
data-dropzone-full={dropzoneFull ? 'true' : undefined}
|
|
199
|
+
data-testid={testId ? buildTestId('fileupload', 'dropzone', testId) : undefined}
|
|
194
200
|
>
|
|
195
201
|
<input
|
|
196
202
|
type="file"
|
|
@@ -200,6 +206,7 @@
|
|
|
200
206
|
disabled={!dropzoneEnabled}
|
|
201
207
|
class="hidden"
|
|
202
208
|
onchange={handleInputChange}
|
|
209
|
+
data-testid={testId ? buildTestId('fileupload', 'input', testId) : undefined}
|
|
203
210
|
{id}
|
|
204
211
|
/>
|
|
205
212
|
|
|
@@ -327,12 +334,13 @@
|
|
|
327
334
|
listMaxHeight
|
|
328
335
|
)}
|
|
329
336
|
>
|
|
330
|
-
{#each files as stagedFile (stagedFile.id)}
|
|
337
|
+
{#each files as stagedFile, rowIndex (stagedFile.id)}
|
|
331
338
|
{@const status = stagedFile.status ?? 'ready'}
|
|
332
339
|
<li
|
|
333
340
|
class={cn('flex items-center gap-3 px-3 py-2', status === 'success' && 'opacity-60')}
|
|
334
341
|
data-fileupload-row=""
|
|
335
342
|
data-status={status}
|
|
343
|
+
data-testid={testId ? buildTestId('fileupload', 'row', testId, rowIndex) : undefined}
|
|
336
344
|
transition:fade={{ duration: 300, easing: quintOut }}
|
|
337
345
|
animate:flip={{ duration: 350, easing: quintOut }}
|
|
338
346
|
>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { cn } from '../../helper/cls.js';
|
|
3
|
+
import { buildTestId } from '../../helper/testid.js';
|
|
3
4
|
import type { FilePreviewProps } from '../../index.js';
|
|
4
5
|
|
|
5
|
-
let { files = [], ondelete, class: className = '' }: FilePreviewProps = $props();
|
|
6
|
+
let { files = [], ondelete, class: className = '', testId }: FilePreviewProps = $props();
|
|
6
7
|
|
|
7
8
|
function formatFileSize(bytes: number): string {
|
|
8
9
|
if (bytes === 0) return '0 B';
|
|
@@ -14,9 +15,13 @@
|
|
|
14
15
|
</script>
|
|
15
16
|
|
|
16
17
|
{#if files.length > 0}
|
|
17
|
-
<ul
|
|
18
|
+
<ul
|
|
19
|
+
class={cn('mt-6 space-y-3', className)}
|
|
20
|
+
data-testid={buildTestId('filespreview', undefined, testId)}
|
|
21
|
+
>
|
|
18
22
|
{#each files as file, i (i)}
|
|
19
23
|
<li
|
|
24
|
+
data-testid={buildTestId('filespreview', 'item', testId, i)}
|
|
20
25
|
class={cn('flex items-center justify-between rounded-xl p-4 ring-4', {
|
|
21
26
|
'bg-danger-50 ring-danger-100': file.status === 'error',
|
|
22
27
|
'bg-success-50 ring-success-100': file.status === 'success',
|
|
@@ -71,6 +76,7 @@
|
|
|
71
76
|
|
|
72
77
|
<button
|
|
73
78
|
type="button"
|
|
79
|
+
data-testid={buildTestId('filespreview', 'delete', testId, i)}
|
|
74
80
|
aria-label="Delete file"
|
|
75
81
|
class={cn('ml-4 flex size-6 cursor-pointer items-center justify-center rounded-lg', {
|
|
76
82
|
'bg-danger-100 text-danger-500': file.status === 'error',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { onMount } from 'svelte';
|
|
3
3
|
import { cn } from '../helper/cls.js';
|
|
4
|
+
import { buildTestId } from '../helper/testid.js';
|
|
4
5
|
import { Button, Table, Color, Size, Spinner, Skeleton } from '../index.js';
|
|
5
6
|
import type { TableColumn, FileBrowserProps } from '../index.js';
|
|
6
7
|
import { formatDate } from '../utils/dateUtils.js';
|
|
@@ -22,10 +23,15 @@
|
|
|
22
23
|
isSelectable,
|
|
23
24
|
height = 'h-[500px]',
|
|
24
25
|
class: className = '',
|
|
26
|
+
testId,
|
|
25
27
|
selectedItems = $bindable<FileItem[]>([]),
|
|
26
28
|
selectedFiles = $bindable<string[]>([])
|
|
27
29
|
}: FileBrowserProps = $props();
|
|
28
30
|
|
|
31
|
+
// Namespaced testId forwarded to the inner Table so its data-testids are
|
|
32
|
+
// prefixed under the FileBrowser's own id (e.g. `{testId}-filebrowser-table-row-0`).
|
|
33
|
+
const tableTestId = $derived(testId ? buildTestId('filebrowser', undefined, testId) : undefined);
|
|
34
|
+
|
|
29
35
|
let files = $state<FileItem[]>([]);
|
|
30
36
|
let displayFiles = $state<FileItem[]>([]);
|
|
31
37
|
let currentPath = $state(startPath || '');
|
|
@@ -767,6 +773,7 @@
|
|
|
767
773
|
height,
|
|
768
774
|
className
|
|
769
775
|
)}
|
|
776
|
+
data-testid={testId ? buildTestId('filebrowser', undefined, testId) : undefined}
|
|
770
777
|
>
|
|
771
778
|
<div class="flex min-w-0 flex-1 flex-col">
|
|
772
779
|
{#if !isAuthenticated && adapter.authenticate}
|
|
@@ -960,6 +967,7 @@
|
|
|
960
967
|
{selectAllScope}
|
|
961
968
|
{onselect}
|
|
962
969
|
{selected}
|
|
970
|
+
testId={tableTestId}
|
|
963
971
|
/>
|
|
964
972
|
{/if}
|
|
965
973
|
</div>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { cn } from '../helper/cls.js';
|
|
3
|
+
import { buildTestId } from '../helper/testid.js';
|
|
3
4
|
import type {
|
|
4
5
|
FilterTab,
|
|
5
6
|
FilterGroup,
|
|
@@ -24,7 +25,8 @@
|
|
|
24
25
|
class: className,
|
|
25
26
|
summaryClass,
|
|
26
27
|
expandedClass,
|
|
27
|
-
FilterIcon
|
|
28
|
+
FilterIcon,
|
|
29
|
+
testId
|
|
28
30
|
}: CompactFiltersProps = $props();
|
|
29
31
|
|
|
30
32
|
// Search input only renders when the consumer bound to searchQuery.
|
|
@@ -187,7 +189,10 @@
|
|
|
187
189
|
</svg>
|
|
188
190
|
{/snippet}
|
|
189
191
|
|
|
190
|
-
<div
|
|
192
|
+
<div
|
|
193
|
+
class={cn(card && 'border-default-200 rounded-lg border bg-white p-3 shadow-sm', className)}
|
|
194
|
+
data-testid={testId ? buildTestId('compact-filters', undefined, testId) : undefined}
|
|
195
|
+
>
|
|
191
196
|
{#if card || expandable}
|
|
192
197
|
<!-- Header row: title | search | clear | chevron -->
|
|
193
198
|
<div class="mb-2 flex flex-wrap items-center gap-2">
|
|
@@ -214,6 +219,7 @@
|
|
|
214
219
|
placeholder={searchPlaceholder}
|
|
215
220
|
bind:value={searchQuery}
|
|
216
221
|
data-filters-search=""
|
|
222
|
+
data-testid={testId ? buildTestId('compact-filters', 'search', testId) : undefined}
|
|
217
223
|
/>
|
|
218
224
|
{#if searchQuery}
|
|
219
225
|
<button
|
|
@@ -222,6 +228,9 @@
|
|
|
222
228
|
class="text-default-400 hover:text-default-700 absolute top-1/2 right-1 flex size-5 -translate-y-1/2 cursor-pointer items-center justify-center rounded"
|
|
223
229
|
aria-label="Clear search"
|
|
224
230
|
data-filters-search-clear=""
|
|
231
|
+
data-testid={testId
|
|
232
|
+
? buildTestId('compact-filters', 'search-clear', testId)
|
|
233
|
+
: undefined}
|
|
225
234
|
>
|
|
226
235
|
<svg class="size-3" viewBox="0 0 12 12" fill="none" aria-hidden="true">
|
|
227
236
|
<path
|
|
@@ -242,6 +251,7 @@
|
|
|
242
251
|
onclick={clearAll}
|
|
243
252
|
class="text-default-600 hover:bg-default-100 cursor-pointer rounded-md px-2 py-1 text-xs font-medium"
|
|
244
253
|
data-filters-clear-all=""
|
|
254
|
+
data-testid={testId ? buildTestId('compact-filters', 'clear-all', testId) : undefined}
|
|
245
255
|
>
|
|
246
256
|
{clearAllLabel}
|
|
247
257
|
</button>
|
|
@@ -269,10 +279,11 @@
|
|
|
269
279
|
{#if !isExpanded}
|
|
270
280
|
<div class={cn('flex flex-wrap gap-2', summaryClass)}>
|
|
271
281
|
{#if chipSummary}
|
|
272
|
-
{#each chips as chip (chip.key + '::' + chip.value)}
|
|
282
|
+
{#each chips as chip, index (chip.key + '::' + chip.value)}
|
|
273
283
|
<span
|
|
274
284
|
class="bg-primary-50 text-primary-700 border-primary-200 flex items-center gap-1 rounded-full border px-2 py-1 text-xs"
|
|
275
285
|
data-filters-chip=""
|
|
286
|
+
data-testid={testId ? buildTestId('compact-filters', 'chip', testId, index) : undefined}
|
|
276
287
|
>
|
|
277
288
|
<span class="font-medium">{chip.groupLabel}:</span>
|
|
278
289
|
<span>{chip.label}</span>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { cn } from '../helper/cls.js';
|
|
3
|
+
import { buildTestId } from '../helper/testid.js';
|
|
3
4
|
import type { PageHeaderProps } from '../index.js';
|
|
4
5
|
import Breadcrumbs from './Breadcrumbs.svelte';
|
|
5
6
|
|
|
@@ -10,7 +11,8 @@
|
|
|
10
11
|
children,
|
|
11
12
|
class: className = '',
|
|
12
13
|
titleClass = '',
|
|
13
|
-
layout = 'vertical'
|
|
14
|
+
layout = 'vertical',
|
|
15
|
+
testId
|
|
14
16
|
}: PageHeaderProps = $props();
|
|
15
17
|
|
|
16
18
|
const defaultTitleClasses =
|
|
@@ -19,9 +21,13 @@
|
|
|
19
21
|
const hasBreadcrumbs = $derived(breadcrumbs && breadcrumbs.length > 0);
|
|
20
22
|
const titleClasses = $derived(cn(defaultTitleClasses, titleClass));
|
|
21
23
|
const containerClass = $derived(cn('space-y-4', className as string));
|
|
24
|
+
|
|
25
|
+
// Root data-testid for the whole header; the Breadcrumbs child receives a
|
|
26
|
+
// prefixed testId so its selectors nest under this header's namespace.
|
|
27
|
+
const rootTestId = $derived(testId ? buildTestId('pageheader', undefined, testId) : undefined);
|
|
22
28
|
</script>
|
|
23
29
|
|
|
24
|
-
<div class="pb-4">
|
|
30
|
+
<div class="pb-4" data-testid={rootTestId}>
|
|
25
31
|
{#if layout === 'horizontal'}
|
|
26
32
|
<div
|
|
27
33
|
class="flex flex-col space-y-3 md:flex-row md:items-start md:justify-between md:space-y-0 {className}"
|
|
@@ -29,7 +35,7 @@
|
|
|
29
35
|
<!-- Title and subtitle grouped together as one unit -->
|
|
30
36
|
<div class="min-w-0 flex-1 gap-4">
|
|
31
37
|
{#if hasBreadcrumbs}
|
|
32
|
-
<Breadcrumbs items={breadcrumbs} />
|
|
38
|
+
<Breadcrumbs items={breadcrumbs} testId={rootTestId} />
|
|
33
39
|
{/if}
|
|
34
40
|
<h2 class={titleClasses}>{title}</h2>
|
|
35
41
|
{#if subtitle}
|
|
@@ -52,7 +58,7 @@
|
|
|
52
58
|
<!-- Title and subtitle grouped together -->
|
|
53
59
|
<div class="min-w-0 gap-4">
|
|
54
60
|
{#if hasBreadcrumbs}
|
|
55
|
-
<Breadcrumbs items={breadcrumbs} />
|
|
61
|
+
<Breadcrumbs items={breadcrumbs} testId={rootTestId} />
|
|
56
62
|
{/if}
|
|
57
63
|
<h2 class={titleClasses}>{title}</h2>
|
|
58
64
|
{#if subtitle}
|
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
import { getContext } from 'svelte';
|
|
3
3
|
import type { MenuBar, NavGroupProps } from '../../index.js';
|
|
4
4
|
import { cn } from '../../helper/cls.js';
|
|
5
|
+
import { buildTestId } from '../../helper/testid.js';
|
|
5
6
|
|
|
6
7
|
let {
|
|
7
8
|
labelArea,
|
|
8
9
|
children,
|
|
9
10
|
class: className = '',
|
|
10
|
-
active: isActive = false
|
|
11
|
+
active: isActive = false,
|
|
12
|
+
testId
|
|
11
13
|
}: NavGroupProps = $props();
|
|
12
14
|
|
|
13
15
|
function toggle() {
|
|
@@ -58,7 +60,7 @@
|
|
|
58
60
|
);
|
|
59
61
|
</script>
|
|
60
62
|
|
|
61
|
-
<div>
|
|
63
|
+
<div data-testid={buildTestId('navgroup', undefined, testId)}>
|
|
62
64
|
<button type="button" class={navGroupClasses} onclick={toggle}>
|
|
63
65
|
{@render labelArea(labelClasses, iconClasses)}
|
|
64
66
|
{@render ChevronIcon(chevronIconClasses, 0.7)}
|
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
import { getContext } from 'svelte';
|
|
4
4
|
import type { MenuBar, NavItemProps } from '../../index.js';
|
|
5
5
|
import { cn } from '../../helper/cls.js';
|
|
6
|
+
import { buildTestId } from '../../helper/testid.js';
|
|
6
7
|
import { resolve } from '$app/paths';
|
|
7
8
|
|
|
8
|
-
let { href, children, active, class: className = '' }: NavItemProps = $props();
|
|
9
|
+
let { href, children, active, class: className = '', testId }: NavItemProps = $props();
|
|
9
10
|
|
|
10
11
|
const menubar: MenuBar = getContext('menubar');
|
|
11
12
|
|
|
@@ -25,6 +26,10 @@
|
|
|
25
26
|
);
|
|
26
27
|
</script>
|
|
27
28
|
|
|
28
|
-
<a
|
|
29
|
+
<a
|
|
30
|
+
href={resolve(href as `/`)}
|
|
31
|
+
class={navItemClasses}
|
|
32
|
+
data-testid={buildTestId('navitem', undefined, testId)}
|
|
33
|
+
>
|
|
29
34
|
{@render children?.(navChildrenClasses)}
|
|
30
35
|
</a>
|
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
onclick = () => {},
|
|
17
17
|
variant = 'line',
|
|
18
18
|
index = 0,
|
|
19
|
+
class: className = '',
|
|
19
20
|
testId
|
|
20
|
-
}: TabProps & { index?: number } = $props();
|
|
21
|
+
}: TabProps & { index?: number; class?: string } = $props();
|
|
21
22
|
|
|
22
23
|
function handleClick(event: Event & { currentTarget: EventTarget & HTMLButtonElement }) {
|
|
23
24
|
event.preventDefault();
|
|
@@ -35,7 +36,7 @@
|
|
|
35
36
|
})
|
|
36
37
|
);
|
|
37
38
|
|
|
38
|
-
const triggerClass = $derived(cn(trigger()));
|
|
39
|
+
const triggerClass = $derived(cn(trigger(), className));
|
|
39
40
|
</script>
|
|
40
41
|
|
|
41
42
|
<button
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
variant = 'line',
|
|
18
18
|
class: className = '',
|
|
19
19
|
listClass = '',
|
|
20
|
+
triggerClass = '',
|
|
20
21
|
panelClass = '',
|
|
21
22
|
onchange = () => {},
|
|
22
23
|
children,
|
|
@@ -33,6 +34,7 @@
|
|
|
33
34
|
|
|
34
35
|
const baseClass = $derived(cn(base(), className));
|
|
35
36
|
const listClass_ = $derived(cn(list(), listClass));
|
|
37
|
+
const triggerClass_ = $derived(cn(triggerClass));
|
|
36
38
|
const panelClass_ = $derived(cn(panel(), panelClass));
|
|
37
39
|
|
|
38
40
|
function handleTabClick(value: string) {
|
|
@@ -56,6 +58,7 @@
|
|
|
56
58
|
{size}
|
|
57
59
|
{variant}
|
|
58
60
|
{index}
|
|
61
|
+
class={triggerClass_}
|
|
59
62
|
testId={buildTestId('tabgroup', 'tab', testId, index)}
|
|
60
63
|
onclick={() => handleTabClick(tab.value)}
|
|
61
64
|
/>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@makolabs/ripple",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.8.0",
|
|
4
4
|
"description": "Simple Svelte 5 powered component library ✨",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"repository": {
|
|
@@ -139,7 +139,8 @@
|
|
|
139
139
|
"uuid": ">=11.1.1",
|
|
140
140
|
"devalue": ">=5.8.1",
|
|
141
141
|
"fast-xml-builder": ">=1.1.7",
|
|
142
|
-
"esbuild": ">=0.28.1"
|
|
142
|
+
"esbuild": ">=0.28.1",
|
|
143
|
+
"cookie": ">=0.7.0 <1.0.0"
|
|
143
144
|
},
|
|
144
145
|
"dependencies": {
|
|
145
146
|
"@aws-sdk/client-s3": "^3.1029.0",
|