@makolabs/ripple 1.2.3 → 1.2.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 +77 -0
- package/dist/adapters/ai/OpenAIAdapter.js +16 -11
- package/dist/adapters/ai/types.d.ts +3 -3
- package/dist/adapters/storage/BaseAdapter.d.ts +1 -1
- package/dist/adapters/storage/BaseAdapter.js +1 -1
- package/dist/adapters/storage/S3Adapter.js +2 -2
- package/dist/ai/AIChatInterface.svelte +32 -34
- package/dist/ai/AIChatInterface.svelte.d.ts +0 -1
- package/dist/ai/AIChatInterfaceTestWrapper.svelte +26 -0
- package/dist/ai/AIChatInterfaceTestWrapper.svelte.d.ts +17 -0
- package/dist/ai/ChatInput.svelte +7 -15
- package/dist/ai/ChatInput.svelte.d.ts +0 -2
- package/dist/ai/CodeRenderer.svelte +25 -12
- package/dist/ai/ComposeDropdown.svelte +17 -14
- package/dist/ai/MermaidRenderer.svelte +21 -17
- package/dist/ai/MermaidRenderer.svelte.d.ts +0 -1
- package/dist/ai/MessageBox.svelte +10 -7
- package/dist/ai/ThinkingDisplay.svelte +67 -43
- package/dist/ai/ai-chat-interface.d.ts +22 -21
- package/dist/ai/ai-chat-interface.js +8 -7
- package/dist/ai/content-detector.js +2 -2
- package/dist/button/ButtonTestWrapper.svelte +10 -0
- package/dist/button/ButtonTestWrapper.svelte.d.ts +7 -0
- package/dist/charts/Chart.svelte +6 -1
- package/dist/config/ai.js +1 -0
- package/dist/drawer/DrawerTestWrapper.svelte +19 -0
- package/dist/drawer/DrawerTestWrapper.svelte.d.ts +9 -0
- package/dist/drawer/drawer.d.ts +19 -18
- package/dist/drawer/drawer.js +7 -6
- package/dist/elements/accordion/Accordion.svelte +1 -1
- package/dist/elements/accordion/Accordion.svelte.d.ts +1 -1
- package/dist/elements/accordion/AccordionTestWrapper.svelte +21 -0
- package/dist/elements/accordion/AccordionTestWrapper.svelte.d.ts +10 -0
- package/dist/elements/badge/Badge.svelte +5 -4
- package/dist/elements/badge/BadgeTestWrapper.svelte +14 -0
- package/dist/elements/badge/BadgeTestWrapper.svelte.d.ts +9 -0
- package/dist/elements/badge/badge.d.ts +40 -39
- package/dist/elements/badge/badge.js +14 -13
- package/dist/elements/dropdown/Dropdown.svelte +0 -1
- package/dist/elements/pagination/Pagination.svelte +20 -26
- package/dist/elements/progress/Progress.svelte +3 -3
- package/dist/elements/timeline/Timeline.svelte +1 -1
- package/dist/file-browser/FileBrowser.svelte +7 -10
- package/dist/filters/CompactFilters.svelte +3 -3
- package/dist/forms/Checkbox.svelte +0 -1
- package/dist/forms/CheckboxTestWrapper.svelte +8 -0
- package/dist/forms/CheckboxTestWrapper.svelte.d.ts +4 -0
- package/dist/forms/DateRange.svelte +186 -198
- package/dist/forms/Form.svelte +1 -0
- package/dist/forms/Input.svelte +14 -5
- package/dist/forms/InputTestWrapper.svelte +8 -0
- package/dist/forms/InputTestWrapper.svelte.d.ts +4 -0
- package/dist/forms/NumberInput.svelte +2 -2
- package/dist/forms/RadioInputs.svelte +1 -1
- package/dist/forms/RadioPill.svelte +1 -1
- package/dist/forms/Slider.svelte +2 -2
- package/dist/forms/Tags.svelte +3 -3
- package/dist/forms/ToggleTestWrapper.svelte +8 -0
- package/dist/forms/ToggleTestWrapper.svelte.d.ts +7 -0
- package/dist/forms/slider.js +1 -1
- package/dist/header/PageHeader.svelte +2 -1
- package/dist/header/breadcrumbs.d.ts +47 -33
- package/dist/header/breadcrumbs.js +12 -11
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -0
- package/dist/layout/activity-list/ActivityList.svelte +9 -11
- package/dist/layout/card/CardTestWrapper.svelte +15 -0
- package/dist/layout/card/CardTestWrapper.svelte.d.ts +7 -0
- package/dist/layout/card/RankedCard.svelte +2 -3
- package/dist/layout/navbar/navbar.d.ts +19 -18
- package/dist/layout/navbar/navbar.js +7 -6
- package/dist/layout/sidebar/NavGroup.svelte +1 -0
- package/dist/layout/table/Cells.svelte +5 -5
- package/dist/layout/table/Table.svelte +8 -8
- package/dist/layout/table/table.d.ts +28 -24
- package/dist/layout/table/table.js +14 -13
- package/dist/modal/Modal.svelte +1 -1
- package/dist/modal/ModalTestWrapper.svelte +20 -0
- package/dist/modal/ModalTestWrapper.svelte.d.ts +8 -0
- package/dist/modal/modal.d.ts +1 -20
- package/dist/pipeline/Pipeline.svelte +29 -17
- package/dist/user-management/README.md +417 -0
- package/dist/user-management/UserManagement.svelte +245 -0
- package/dist/user-management/UserManagement.svelte.d.ts +4 -0
- package/dist/user-management/UserManagementTestWrapper.svelte +33 -0
- package/dist/user-management/UserManagementTestWrapper.svelte.d.ts +13 -0
- package/dist/user-management/UserModal.svelte +285 -0
- package/dist/user-management/UserModal.svelte.d.ts +4 -0
- package/dist/user-management/UserModalTestWrapper.svelte +22 -0
- package/dist/user-management/UserModalTestWrapper.svelte.d.ts +7 -0
- package/dist/user-management/UserTable.svelte +219 -0
- package/dist/user-management/UserTable.svelte.d.ts +4 -0
- package/dist/user-management/UserTableTestWrapper.svelte +41 -0
- package/dist/user-management/UserTableTestWrapper.svelte.d.ts +7 -0
- package/dist/user-management/UserViewModal.svelte +276 -0
- package/dist/user-management/UserViewModal.svelte.d.ts +4 -0
- package/dist/user-management/UserViewModalTestWrapper.svelte +22 -0
- package/dist/user-management/UserViewModalTestWrapper.svelte.d.ts +7 -0
- package/dist/user-management/adapters/UserManagement.remote.d.ts +68 -0
- package/dist/user-management/adapters/UserManagement.remote.js +487 -0
- package/dist/user-management/adapters/index.d.ts +10 -0
- package/dist/user-management/adapters/index.js +12 -0
- package/dist/user-management/adapters/mockUserManagement.d.ts +70 -0
- package/dist/user-management/adapters/mockUserManagement.js +187 -0
- package/dist/user-management/adapters/types.d.ts +24 -0
- package/dist/user-management/adapters/types.js +7 -0
- package/dist/user-management/index.d.ts +12 -0
- package/dist/user-management/index.js +11 -0
- package/dist/user-management/user-management.d.ts +126 -0
- package/dist/user-management/user-management.js +42 -0
- package/package.json +4 -1
- package/dist/types/markdown.d.ts +0 -14
- package/dist/types/variants.d.ts +0 -1
- package/dist/types/variants.js +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { cn } from '../../helper/cls.js';
|
|
3
3
|
import { table } from './table.js';
|
|
4
|
-
import type { TableProps, SortDirection, SortState } from '../../index.js';
|
|
4
|
+
import type { TableProps, SortDirection, SortState, DataRow } from '../../index.js';
|
|
5
5
|
import Pagination from '../../elements/pagination/Pagination.svelte';
|
|
6
6
|
import Card from '../../layout/card/Card.svelte';
|
|
7
7
|
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
title,
|
|
43
43
|
subtitle,
|
|
44
44
|
headerActions
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
45
46
|
}: TableProps<any> = $props();
|
|
46
47
|
|
|
47
48
|
// Determine if we should use Card wrapper
|
|
@@ -70,12 +71,11 @@
|
|
|
70
71
|
const showPaginationControls = $derived(
|
|
71
72
|
pagination &&
|
|
72
73
|
showPagination &&
|
|
73
|
-
(data.length > internalPageSize || totalItems > internalPageSize)
|
|
74
|
+
(data.length > internalPageSize || (totalItems ?? 0) > internalPageSize)
|
|
74
75
|
);
|
|
75
76
|
|
|
76
77
|
// Calculate total items and pages
|
|
77
78
|
const effectiveTotalItems = $derived(totalItems !== undefined ? totalItems : data.length);
|
|
78
|
-
const totalPages = $derived(Math.ceil(effectiveTotalItems / internalPageSize));
|
|
79
79
|
|
|
80
80
|
const {
|
|
81
81
|
base: baseClass,
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
onsort(newSortState);
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
function toggleRowSelection(row:
|
|
157
|
+
function toggleRowSelection(row: DataRow) {
|
|
158
158
|
if (!selectable) return;
|
|
159
159
|
|
|
160
160
|
const index = selected.findIndex((r) => r === row);
|
|
@@ -167,11 +167,11 @@
|
|
|
167
167
|
onselect(selected);
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
function isRowSelected(row:
|
|
170
|
+
function isRowSelected(row: DataRow) {
|
|
171
171
|
return selected.includes(row);
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
function handleRowClick(row:
|
|
174
|
+
function handleRowClick(row: DataRow, index: number) {
|
|
175
175
|
onrowclick?.(row, index);
|
|
176
176
|
}
|
|
177
177
|
|
|
@@ -367,7 +367,7 @@
|
|
|
367
367
|
</td>
|
|
368
368
|
</tr>
|
|
369
369
|
{:else}
|
|
370
|
-
{#each getPaginatedData() as row, rowIndex}
|
|
370
|
+
{#each getPaginatedData() as row, rowIndex (rowIndex)}
|
|
371
371
|
<tr
|
|
372
372
|
class={cn(trClasses, rowclass(row, rowIndex), {
|
|
373
373
|
'bg-primary-100': selectable && isRowSelected(row),
|
|
@@ -595,7 +595,7 @@
|
|
|
595
595
|
</td>
|
|
596
596
|
</tr>
|
|
597
597
|
{:else}
|
|
598
|
-
{#each getPaginatedData() as row, rowIndex}
|
|
598
|
+
{#each getPaginatedData() as row, rowIndex (rowIndex)}
|
|
599
599
|
<tr
|
|
600
600
|
class={cn(trClasses, rowclass(row, rowIndex), {
|
|
601
601
|
'bg-primary-100': selectable && isRowSelected(row),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Color } from '../../variants.js';
|
|
1
2
|
export declare const table: import("tailwind-variants").TVReturnType<{
|
|
2
3
|
size: {
|
|
3
4
|
xs: {
|
|
@@ -26,32 +27,32 @@ export declare const table: import("tailwind-variants").TVReturnType<{
|
|
|
26
27
|
};
|
|
27
28
|
};
|
|
28
29
|
color: {
|
|
29
|
-
|
|
30
|
+
[Color.PRIMARY]: {
|
|
30
31
|
th: string;
|
|
32
|
+
tr: string;
|
|
31
33
|
};
|
|
32
|
-
|
|
34
|
+
[Color.SECONDARY]: {
|
|
33
35
|
th: string;
|
|
34
36
|
tr: string;
|
|
35
37
|
};
|
|
36
|
-
|
|
38
|
+
[Color.INFO]: {
|
|
37
39
|
th: string;
|
|
38
40
|
tr: string;
|
|
39
41
|
};
|
|
40
|
-
|
|
42
|
+
[Color.SUCCESS]: {
|
|
41
43
|
th: string;
|
|
42
44
|
tr: string;
|
|
43
45
|
};
|
|
44
|
-
|
|
46
|
+
[Color.WARNING]: {
|
|
45
47
|
th: string;
|
|
46
48
|
tr: string;
|
|
47
49
|
};
|
|
48
|
-
|
|
50
|
+
[Color.DANGER]: {
|
|
49
51
|
th: string;
|
|
50
52
|
tr: string;
|
|
51
53
|
};
|
|
52
|
-
|
|
54
|
+
default: {
|
|
53
55
|
th: string;
|
|
54
|
-
tr: string;
|
|
55
56
|
};
|
|
56
57
|
};
|
|
57
58
|
bordered: {
|
|
@@ -111,32 +112,32 @@ export declare const table: import("tailwind-variants").TVReturnType<{
|
|
|
111
112
|
};
|
|
112
113
|
};
|
|
113
114
|
color: {
|
|
114
|
-
|
|
115
|
+
[Color.PRIMARY]: {
|
|
115
116
|
th: string;
|
|
117
|
+
tr: string;
|
|
116
118
|
};
|
|
117
|
-
|
|
119
|
+
[Color.SECONDARY]: {
|
|
118
120
|
th: string;
|
|
119
121
|
tr: string;
|
|
120
122
|
};
|
|
121
|
-
|
|
123
|
+
[Color.INFO]: {
|
|
122
124
|
th: string;
|
|
123
125
|
tr: string;
|
|
124
126
|
};
|
|
125
|
-
|
|
127
|
+
[Color.SUCCESS]: {
|
|
126
128
|
th: string;
|
|
127
129
|
tr: string;
|
|
128
130
|
};
|
|
129
|
-
|
|
131
|
+
[Color.WARNING]: {
|
|
130
132
|
th: string;
|
|
131
133
|
tr: string;
|
|
132
134
|
};
|
|
133
|
-
|
|
135
|
+
[Color.DANGER]: {
|
|
134
136
|
th: string;
|
|
135
137
|
tr: string;
|
|
136
138
|
};
|
|
137
|
-
|
|
139
|
+
default: {
|
|
138
140
|
th: string;
|
|
139
|
-
tr: string;
|
|
140
141
|
};
|
|
141
142
|
};
|
|
142
143
|
bordered: {
|
|
@@ -196,32 +197,32 @@ export declare const table: import("tailwind-variants").TVReturnType<{
|
|
|
196
197
|
};
|
|
197
198
|
};
|
|
198
199
|
color: {
|
|
199
|
-
|
|
200
|
+
[Color.PRIMARY]: {
|
|
200
201
|
th: string;
|
|
202
|
+
tr: string;
|
|
201
203
|
};
|
|
202
|
-
|
|
204
|
+
[Color.SECONDARY]: {
|
|
203
205
|
th: string;
|
|
204
206
|
tr: string;
|
|
205
207
|
};
|
|
206
|
-
|
|
208
|
+
[Color.INFO]: {
|
|
207
209
|
th: string;
|
|
208
210
|
tr: string;
|
|
209
211
|
};
|
|
210
|
-
|
|
212
|
+
[Color.SUCCESS]: {
|
|
211
213
|
th: string;
|
|
212
214
|
tr: string;
|
|
213
215
|
};
|
|
214
|
-
|
|
216
|
+
[Color.WARNING]: {
|
|
215
217
|
th: string;
|
|
216
218
|
tr: string;
|
|
217
219
|
};
|
|
218
|
-
|
|
220
|
+
[Color.DANGER]: {
|
|
219
221
|
th: string;
|
|
220
222
|
tr: string;
|
|
221
223
|
};
|
|
222
|
-
|
|
224
|
+
default: {
|
|
223
225
|
th: string;
|
|
224
|
-
tr: string;
|
|
225
226
|
};
|
|
226
227
|
};
|
|
227
228
|
bordered: {
|
|
@@ -254,3 +255,6 @@ export declare const table: import("tailwind-variants").TVReturnType<{
|
|
|
254
255
|
sortButton: string;
|
|
255
256
|
sortIcon: string;
|
|
256
257
|
}, undefined, unknown, unknown, undefined>>;
|
|
258
|
+
export type StatusType = 'active' | 'inactive' | 'pending' | 'error' | 'default';
|
|
259
|
+
export type KeyType = string;
|
|
260
|
+
export type DataRow = Record<string, unknown>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { tv } from 'tailwind-variants';
|
|
2
|
+
import { Color } from '../../variants.js';
|
|
2
3
|
export const table = tv({
|
|
3
4
|
slots: {
|
|
4
5
|
base: 'w-full',
|
|
@@ -18,55 +19,55 @@ export const table = tv({
|
|
|
18
19
|
variants: {
|
|
19
20
|
size: {
|
|
20
21
|
xs: {
|
|
21
|
-
th: 'px-2 py-1.5',
|
|
22
|
+
th: 'px-2 py-1.5 text-xs',
|
|
22
23
|
td: 'px-2 py-1.5 text-xs'
|
|
23
24
|
},
|
|
24
25
|
sm: {
|
|
25
|
-
th: 'px-3 py-2',
|
|
26
|
+
th: 'px-3 py-2 text-xs',
|
|
26
27
|
td: 'px-3 py-2 text-sm'
|
|
27
28
|
},
|
|
28
29
|
base: {
|
|
29
|
-
th: 'px-
|
|
30
|
+
th: 'px-4 py-3 text-sm',
|
|
30
31
|
td: 'px-4 py-3 text-sm'
|
|
31
32
|
},
|
|
32
33
|
lg: {
|
|
33
|
-
th: 'px-
|
|
34
|
+
th: 'px-6 py-4 text-sm',
|
|
34
35
|
td: 'px-6 py-4 text-base'
|
|
35
36
|
},
|
|
36
37
|
xl: {
|
|
37
|
-
th: 'px-
|
|
38
|
+
th: 'px-8 py-5 text-base',
|
|
38
39
|
td: 'px-8 py-5 text-base'
|
|
39
40
|
},
|
|
40
41
|
'2xl': {
|
|
41
|
-
th: 'px-
|
|
42
|
+
th: 'px-10 py-6 text-lg',
|
|
42
43
|
td: 'px-10 py-6 text-lg'
|
|
43
44
|
}
|
|
44
45
|
},
|
|
45
46
|
color: {
|
|
46
47
|
default: {
|
|
47
|
-
th: 'bg-
|
|
48
|
+
th: 'text-default-700 bg-default-50'
|
|
48
49
|
},
|
|
49
|
-
|
|
50
|
+
[Color.PRIMARY]: {
|
|
50
51
|
th: 'text-primary-700 bg-primary-50',
|
|
51
52
|
tr: 'hover:bg-primary-50'
|
|
52
53
|
},
|
|
53
|
-
|
|
54
|
+
[Color.SECONDARY]: {
|
|
54
55
|
th: 'text-secondary-700 bg-secondary-50',
|
|
55
56
|
tr: 'hover:bg-secondary-50'
|
|
56
57
|
},
|
|
57
|
-
|
|
58
|
+
[Color.INFO]: {
|
|
58
59
|
th: 'text-info-700 bg-info-50',
|
|
59
60
|
tr: 'hover:bg-info-50'
|
|
60
61
|
},
|
|
61
|
-
|
|
62
|
+
[Color.SUCCESS]: {
|
|
62
63
|
th: 'text-success-700 bg-success-50',
|
|
63
64
|
tr: 'hover:bg-success-50'
|
|
64
65
|
},
|
|
65
|
-
|
|
66
|
+
[Color.WARNING]: {
|
|
66
67
|
th: 'text-warning-700 bg-warning-50',
|
|
67
68
|
tr: 'hover:bg-warning-50'
|
|
68
69
|
},
|
|
69
|
-
|
|
70
|
+
[Color.DANGER]: {
|
|
70
71
|
th: 'text-danger-700 bg-danger-50',
|
|
71
72
|
tr: 'hover:bg-danger-50'
|
|
72
73
|
}
|
package/dist/modal/Modal.svelte
CHANGED
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
);
|
|
41
41
|
const footerClass = $derived(cn(styles.footer(), ''));
|
|
42
42
|
const closeClass = $derived(cn(styles.close(), ''));
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
43
44
|
const descriptionClass = $derived(cn(styles.description(), ''));
|
|
44
45
|
|
|
45
46
|
function handleBackdropClick() {
|
|
@@ -89,7 +90,6 @@
|
|
|
89
90
|
</button>
|
|
90
91
|
{/if}
|
|
91
92
|
</header>
|
|
92
|
-
|
|
93
93
|
{/if}
|
|
94
94
|
|
|
95
95
|
<!-- Close button only (positioned absolutely when no header) -->
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Modal from './Modal.svelte';
|
|
3
|
+
import type { ModalProps } from '../index.js';
|
|
4
|
+
|
|
5
|
+
let {
|
|
6
|
+
bodyText = '',
|
|
7
|
+
footerText = '',
|
|
8
|
+
...modalProps
|
|
9
|
+
}: ModalProps & { bodyText?: string; footerText?: string } = $props();
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<Modal {...modalProps}>
|
|
13
|
+
<div>{bodyText}</div>
|
|
14
|
+
{#if footerText}
|
|
15
|
+
<!-- eslint-disable-next-line @typescript-eslint/no-unused-vars -->
|
|
16
|
+
{#snippet footer()}
|
|
17
|
+
<div>{footerText}</div>
|
|
18
|
+
{/snippet}
|
|
19
|
+
{/if}
|
|
20
|
+
</Modal>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ModalProps } from '../index.js';
|
|
2
|
+
type $$ComponentProps = ModalProps & {
|
|
3
|
+
bodyText?: string;
|
|
4
|
+
footerText?: string;
|
|
5
|
+
};
|
|
6
|
+
declare const ModalTestWrapper: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
7
|
+
type ModalTestWrapper = ReturnType<typeof ModalTestWrapper>;
|
|
8
|
+
export default ModalTestWrapper;
|
package/dist/modal/modal.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Size
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
1
|
+
import { Size } from '../index.js';
|
|
3
2
|
export declare const modal: import("tailwind-variants").TVReturnType<{
|
|
4
3
|
size: {
|
|
5
4
|
[Size.XS]: {
|
|
@@ -94,21 +93,3 @@ export declare const modal: import("tailwind-variants").TVReturnType<{
|
|
|
94
93
|
description: string;
|
|
95
94
|
close: string;
|
|
96
95
|
}, undefined, unknown, unknown, undefined>>;
|
|
97
|
-
export type ModalProps = {
|
|
98
|
-
open?: boolean;
|
|
99
|
-
onclose?: () => void;
|
|
100
|
-
title?: string;
|
|
101
|
-
description?: string;
|
|
102
|
-
size?: VariantSizes;
|
|
103
|
-
hideCloseButton?: boolean;
|
|
104
|
-
class?: string;
|
|
105
|
-
contentclass?: string;
|
|
106
|
-
bodyclass?: string;
|
|
107
|
-
titleclass?: string;
|
|
108
|
-
headerclass?: string;
|
|
109
|
-
backdropclass?: string;
|
|
110
|
-
footerclass?: string;
|
|
111
|
-
children?: Snippet;
|
|
112
|
-
footer?: Snippet;
|
|
113
|
-
header?: Snippet;
|
|
114
|
-
};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { tv } from 'tailwind-variants';
|
|
3
3
|
import type { Snippet } from 'svelte';
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
export type PipelineStage = {
|
|
6
6
|
label: string;
|
|
7
7
|
count?: number | string;
|
|
8
8
|
color?: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'info';
|
|
9
9
|
active?: boolean;
|
|
10
10
|
};
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
interface Props {
|
|
13
13
|
stages: PipelineStage[];
|
|
14
14
|
class?: string;
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
children?: Snippet<[PipelineStage, number]>;
|
|
18
18
|
beneathChildren?: Snippet<[PipelineStage, number]>;
|
|
19
19
|
}
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
let {
|
|
22
22
|
stages = [],
|
|
23
23
|
class: className = '',
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
children,
|
|
27
27
|
beneathChildren
|
|
28
28
|
}: Props = $props();
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
const pipeline = tv({
|
|
31
31
|
slots: {
|
|
32
32
|
container: 'flex items-center gap-0 w-full',
|
|
@@ -109,9 +109,9 @@
|
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
111
|
});
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
const styles = $derived(pipeline({ size, equalWidth }));
|
|
114
|
-
|
|
114
|
+
|
|
115
115
|
function getStageStyles(stage: PipelineStage) {
|
|
116
116
|
return pipeline({
|
|
117
117
|
size,
|
|
@@ -123,22 +123,34 @@
|
|
|
123
123
|
</script>
|
|
124
124
|
|
|
125
125
|
<div class="{styles.container()} {className}">
|
|
126
|
-
{#each stages as stage, index}
|
|
126
|
+
{#each stages as stage, index (stage.label + index)}
|
|
127
127
|
{@const isFirst = index === 0}
|
|
128
|
-
{@const isLast = index === stages.length - 1}
|
|
129
128
|
{@const chevronWidth = 20}
|
|
130
|
-
|
|
131
|
-
<div
|
|
129
|
+
|
|
130
|
+
<div
|
|
131
|
+
class="flex flex-col {getStageStyles(stage).stage()}"
|
|
132
|
+
style={!isFirst
|
|
133
|
+
? `margin-left: -${chevronWidth}px; z-index: ${stages.length - index}`
|
|
134
|
+
: `z-index: ${stages.length - index}`}
|
|
135
|
+
>
|
|
132
136
|
<!-- BACKGROUND LAYER (Border color - larger) -->
|
|
133
|
-
<div
|
|
134
|
-
class=
|
|
135
|
-
style="clip-path: polygon({isFirst
|
|
137
|
+
<div
|
|
138
|
+
class={getStageStyles(stage).borderLayer()}
|
|
139
|
+
style="clip-path: polygon({isFirst
|
|
140
|
+
? '0'
|
|
141
|
+
: '0'} 0%, calc(100% - {chevronWidth}px) 0%, 100% 50%, calc(100% - {chevronWidth}px) 100%, {isFirst
|
|
142
|
+
? '0'
|
|
143
|
+
: '0'} 100%, {isFirst ? '0' : `${chevronWidth}px`} 50%);"
|
|
136
144
|
></div>
|
|
137
|
-
|
|
145
|
+
|
|
138
146
|
<!-- FOREGROUND LAYER (White - smaller, creates border effect) -->
|
|
139
|
-
<div
|
|
140
|
-
class=
|
|
141
|
-
style="clip-path: polygon({isFirst
|
|
147
|
+
<div
|
|
148
|
+
class={getStageStyles(stage).innerLayer()}
|
|
149
|
+
style="clip-path: polygon({isFirst
|
|
150
|
+
? '2px'
|
|
151
|
+
: '2px'} 2px, calc(100% - {chevronWidth}px - 2px) 2px, calc(100% - 2px) 50%, calc(100% - {chevronWidth}px - 2px) calc(100% - 2px), {isFirst
|
|
152
|
+
? '2px'
|
|
153
|
+
: '2px'} calc(100% - 2px), {isFirst ? '2px' : `${chevronWidth + 2}px`} 50%);"
|
|
142
154
|
>
|
|
143
155
|
<div class={getStageStyles(stage).content()}>
|
|
144
156
|
{#if children}
|