@makolabs/ripple 0.0.1-dev.64 → 0.0.1-dev.66
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/file-browser/FileBrowser.svelte +2 -2
- package/dist/index.d.ts +16 -0
- package/dist/index.js +2 -0
- package/dist/layout/card/MetricCard.svelte +59 -0
- package/dist/layout/card/MetricCard.svelte.d.ts +4 -0
- package/dist/layout/card/metric-card.d.ts +49 -0
- package/dist/layout/card/metric-card.js +10 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -177,6 +177,20 @@ export type StatsCardProps = {
|
|
|
177
177
|
class?: ClassValue;
|
|
178
178
|
formatLargeNumbers?: boolean;
|
|
179
179
|
};
|
|
180
|
+
export type MetricDetail = {
|
|
181
|
+
label: string;
|
|
182
|
+
value: string | number;
|
|
183
|
+
color?: string;
|
|
184
|
+
};
|
|
185
|
+
export type MetricCardProps = {
|
|
186
|
+
title: string;
|
|
187
|
+
value: string | number;
|
|
188
|
+
details?: MetricDetail[];
|
|
189
|
+
percent?: number;
|
|
190
|
+
primaryColor?: string;
|
|
191
|
+
secondaryColor?: string;
|
|
192
|
+
class?: ClassValue;
|
|
193
|
+
};
|
|
180
194
|
export type DataRow = Record<string, any>;
|
|
181
195
|
export type KeyType = keyof DataRow;
|
|
182
196
|
export type StatusType = 'active' | 'inactive' | 'pending' | 'error' | 'default';
|
|
@@ -341,6 +355,7 @@ export { default as Dropdown } from './elements/dropdown/Dropdown.svelte';
|
|
|
341
355
|
export { default as Select } from './elements/dropdown/Select.svelte';
|
|
342
356
|
export { default as Card } from './layout/card/Card.svelte';
|
|
343
357
|
export { default as StatsCard } from './layout/card/StatsCard.svelte';
|
|
358
|
+
export { default as MetricCard } from './layout/card/MetricCard.svelte';
|
|
344
359
|
export { default as Alert } from './elements/alert/Alert.svelte';
|
|
345
360
|
export type TabProps = {
|
|
346
361
|
value: string;
|
|
@@ -388,6 +403,7 @@ export { modal } from './modal/modal.js';
|
|
|
388
403
|
export { drawer } from './drawer/drawer.js';
|
|
389
404
|
export { selectTV } from './elements/dropdown/select.js';
|
|
390
405
|
export { breadcrumbs } from './header/breadcrumbs.js';
|
|
406
|
+
export { metricCard } from './layout/card/metric-card.js';
|
|
391
407
|
export type ChartColorKey = keyof typeof ChartColor;
|
|
392
408
|
export type ChartColorValue = typeof ChartColor[ChartColorKey];
|
|
393
409
|
export type ChartColors = {
|
package/dist/index.js
CHANGED
|
@@ -28,6 +28,7 @@ export { default as Select } from './elements/dropdown/Select.svelte';
|
|
|
28
28
|
// Elements - Card
|
|
29
29
|
export { default as Card } from './layout/card/Card.svelte';
|
|
30
30
|
export { default as StatsCard } from './layout/card/StatsCard.svelte';
|
|
31
|
+
export { default as MetricCard } from './layout/card/MetricCard.svelte';
|
|
31
32
|
// Elements - Alert
|
|
32
33
|
export { default as Alert } from './elements/alert/Alert.svelte';
|
|
33
34
|
export { default as Tab } from './layout/tabs/Tab.svelte';
|
|
@@ -50,6 +51,7 @@ export { modal } from './modal/modal.js';
|
|
|
50
51
|
export { drawer } from './drawer/drawer.js';
|
|
51
52
|
export { selectTV } from './elements/dropdown/select.js';
|
|
52
53
|
export { breadcrumbs } from './header/breadcrumbs.js';
|
|
54
|
+
export { metricCard } from './layout/card/metric-card.js';
|
|
53
55
|
export { default as Chart } from './charts/Chart.svelte';
|
|
54
56
|
export { default as FileUpload } from './elements/file-upload/FileUpload.svelte';
|
|
55
57
|
export { default as FilesPreview } from './elements/file-upload/FilesPreview.svelte';
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '../../helper/cls.js';
|
|
3
|
+
import { metricCard } from './metric-card.js';
|
|
4
|
+
import type { MetricCardProps } from '../../index.js';
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
title,
|
|
8
|
+
value,
|
|
9
|
+
details = [],
|
|
10
|
+
percent,
|
|
11
|
+
primaryColor = 'text-green-700',
|
|
12
|
+
secondaryColor = 'text-red-600',
|
|
13
|
+
class: className = ''
|
|
14
|
+
}: MetricCardProps = $props();
|
|
15
|
+
|
|
16
|
+
// Get the first two details for the breakdown display
|
|
17
|
+
const primaryDetail = $derived(details[0]);
|
|
18
|
+
const secondaryDetail = $derived(details[1]);
|
|
19
|
+
|
|
20
|
+
const { base, title: titleSlot, value: valueSlot, detail: detailSlot, progress: progressSlot } = $derived(
|
|
21
|
+
metricCard()
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
const baseClasses = $derived(cn(base(), className));
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<div class={baseClasses}>
|
|
28
|
+
<div class={titleSlot()}>{title}</div>
|
|
29
|
+
<div class={valueSlot()}>
|
|
30
|
+
{typeof value === 'number' ? value.toLocaleString('de-DE') : value}
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
{#if primaryDetail}
|
|
34
|
+
<div class={cn(detailSlot(), primaryColor)}>
|
|
35
|
+
<span>{primaryDetail.label}</span>
|
|
36
|
+
<span class="font-medium">
|
|
37
|
+
{primaryDetail.value}
|
|
38
|
+
</span>
|
|
39
|
+
</div>
|
|
40
|
+
{/if}
|
|
41
|
+
|
|
42
|
+
{#if secondaryDetail}
|
|
43
|
+
<div class={cn(detailSlot(), secondaryColor)}>
|
|
44
|
+
<span>{secondaryDetail.label}</span>
|
|
45
|
+
<span class="font-medium">
|
|
46
|
+
{secondaryDetail.value}
|
|
47
|
+
</span>
|
|
48
|
+
</div>
|
|
49
|
+
{/if}
|
|
50
|
+
|
|
51
|
+
{#if percent !== undefined}
|
|
52
|
+
<div class={progressSlot()}>
|
|
53
|
+
<div
|
|
54
|
+
class="h-2 rounded-full bg-green-500"
|
|
55
|
+
style="width: {Math.min(100, percent)}%"
|
|
56
|
+
></div>
|
|
57
|
+
</div>
|
|
58
|
+
{/if}
|
|
59
|
+
</div>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export declare const metricCard: import("tailwind-variants").TVReturnType<{
|
|
2
|
+
[key: string]: {
|
|
3
|
+
[key: string]: import("tailwind-merge").ClassNameValue | {
|
|
4
|
+
base?: import("tailwind-merge").ClassNameValue;
|
|
5
|
+
value?: import("tailwind-merge").ClassNameValue;
|
|
6
|
+
title?: import("tailwind-merge").ClassNameValue;
|
|
7
|
+
progress?: import("tailwind-merge").ClassNameValue;
|
|
8
|
+
detail?: import("tailwind-merge").ClassNameValue;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
} | {
|
|
12
|
+
[x: string]: {
|
|
13
|
+
[x: string]: import("tailwind-merge").ClassNameValue | {
|
|
14
|
+
base?: import("tailwind-merge").ClassNameValue;
|
|
15
|
+
value?: import("tailwind-merge").ClassNameValue;
|
|
16
|
+
title?: import("tailwind-merge").ClassNameValue;
|
|
17
|
+
progress?: import("tailwind-merge").ClassNameValue;
|
|
18
|
+
detail?: import("tailwind-merge").ClassNameValue;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
} | {}, {
|
|
22
|
+
base: string;
|
|
23
|
+
title: string;
|
|
24
|
+
value: string;
|
|
25
|
+
detail: string;
|
|
26
|
+
progress: string;
|
|
27
|
+
}, undefined, {
|
|
28
|
+
[key: string]: {
|
|
29
|
+
[key: string]: import("tailwind-merge").ClassNameValue | {
|
|
30
|
+
base?: import("tailwind-merge").ClassNameValue;
|
|
31
|
+
value?: import("tailwind-merge").ClassNameValue;
|
|
32
|
+
title?: import("tailwind-merge").ClassNameValue;
|
|
33
|
+
progress?: import("tailwind-merge").ClassNameValue;
|
|
34
|
+
detail?: import("tailwind-merge").ClassNameValue;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
} | {}, {
|
|
38
|
+
base: string;
|
|
39
|
+
title: string;
|
|
40
|
+
value: string;
|
|
41
|
+
detail: string;
|
|
42
|
+
progress: string;
|
|
43
|
+
}, import("tailwind-variants").TVReturnType<unknown, {
|
|
44
|
+
base: string;
|
|
45
|
+
title: string;
|
|
46
|
+
value: string;
|
|
47
|
+
detail: string;
|
|
48
|
+
progress: string;
|
|
49
|
+
}, undefined, unknown, unknown, undefined>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
export const metricCard = tv({
|
|
3
|
+
slots: {
|
|
4
|
+
base: 'border-default-200 rounded-xl border bg-white p-6 shadow-sm',
|
|
5
|
+
title: 'text-default-500 text-sm',
|
|
6
|
+
value: 'text-default-900 mt-2 text-3xl font-bold',
|
|
7
|
+
detail: 'mt-2 flex justify-between text-xs',
|
|
8
|
+
progress: 'mt-2 h-2 w-full rounded-full bg-gray-200'
|
|
9
|
+
}
|
|
10
|
+
});
|