@makolabs/ripple 0.0.1 → 0.0.3
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 +575 -8
- package/dist/adapters/storage/BaseAdapter.d.ts +20 -0
- package/dist/adapters/storage/BaseAdapter.js +171 -0
- package/dist/adapters/storage/S3Adapter.d.ts +21 -0
- package/dist/adapters/storage/S3Adapter.js +194 -0
- package/dist/adapters/storage/index.d.ts +3 -0
- package/dist/adapters/storage/index.js +3 -0
- package/dist/adapters/storage/types.d.ts +102 -0
- package/dist/adapters/storage/types.js +4 -0
- package/dist/button/Button.svelte +48 -0
- package/dist/button/Button.svelte.d.ts +4 -0
- package/dist/button/button.d.ts +113 -0
- package/dist/button/button.js +168 -0
- package/dist/charts/Chart.svelte +545 -0
- package/dist/charts/Chart.svelte.d.ts +4 -0
- package/dist/drawer/Drawer.svelte +224 -0
- package/dist/drawer/Drawer.svelte.d.ts +4 -0
- package/dist/drawer/drawer.d.ts +160 -0
- package/dist/drawer/drawer.js +80 -0
- package/dist/elements/accordion/Accordion.svelte +98 -0
- package/dist/elements/accordion/Accordion.svelte.d.ts +4 -0
- package/dist/elements/accordion/accordion.d.ts +227 -0
- package/dist/elements/accordion/accordion.js +138 -0
- package/dist/elements/alert/Alert.svelte +57 -0
- package/dist/elements/alert/Alert.svelte.d.ts +4 -0
- package/dist/elements/badge/Badge.svelte +43 -0
- package/dist/elements/badge/Badge.svelte.d.ts +4 -0
- package/dist/elements/badge/badge.d.ts +181 -0
- package/dist/elements/badge/badge.js +65 -0
- package/dist/elements/dropdown/Dropdown.svelte +234 -0
- package/dist/elements/dropdown/Dropdown.svelte.d.ts +4 -0
- package/dist/elements/dropdown/Select.svelte +333 -0
- package/dist/elements/dropdown/Select.svelte.d.ts +4 -0
- package/dist/elements/dropdown/dropdown.d.ts +251 -0
- package/dist/elements/dropdown/dropdown.js +95 -0
- package/dist/elements/dropdown/select.d.ts +200 -0
- package/dist/elements/dropdown/select.js +82 -0
- package/dist/elements/file-upload/FileUpload.svelte +135 -0
- package/dist/elements/file-upload/FileUpload.svelte.d.ts +4 -0
- package/dist/elements/file-upload/FilesPreview.svelte +93 -0
- package/dist/elements/file-upload/FilesPreview.svelte.d.ts +4 -0
- package/dist/elements/progress/Progress.svelte +145 -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/file-browser/FileBrowser.svelte +877 -0
- package/dist/file-browser/FileBrowser.svelte.d.ts +14 -0
- package/dist/file-browser/index.d.ts +1 -0
- package/dist/file-browser/index.js +1 -0
- package/dist/filters/CompactFilters.svelte +147 -0
- package/dist/filters/CompactFilters.svelte.d.ts +4 -0
- package/dist/filters/index.d.ts +1 -0
- package/dist/filters/index.js +1 -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 +73 -0
- package/dist/header/Breadcrumbs.svelte.d.ts +4 -0
- package/dist/header/PageHeader.svelte +68 -0
- package/dist/header/PageHeader.svelte.d.ts +4 -0
- package/dist/header/breadcrumbs.d.ts +226 -0
- package/dist/header/breadcrumbs.js +87 -0
- package/dist/helper/cls.d.ts +1 -0
- package/dist/helper/cls.js +4 -0
- package/dist/helper/date.d.ts +7 -0
- package/dist/helper/date.js +15 -0
- package/dist/helper/nav.svelte.d.ts +6 -0
- package/dist/helper/nav.svelte.js +23 -0
- package/dist/index.d.ts +856 -1
- package/dist/index.js +78 -1
- package/dist/layout/card/Card.svelte +41 -0
- package/dist/layout/card/Card.svelte.d.ts +4 -0
- package/dist/layout/card/MetricCard.svelte +64 -0
- package/dist/layout/card/MetricCard.svelte.d.ts +4 -0
- package/dist/layout/card/StatsCard.svelte +266 -0
- package/dist/layout/card/StatsCard.svelte.d.ts +4 -0
- package/dist/layout/card/card.d.ts +128 -0
- package/dist/layout/card/card.js +51 -0
- package/dist/layout/card/metric-card.d.ts +49 -0
- package/dist/layout/card/metric-card.js +10 -0
- package/dist/layout/card/stats-card.d.ts +191 -0
- package/dist/layout/card/stats-card.js +73 -0
- package/dist/layout/navbar/Navbar.svelte +206 -0
- package/dist/layout/navbar/Navbar.svelte.d.ts +4 -0
- package/dist/layout/navbar/navbar.d.ts +205 -0
- package/dist/layout/navbar/navbar.js +98 -0
- package/dist/layout/sidebar/NavGroup.svelte +91 -0
- package/dist/layout/sidebar/NavGroup.svelte.d.ts +4 -0
- package/dist/layout/sidebar/NavItem.svelte +29 -0
- package/dist/layout/sidebar/NavItem.svelte.d.ts +4 -0
- package/dist/layout/sidebar/Sidebar.svelte +193 -0
- package/dist/layout/sidebar/Sidebar.svelte.d.ts +4 -0
- package/dist/layout/table/Cells.svelte +111 -0
- package/dist/layout/table/Cells.svelte.d.ts +27 -0
- package/dist/layout/table/Table.svelte +790 -0
- package/dist/layout/table/Table.svelte.d.ts +4 -0
- package/dist/layout/table/table.d.ts +256 -0
- package/dist/layout/table/table.js +141 -0
- package/dist/layout/tabs/Tab.svelte +60 -0
- package/dist/layout/tabs/Tab.svelte.d.ts +4 -0
- package/dist/layout/tabs/TabContent.svelte +30 -0
- package/dist/layout/tabs/TabContent.svelte.d.ts +4 -0
- package/dist/layout/tabs/TabGroup.svelte +62 -0
- package/dist/layout/tabs/TabGroup.svelte.d.ts +4 -0
- package/dist/layout/tabs/tabs.d.ts +140 -0
- package/dist/layout/tabs/tabs.js +298 -0
- package/dist/modal/Modal.svelte +207 -0
- package/dist/modal/Modal.svelte.d.ts +4 -0
- package/dist/modal/modal.d.ts +211 -0
- package/dist/modal/modal.js +81 -0
- package/dist/sonner/sonner.svelte +13 -0
- package/dist/sonner/sonner.svelte.d.ts +4 -0
- package/dist/types/variants.d.ts +1 -0
- package/dist/types/variants.js +1 -0
- package/dist/utils/Portal.svelte +108 -0
- package/dist/utils/Portal.svelte.d.ts +8 -0
- package/dist/utils/dateUtils.d.ts +7 -0
- package/dist/utils/dateUtils.js +26 -0
- package/dist/variants.d.ts +30 -0
- package/dist/variants.js +36 -0
- package/package.json +39 -6
- package/dist/layout/Card.svelte +0 -179
- package/dist/layout/Card.svelte.d.ts +0 -208
- package/dist/layout/index.d.ts +0 -1
- package/dist/layout/index.js +0 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
export const modal = tv({
|
|
3
|
+
slots: {
|
|
4
|
+
base: 'fixed inset-0 z-50 flex items-center justify-center overflow-y-auto',
|
|
5
|
+
backdrop: 'fixed inset-0 transition-opacity bg-black/50',
|
|
6
|
+
contentWrapper: 'absolute transform overflow-hidden transition-all px-2',
|
|
7
|
+
content: 'bg-white overflow-hidden rounded-lg',
|
|
8
|
+
header: 'px-4 py-3 flex items-center justify-between border-b border-default-200',
|
|
9
|
+
body: 'px-3 py-2 max-h-[70dvh] overflow-y-auto',
|
|
10
|
+
title: 'text-default-900 leading-6 text-base font-semibold',
|
|
11
|
+
closeButton: 'text-default-400 hover:text-default-500 rounded-md cursor-pointer'
|
|
12
|
+
},
|
|
13
|
+
variants: {
|
|
14
|
+
open: {
|
|
15
|
+
true: {
|
|
16
|
+
base: 'visible',
|
|
17
|
+
backdrop: 'visible opacity-100',
|
|
18
|
+
contentWrapper: 'visible scale-100 opacity-100'
|
|
19
|
+
},
|
|
20
|
+
false: {
|
|
21
|
+
base: 'invisible',
|
|
22
|
+
backdrop: 'invisible opacity-0',
|
|
23
|
+
contentWrapper: 'invisible scale-95 opacity-0'
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
position: {
|
|
27
|
+
center: {
|
|
28
|
+
contentWrapper: 'mx-auto'
|
|
29
|
+
},
|
|
30
|
+
top: {
|
|
31
|
+
contentWrapper: 'mx-auto top-7'
|
|
32
|
+
},
|
|
33
|
+
bottom: {
|
|
34
|
+
contentWrapper: 'mx-auto bottom-7'
|
|
35
|
+
},
|
|
36
|
+
left: {
|
|
37
|
+
contentWrapper: 'left-7'
|
|
38
|
+
},
|
|
39
|
+
right: {
|
|
40
|
+
contentWrapper: 'right-7'
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
size: {
|
|
44
|
+
xs: {
|
|
45
|
+
contentWrapper: 'w-full max-w-xs'
|
|
46
|
+
},
|
|
47
|
+
sm: {
|
|
48
|
+
contentWrapper: 'w-full max-w-sm'
|
|
49
|
+
},
|
|
50
|
+
base: {
|
|
51
|
+
contentWrapper: 'w-full max-w-md'
|
|
52
|
+
},
|
|
53
|
+
lg: {
|
|
54
|
+
contentWrapper: 'w-full max-w-lg'
|
|
55
|
+
},
|
|
56
|
+
xl: {
|
|
57
|
+
contentWrapper: 'w-full max-w-xl'
|
|
58
|
+
},
|
|
59
|
+
'2xl': {
|
|
60
|
+
contentWrapper: 'w-full max-w-2xl'
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
border: {
|
|
64
|
+
none: {
|
|
65
|
+
content: 'border-0'
|
|
66
|
+
},
|
|
67
|
+
default: {
|
|
68
|
+
content: 'border border-default-200'
|
|
69
|
+
},
|
|
70
|
+
colored: {
|
|
71
|
+
content: 'border'
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
defaultVariants: {
|
|
76
|
+
open: false,
|
|
77
|
+
position: 'center',
|
|
78
|
+
size: 'base',
|
|
79
|
+
color: 'default'
|
|
80
|
+
}
|
|
81
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onMount, onDestroy, type Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Target element to mount the portal content to
|
|
6
|
+
* Defaults to document.body
|
|
7
|
+
*/
|
|
8
|
+
let { target, children }: { target?: HTMLElement | null; children: Snippet } = $props();
|
|
9
|
+
|
|
10
|
+
let ref: HTMLElement;
|
|
11
|
+
let portal: HTMLElement;
|
|
12
|
+
let animationFrameId: number;
|
|
13
|
+
let isPositioned = $state(false);
|
|
14
|
+
|
|
15
|
+
// Position update without animation - for immediate positioning
|
|
16
|
+
function updatePosition() {
|
|
17
|
+
if (!ref || !target) return;
|
|
18
|
+
|
|
19
|
+
const { top, left, width, height } = target.getBoundingClientRect();
|
|
20
|
+
const scrollY = window.scrollY || document.documentElement.scrollTop;
|
|
21
|
+
const scrollX = window.scrollX || document.documentElement.scrollLeft;
|
|
22
|
+
|
|
23
|
+
// Set instant positioning without transitions for first render
|
|
24
|
+
if (!isPositioned) {
|
|
25
|
+
ref.style.position = 'absolute';
|
|
26
|
+
ref.style.width = `${width}px`;
|
|
27
|
+
ref.style.zIndex = '10000'; // Ensure the highest z-index
|
|
28
|
+
ref.style.top = `${height}px`; // Position below the target
|
|
29
|
+
ref.style.left = '0px';
|
|
30
|
+
ref.style.transform = `translate(${left + scrollX}px, ${top + scrollY}px)`;
|
|
31
|
+
ref.style.visibility = 'hidden'; // Keep hidden until fully positioned
|
|
32
|
+
|
|
33
|
+
// Wait for next frame to ensure positioning is applied before showing
|
|
34
|
+
animationFrameId = requestAnimationFrame(() => {
|
|
35
|
+
ref.style.opacity = '1';
|
|
36
|
+
ref.style.visibility = 'visible';
|
|
37
|
+
isPositioned = true;
|
|
38
|
+
|
|
39
|
+
// Now add transition for subsequent updates
|
|
40
|
+
ref.style.transition = 'transform 0.1s ease-out';
|
|
41
|
+
});
|
|
42
|
+
} else {
|
|
43
|
+
// For subsequent updates, smoothly transition
|
|
44
|
+
ref.style.transform = `translate(${left + scrollX}px, ${top + scrollY}px)`;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Handle scroll and resize with animation frames for smooth updates
|
|
49
|
+
function handlePositionUpdate() {
|
|
50
|
+
if (animationFrameId) {
|
|
51
|
+
cancelAnimationFrame(animationFrameId);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
animationFrameId = requestAnimationFrame(updatePosition);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
onMount(() => {
|
|
58
|
+
// Create portal container
|
|
59
|
+
portal = document.createElement('div');
|
|
60
|
+
portal.className = 'ripple-portal';
|
|
61
|
+
portal.style.position = 'fixed';
|
|
62
|
+
portal.style.zIndex = '10000'; // Ensure highest z-index
|
|
63
|
+
portal.style.top = '0';
|
|
64
|
+
portal.style.left = '0';
|
|
65
|
+
portal.style.width = '100%';
|
|
66
|
+
portal.style.pointerEvents = 'none'; // Allow clicking through the container but not its children
|
|
67
|
+
|
|
68
|
+
// Default to document.body if no target is provided
|
|
69
|
+
const targetElement = document.body; // Always append to body for best visibility
|
|
70
|
+
targetElement.appendChild(portal);
|
|
71
|
+
|
|
72
|
+
// Move the content to the portal
|
|
73
|
+
portal.appendChild(ref);
|
|
74
|
+
|
|
75
|
+
// Allow pointer events on the content
|
|
76
|
+
ref.style.pointerEvents = 'auto';
|
|
77
|
+
|
|
78
|
+
// Initially hide the content
|
|
79
|
+
ref.style.opacity = '0';
|
|
80
|
+
|
|
81
|
+
// Position immediately - critical for first render
|
|
82
|
+
updatePosition();
|
|
83
|
+
|
|
84
|
+
// Add event listeners for position updates
|
|
85
|
+
window.addEventListener('resize', handlePositionUpdate);
|
|
86
|
+
window.addEventListener('scroll', handlePositionUpdate, true);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
onDestroy(() => {
|
|
90
|
+
// Clean up on component destruction
|
|
91
|
+
if (portal && portal.parentNode) {
|
|
92
|
+
portal.parentNode.removeChild(portal);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Clean up event listeners
|
|
96
|
+
window.removeEventListener('resize', handlePositionUpdate);
|
|
97
|
+
window.removeEventListener('scroll', handlePositionUpdate, true);
|
|
98
|
+
|
|
99
|
+
// Cancel any pending animation frame
|
|
100
|
+
if (animationFrameId) {
|
|
101
|
+
cancelAnimationFrame(animationFrameId);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
</script>
|
|
105
|
+
|
|
106
|
+
<div class="portal-content" bind:this={ref}>
|
|
107
|
+
{@render children()}
|
|
108
|
+
</div>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Snippet } from 'svelte';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
target?: HTMLElement | null;
|
|
4
|
+
children: Snippet;
|
|
5
|
+
};
|
|
6
|
+
declare const Portal: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
7
|
+
type Portal = ReturnType<typeof Portal>;
|
|
8
|
+
export default Portal;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format a date to a specific format
|
|
3
|
+
* @param date - Date to format
|
|
4
|
+
* @param format - Format string (default: 'YYYY-MM-DD')
|
|
5
|
+
* @returns Formatted date string
|
|
6
|
+
*/
|
|
7
|
+
export declare function formatDate(date: Date | string | number, formatStr?: string): string;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format a date to a specific format
|
|
3
|
+
* @param date - Date to format
|
|
4
|
+
* @param format - Format string (default: 'YYYY-MM-DD')
|
|
5
|
+
* @returns Formatted date string
|
|
6
|
+
*/
|
|
7
|
+
export function formatDate(date, formatStr = 'DD.MM.YYYY HH:mm') {
|
|
8
|
+
const d = new Date(date);
|
|
9
|
+
if (isNaN(d.getTime())) {
|
|
10
|
+
return 'Invalid Date';
|
|
11
|
+
}
|
|
12
|
+
// Simple format implementation for common patterns
|
|
13
|
+
const day = d.getDate().toString().padStart(2, '0');
|
|
14
|
+
const month = (d.getMonth() + 1).toString().padStart(2, '0');
|
|
15
|
+
const year = d.getFullYear();
|
|
16
|
+
const hours = d.getHours().toString().padStart(2, '0');
|
|
17
|
+
const minutes = d.getMinutes().toString().padStart(2, '0');
|
|
18
|
+
const seconds = d.getSeconds().toString().padStart(2, '0');
|
|
19
|
+
return formatStr
|
|
20
|
+
.replace('DD', day)
|
|
21
|
+
.replace('MM', month)
|
|
22
|
+
.replace('YYYY', year.toString())
|
|
23
|
+
.replace('HH', hours)
|
|
24
|
+
.replace('mm', minutes)
|
|
25
|
+
.replace('ss', seconds);
|
|
26
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ChartColors, VariantColors, VariantSizes } from './index.js';
|
|
2
|
+
export declare const Color: {
|
|
3
|
+
DEFAULT: string;
|
|
4
|
+
PRIMARY: string;
|
|
5
|
+
SECONDARY: string;
|
|
6
|
+
INFO: string;
|
|
7
|
+
SUCCESS: string;
|
|
8
|
+
WARNING: string;
|
|
9
|
+
DANGER: string;
|
|
10
|
+
};
|
|
11
|
+
export declare const Size: {
|
|
12
|
+
XS: string;
|
|
13
|
+
SM: string;
|
|
14
|
+
BASE: string;
|
|
15
|
+
LG: string;
|
|
16
|
+
XL: string;
|
|
17
|
+
XXL: string;
|
|
18
|
+
};
|
|
19
|
+
export declare const ChartColor: {
|
|
20
|
+
readonly HEALTH: "health";
|
|
21
|
+
readonly PROPERTY: "property";
|
|
22
|
+
readonly AUTO: "auto";
|
|
23
|
+
readonly LIFE: "life";
|
|
24
|
+
readonly OTHER: "other";
|
|
25
|
+
readonly DEFAULT: "default";
|
|
26
|
+
};
|
|
27
|
+
export declare const defaultChartColors: ChartColors;
|
|
28
|
+
export declare const colors: VariantColors[];
|
|
29
|
+
export declare const sizes: VariantSizes[];
|
|
30
|
+
export declare const chartColors: ("default" | "health" | "property" | "auto" | "life" | "other")[];
|
package/dist/variants.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export const Color = {
|
|
2
|
+
DEFAULT: 'default',
|
|
3
|
+
PRIMARY: 'primary',
|
|
4
|
+
SECONDARY: 'secondary',
|
|
5
|
+
INFO: 'info',
|
|
6
|
+
SUCCESS: 'success',
|
|
7
|
+
WARNING: 'warning',
|
|
8
|
+
DANGER: 'danger'
|
|
9
|
+
};
|
|
10
|
+
export const Size = {
|
|
11
|
+
XS: 'xs',
|
|
12
|
+
SM: 'sm',
|
|
13
|
+
BASE: 'base',
|
|
14
|
+
LG: 'lg',
|
|
15
|
+
XL: 'xl',
|
|
16
|
+
XXL: '2xl'
|
|
17
|
+
};
|
|
18
|
+
export const ChartColor = {
|
|
19
|
+
HEALTH: 'health',
|
|
20
|
+
PROPERTY: 'property',
|
|
21
|
+
AUTO: 'auto',
|
|
22
|
+
LIFE: 'life',
|
|
23
|
+
OTHER: 'other',
|
|
24
|
+
DEFAULT: 'default'
|
|
25
|
+
};
|
|
26
|
+
export const defaultChartColors = {
|
|
27
|
+
[ChartColor.HEALTH]: '#1F69FF',
|
|
28
|
+
[ChartColor.PROPERTY]: '#2D9D78',
|
|
29
|
+
[ChartColor.AUTO]: '#E8A317',
|
|
30
|
+
[ChartColor.LIFE]: '#E34974',
|
|
31
|
+
[ChartColor.OTHER]: '#7B3FE4',
|
|
32
|
+
[ChartColor.DEFAULT]: '#6B7280'
|
|
33
|
+
};
|
|
34
|
+
export const colors = Object.values(Color);
|
|
35
|
+
export const sizes = Object.values(Size);
|
|
36
|
+
export const chartColors = Object.values(ChartColor);
|
package/package.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@makolabs/ripple",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"description": "Simple Svelte 5 powered component library ✨",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/makolabsai/ripple-ui.git"
|
|
8
|
+
},
|
|
4
9
|
"scripts": {
|
|
5
10
|
"dev": "vite dev",
|
|
6
11
|
"build": "vite build && npm run prepack",
|
|
@@ -13,7 +18,8 @@
|
|
|
13
18
|
"lint": "prettier --check . && eslint .",
|
|
14
19
|
"test:unit": "vitest",
|
|
15
20
|
"test": "npm run test:unit -- --run && npm run test:e2e",
|
|
16
|
-
"test:e2e": "playwright test"
|
|
21
|
+
"test:e2e": "playwright test",
|
|
22
|
+
"uplish": "git add . && git commit -m \"chore: prepare for publish\" && npm version patch && git push --follow-tags && npm publish"
|
|
17
23
|
},
|
|
18
24
|
"files": [
|
|
19
25
|
"dist",
|
|
@@ -43,9 +49,10 @@
|
|
|
43
49
|
"@sveltejs/kit": "^2.16.0",
|
|
44
50
|
"@sveltejs/package": "^2.0.0",
|
|
45
51
|
"@sveltejs/vite-plugin-svelte": "^5.0.0",
|
|
46
|
-
"@tailwindcss/vite": "^4.0.
|
|
52
|
+
"@tailwindcss/vite": "^4.0.14",
|
|
47
53
|
"@testing-library/jest-dom": "^6.6.3",
|
|
48
54
|
"@testing-library/svelte": "^5.2.4",
|
|
55
|
+
"@types/node": "^22.13.10",
|
|
49
56
|
"eslint": "^9.18.0",
|
|
50
57
|
"eslint-config-prettier": "^10.0.1",
|
|
51
58
|
"eslint-plugin-svelte": "^3.0.0",
|
|
@@ -57,17 +64,43 @@
|
|
|
57
64
|
"publint": "^0.3.2",
|
|
58
65
|
"svelte": "^5.0.0",
|
|
59
66
|
"svelte-check": "^4.0.0",
|
|
67
|
+
"sveltekit-superforms": "^2.24.0",
|
|
60
68
|
"tailwindcss": "^4.0.0",
|
|
61
69
|
"typescript": "^5.0.0",
|
|
62
70
|
"typescript-eslint": "^8.20.0",
|
|
63
71
|
"vite": "^6.0.0",
|
|
64
|
-
"vitest": "^3.0.0"
|
|
72
|
+
"vitest": "^3.0.0",
|
|
73
|
+
"zod": "^3.24.2"
|
|
65
74
|
},
|
|
66
75
|
"keywords": [
|
|
67
|
-
"svelte"
|
|
76
|
+
"svelte",
|
|
77
|
+
"ui",
|
|
78
|
+
"svelte5",
|
|
79
|
+
"modal",
|
|
80
|
+
"navigation",
|
|
81
|
+
"ripple",
|
|
82
|
+
"button",
|
|
83
|
+
"sidebar",
|
|
84
|
+
"card",
|
|
85
|
+
"select",
|
|
86
|
+
"tooltip",
|
|
87
|
+
"accordion",
|
|
88
|
+
"tabs",
|
|
89
|
+
"alert",
|
|
90
|
+
"badge",
|
|
91
|
+
"breadcrumb",
|
|
92
|
+
"carousel",
|
|
93
|
+
"collapse",
|
|
94
|
+
"list-group",
|
|
95
|
+
"pagination",
|
|
96
|
+
"progress",
|
|
97
|
+
"spinner",
|
|
98
|
+
"toast"
|
|
68
99
|
],
|
|
69
100
|
"dependencies": {
|
|
70
|
-
"
|
|
101
|
+
"dayjs": "^1.11.13",
|
|
102
|
+
"echarts": "^5.6.0",
|
|
103
|
+
"svelte-sonner": "^0.3.28",
|
|
71
104
|
"tailwind-merge": "^3.0.2",
|
|
72
105
|
"tailwind-variants": "^1.0.0"
|
|
73
106
|
}
|
package/dist/layout/Card.svelte
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
import { cn } from '../helper/cls';
|
|
3
|
-
import type { Snippet } from 'svelte';
|
|
4
|
-
import { tv, type ClassValue } from 'tailwind-variants';
|
|
5
|
-
|
|
6
|
-
const cardVariants = tv({
|
|
7
|
-
variants: {
|
|
8
|
-
size: {
|
|
9
|
-
'xs': 'p-2',
|
|
10
|
-
'sm': 'p-3',
|
|
11
|
-
'base': 'p-4',
|
|
12
|
-
'lg': 'p-5',
|
|
13
|
-
'xl': 'p-6',
|
|
14
|
-
'2xl': 'p-8'
|
|
15
|
-
},
|
|
16
|
-
color: {
|
|
17
|
-
'default': 'bg-default-50 dark:bg-default-800',
|
|
18
|
-
'primary': 'bg-primary-50 dark:bg-primary-900/20',
|
|
19
|
-
'secondary': 'bg-secondary-50 dark:bg-secondary-800/20',
|
|
20
|
-
'info': 'bg-info-50 dark:bg-info-900/20',
|
|
21
|
-
'success': 'bg-success-50 dark:bg-success-900/20',
|
|
22
|
-
'warning': 'bg-warning-50 dark:bg-warning-900/20',
|
|
23
|
-
'danger': 'bg-danger-50 dark:bg-danger-900/20'
|
|
24
|
-
},
|
|
25
|
-
border: {
|
|
26
|
-
'none': 'border-0',
|
|
27
|
-
'default': 'border border-gray-200 dark:border-gray-700',
|
|
28
|
-
'colored': 'border'
|
|
29
|
-
},
|
|
30
|
-
rounded: {
|
|
31
|
-
'none': 'rounded-none',
|
|
32
|
-
'sm': 'rounded',
|
|
33
|
-
'md': 'rounded-lg',
|
|
34
|
-
'lg': 'rounded-xl',
|
|
35
|
-
'full': 'rounded-3xl'
|
|
36
|
-
},
|
|
37
|
-
shadow: {
|
|
38
|
-
'none': 'shadow-none',
|
|
39
|
-
'sm': 'shadow-sm',
|
|
40
|
-
'md': 'shadow',
|
|
41
|
-
'lg': 'shadow-lg'
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
defaultVariants: {
|
|
45
|
-
size: 'base',
|
|
46
|
-
color: 'default',
|
|
47
|
-
border: 'default',
|
|
48
|
-
rounded: 'md',
|
|
49
|
-
shadow: 'sm'
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
const SIZE_TEXT_VARIANTS = {
|
|
54
|
-
'xs': 'text-xs',
|
|
55
|
-
'sm': 'text-sm',
|
|
56
|
-
'base': 'text-base',
|
|
57
|
-
'lg': 'text-lg',
|
|
58
|
-
'xl': 'text-xl',
|
|
59
|
-
'2xl': 'text-2xl'
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
const cardTitleVariants = tv({
|
|
63
|
-
variants: {
|
|
64
|
-
color: {
|
|
65
|
-
'default': 'text-default-900 dark:text-default-100',
|
|
66
|
-
'primary': 'text-primary-900 dark:text-primary-100',
|
|
67
|
-
'secondary': 'text-secondary-900 dark:text-secondary-100',
|
|
68
|
-
'info': 'text-info-900 dark:text-info-100',
|
|
69
|
-
'success': 'text-success-900 dark:text-success-100',
|
|
70
|
-
'warning': 'text-warning-900 dark:text-warning-100',
|
|
71
|
-
'danger': 'text-danger-900 dark:text-danger-100'
|
|
72
|
-
},
|
|
73
|
-
weight: {
|
|
74
|
-
'normal': 'font-normal',
|
|
75
|
-
'medium': 'font-medium',
|
|
76
|
-
'semibold': 'font-semibold',
|
|
77
|
-
'bold': 'font-bold'
|
|
78
|
-
},
|
|
79
|
-
size: SIZE_TEXT_VARIANTS
|
|
80
|
-
},
|
|
81
|
-
defaultVariants: {
|
|
82
|
-
color: 'default',
|
|
83
|
-
weight: 'semibold',
|
|
84
|
-
size: 'base'
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
const cardBodyVariants = tv({
|
|
89
|
-
variants: {
|
|
90
|
-
color: {
|
|
91
|
-
'default': 'text-default-700 dark:text-default-300',
|
|
92
|
-
'primary': 'text-primary-700 dark:text-primary-300',
|
|
93
|
-
'secondary': 'text-secondary-700 dark:text-secondary-300',
|
|
94
|
-
'info': 'text-info-700 dark:text-info-300',
|
|
95
|
-
'success': 'text-success-700 dark:text-success-300',
|
|
96
|
-
'warning': 'text-warning-700 dark:text-warning-300',
|
|
97
|
-
'danger': 'text-danger-700 dark:text-danger-300'
|
|
98
|
-
},
|
|
99
|
-
size: SIZE_TEXT_VARIANTS
|
|
100
|
-
},
|
|
101
|
-
defaultVariants: {
|
|
102
|
-
color: 'default',
|
|
103
|
-
size: 'base'
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
export type BaseCardProps = {
|
|
109
|
-
class?: ClassValue
|
|
110
|
-
containerClass?: ClassValue
|
|
111
|
-
size?: keyof typeof cardVariants.variants.size
|
|
112
|
-
color?: keyof typeof cardVariants.variants.color
|
|
113
|
-
border?: keyof typeof cardVariants.variants.border
|
|
114
|
-
rounded?: keyof typeof cardVariants.variants.rounded
|
|
115
|
-
shadow?: keyof typeof cardVariants.variants.shadow;
|
|
116
|
-
titleWeight?: keyof typeof cardTitleVariants.variants.weight
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
type CustomCardProps = {
|
|
120
|
-
custom: Snippet
|
|
121
|
-
children?: never
|
|
122
|
-
title?: never
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
type CardWithChildrenProps = {
|
|
126
|
-
children: Snippet
|
|
127
|
-
custom?: never
|
|
128
|
-
title?: string
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
export type CardProps = BaseCardProps & (CardWithChildrenProps | CustomCardProps);
|
|
132
|
-
</script>
|
|
133
|
-
|
|
134
|
-
<script lang="ts">
|
|
135
|
-
let {
|
|
136
|
-
children,
|
|
137
|
-
custom,
|
|
138
|
-
title,
|
|
139
|
-
size = 'base',
|
|
140
|
-
color = 'default',
|
|
141
|
-
border = 'default',
|
|
142
|
-
rounded = 'md',
|
|
143
|
-
shadow = 'sm',
|
|
144
|
-
class: className = '',
|
|
145
|
-
titleWeight = 'semibold'
|
|
146
|
-
}: CardProps = $props();
|
|
147
|
-
|
|
148
|
-
const cardClasses = $derived(
|
|
149
|
-
cn(
|
|
150
|
-
cardVariants({ size, color, border, rounded, shadow }),
|
|
151
|
-
className
|
|
152
|
-
)
|
|
153
|
-
);
|
|
154
|
-
|
|
155
|
-
const cardTitleClasses = $derived(
|
|
156
|
-
cn(
|
|
157
|
-
cardTitleVariants({ color: color, weight: titleWeight, size })
|
|
158
|
-
)
|
|
159
|
-
);
|
|
160
|
-
|
|
161
|
-
const cardBodyClasses = $derived(
|
|
162
|
-
cn(
|
|
163
|
-
cardBodyVariants({ color: color, size })
|
|
164
|
-
)
|
|
165
|
-
);
|
|
166
|
-
</script>
|
|
167
|
-
|
|
168
|
-
<div class={cardClasses}>
|
|
169
|
-
{#if children}
|
|
170
|
-
{#if title}
|
|
171
|
-
<h3 class={cardTitleClasses}>{title}</h3>
|
|
172
|
-
{/if}
|
|
173
|
-
<div class={cardBodyClasses}>
|
|
174
|
-
{@render children()}
|
|
175
|
-
</div>
|
|
176
|
-
{:else if custom}
|
|
177
|
-
{@render custom()}
|
|
178
|
-
{/if}
|
|
179
|
-
</div>
|