@makolabs/ripple 0.0.1-dev.2 → 0.0.1-dev.4

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 (102) hide show
  1. package/README.md +229 -96
  2. package/dist/button/Button.svelte +46 -0
  3. package/dist/button/Button.svelte.d.ts +4 -0
  4. package/dist/button/button.d.ts +136 -0
  5. package/dist/button/button.js +167 -0
  6. package/dist/button/index.d.ts +1 -0
  7. package/dist/button/index.js +1 -0
  8. package/dist/drawer/Drawer.svelte +213 -0
  9. package/dist/drawer/Drawer.svelte.d.ts +4 -0
  10. package/dist/drawer/drawer.d.ts +177 -0
  11. package/dist/drawer/drawer.js +80 -0
  12. package/dist/drawer/index.d.ts +2 -0
  13. package/dist/drawer/index.js +1 -0
  14. package/dist/elements/badge/Badge.svelte +35 -0
  15. package/dist/elements/badge/Badge.svelte.d.ts +4 -0
  16. package/dist/elements/badge/badge.d.ts +193 -0
  17. package/dist/elements/badge/badge.js +65 -0
  18. package/dist/elements/badge/index.d.ts +2 -0
  19. package/dist/elements/badge/index.js +2 -0
  20. package/dist/elements/dropdown/Dropdown.svelte +272 -0
  21. package/dist/elements/dropdown/Dropdown.svelte.d.ts +4 -0
  22. package/dist/elements/dropdown/Select.svelte +230 -0
  23. package/dist/elements/dropdown/Select.svelte.d.ts +4 -0
  24. package/dist/elements/dropdown/dropdown.d.ts +274 -0
  25. package/dist/elements/dropdown/dropdown.js +89 -0
  26. package/dist/elements/dropdown/index.d.ts +3 -0
  27. package/dist/elements/dropdown/index.js +2 -0
  28. package/dist/elements/dropdown/select.d.ts +220 -0
  29. package/dist/elements/dropdown/select.js +74 -0
  30. package/dist/header/Breadcrumbs.svelte +72 -0
  31. package/dist/header/Breadcrumbs.svelte.d.ts +4 -0
  32. package/dist/header/PageHeader.svelte +30 -0
  33. package/dist/header/PageHeader.svelte.d.ts +4 -0
  34. package/dist/header/breadcrumbs.d.ts +220 -0
  35. package/dist/header/breadcrumbs.js +81 -0
  36. package/dist/header/index.d.ts +4 -0
  37. package/dist/header/index.js +2 -0
  38. package/dist/header/pageheaders.d.ts +10 -0
  39. package/dist/header/pageheaders.js +1 -0
  40. package/dist/helper/cls.d.ts +1 -0
  41. package/dist/helper/cls.js +4 -0
  42. package/dist/helper/nav.svelte.d.ts +6 -0
  43. package/dist/helper/nav.svelte.js +23 -0
  44. package/dist/index.d.ts +10 -1
  45. package/dist/index.js +18 -1
  46. package/dist/layout/card/Card.svelte +44 -0
  47. package/dist/layout/card/Card.svelte.d.ts +4 -0
  48. package/dist/layout/card/StatsCard.svelte +236 -0
  49. package/dist/layout/card/StatsCard.svelte.d.ts +4 -0
  50. package/dist/layout/card/card.d.ts +139 -0
  51. package/dist/layout/card/card.js +50 -0
  52. package/dist/layout/card/index.d.ts +4 -0
  53. package/dist/layout/card/index.js +2 -0
  54. package/dist/layout/card/stats-card.d.ts +208 -0
  55. package/dist/layout/card/stats-card.js +73 -0
  56. package/dist/layout/index.d.ts +7 -1
  57. package/dist/layout/index.js +7 -1
  58. package/dist/layout/navbar/Navbar.svelte +206 -0
  59. package/dist/layout/navbar/Navbar.svelte.d.ts +4 -0
  60. package/dist/layout/navbar/index.d.ts +2 -0
  61. package/dist/layout/navbar/index.js +2 -0
  62. package/dist/layout/navbar/navbar.d.ts +228 -0
  63. package/dist/layout/navbar/navbar.js +98 -0
  64. package/dist/layout/sidebar/NavGroup.svelte +101 -0
  65. package/dist/layout/sidebar/NavGroup.svelte.d.ts +4 -0
  66. package/dist/layout/sidebar/NavItem.svelte +29 -0
  67. package/dist/layout/sidebar/NavItem.svelte.d.ts +4 -0
  68. package/dist/layout/sidebar/Sidebar.svelte +145 -0
  69. package/dist/layout/sidebar/Sidebar.svelte.d.ts +4 -0
  70. package/dist/layout/sidebar/index.d.ts +2 -0
  71. package/dist/layout/sidebar/index.js +1 -0
  72. package/dist/layout/sidebar/sidebar.d.ts +46 -0
  73. package/dist/layout/sidebar/sidebar.js +1 -0
  74. package/dist/layout/table/Cells.svelte +111 -0
  75. package/dist/layout/table/Cells.svelte.d.ts +27 -0
  76. package/dist/layout/table/Table.svelte +413 -0
  77. package/dist/layout/table/Table.svelte.d.ts +4 -0
  78. package/dist/layout/table/index.d.ts +3 -0
  79. package/dist/layout/table/index.js +2 -0
  80. package/dist/layout/table/table.d.ts +303 -0
  81. package/dist/layout/table/table.js +149 -0
  82. package/dist/layout/tabs/Tab.svelte +57 -0
  83. package/dist/layout/tabs/Tab.svelte.d.ts +4 -0
  84. package/dist/layout/tabs/TabContent.svelte +31 -0
  85. package/dist/layout/tabs/TabContent.svelte.d.ts +4 -0
  86. package/dist/layout/tabs/TabGroup.svelte +57 -0
  87. package/dist/layout/tabs/TabGroup.svelte.d.ts +4 -0
  88. package/dist/layout/tabs/index.d.ts +3 -0
  89. package/dist/layout/tabs/index.js +3 -0
  90. package/dist/layout/tabs/tabs.d.ts +155 -0
  91. package/dist/layout/tabs/tabs.js +156 -0
  92. package/dist/modal/Modal.svelte +206 -0
  93. package/dist/modal/Modal.svelte.d.ts +4 -0
  94. package/dist/modal/index.d.ts +1 -0
  95. package/dist/modal/index.js +1 -0
  96. package/dist/modal/modal.d.ts +234 -0
  97. package/dist/modal/modal.js +81 -0
  98. package/dist/types/variants.d.ts +21 -0
  99. package/dist/types/variants.js +19 -0
  100. package/package.json +100 -102
  101. package/dist/layout/Card.svelte +0 -179
  102. package/dist/layout/Card.svelte.d.ts +0 -208
@@ -0,0 +1,208 @@
1
+ import type { ClassValue } from 'tailwind-variants';
2
+ import type { Snippet } from 'svelte';
3
+ import type { VariantColors } from '../../types/variants.js';
4
+ export declare const statsCard: import("tailwind-variants").TVReturnType<{
5
+ color: {
6
+ default: {
7
+ label: string;
8
+ value: string;
9
+ trend: string;
10
+ previousValue: string;
11
+ };
12
+ primary: {
13
+ label: string;
14
+ value: string;
15
+ trend: string;
16
+ previousValue: string;
17
+ };
18
+ secondary: {
19
+ label: string;
20
+ value: string;
21
+ trend: string;
22
+ previousValue: string;
23
+ };
24
+ info: {
25
+ label: string;
26
+ value: string;
27
+ trend: string;
28
+ previousValue: string;
29
+ };
30
+ success: {
31
+ label: string;
32
+ value: string;
33
+ trend: string;
34
+ previousValue: string;
35
+ };
36
+ warning: {
37
+ label: string;
38
+ value: string;
39
+ trend: string;
40
+ previousValue: string;
41
+ };
42
+ danger: {
43
+ label: string;
44
+ value: string;
45
+ trend: string;
46
+ previousValue: string;
47
+ };
48
+ };
49
+ trendDirection: {
50
+ up: {
51
+ trend: string;
52
+ };
53
+ down: {
54
+ trend: string;
55
+ };
56
+ neutral: {
57
+ trend: string;
58
+ };
59
+ };
60
+ }, {
61
+ base: string;
62
+ label: string;
63
+ value: string;
64
+ trend: string;
65
+ previousValue: string;
66
+ unit: string;
67
+ chartContainer: string;
68
+ }, undefined, {
69
+ color: {
70
+ default: {
71
+ label: string;
72
+ value: string;
73
+ trend: string;
74
+ previousValue: string;
75
+ };
76
+ primary: {
77
+ label: string;
78
+ value: string;
79
+ trend: string;
80
+ previousValue: string;
81
+ };
82
+ secondary: {
83
+ label: string;
84
+ value: string;
85
+ trend: string;
86
+ previousValue: string;
87
+ };
88
+ info: {
89
+ label: string;
90
+ value: string;
91
+ trend: string;
92
+ previousValue: string;
93
+ };
94
+ success: {
95
+ label: string;
96
+ value: string;
97
+ trend: string;
98
+ previousValue: string;
99
+ };
100
+ warning: {
101
+ label: string;
102
+ value: string;
103
+ trend: string;
104
+ previousValue: string;
105
+ };
106
+ danger: {
107
+ label: string;
108
+ value: string;
109
+ trend: string;
110
+ previousValue: string;
111
+ };
112
+ };
113
+ trendDirection: {
114
+ up: {
115
+ trend: string;
116
+ };
117
+ down: {
118
+ trend: string;
119
+ };
120
+ neutral: {
121
+ trend: string;
122
+ };
123
+ };
124
+ }, {
125
+ base: string;
126
+ label: string;
127
+ value: string;
128
+ trend: string;
129
+ previousValue: string;
130
+ unit: string;
131
+ chartContainer: string;
132
+ }, import("tailwind-variants").TVReturnType<{
133
+ color: {
134
+ default: {
135
+ label: string;
136
+ value: string;
137
+ trend: string;
138
+ previousValue: string;
139
+ };
140
+ primary: {
141
+ label: string;
142
+ value: string;
143
+ trend: string;
144
+ previousValue: string;
145
+ };
146
+ secondary: {
147
+ label: string;
148
+ value: string;
149
+ trend: string;
150
+ previousValue: string;
151
+ };
152
+ info: {
153
+ label: string;
154
+ value: string;
155
+ trend: string;
156
+ previousValue: string;
157
+ };
158
+ success: {
159
+ label: string;
160
+ value: string;
161
+ trend: string;
162
+ previousValue: string;
163
+ };
164
+ warning: {
165
+ label: string;
166
+ value: string;
167
+ trend: string;
168
+ previousValue: string;
169
+ };
170
+ danger: {
171
+ label: string;
172
+ value: string;
173
+ trend: string;
174
+ previousValue: string;
175
+ };
176
+ };
177
+ trendDirection: {
178
+ up: {
179
+ trend: string;
180
+ };
181
+ down: {
182
+ trend: string;
183
+ };
184
+ neutral: {
185
+ trend: string;
186
+ };
187
+ };
188
+ }, {
189
+ base: string;
190
+ label: string;
191
+ value: string;
192
+ trend: string;
193
+ previousValue: string;
194
+ unit: string;
195
+ chartContainer: string;
196
+ }, undefined, unknown, unknown, undefined>>;
197
+ export type StatsCardProps = {
198
+ label?: string;
199
+ value?: string | number;
200
+ previousValue?: string | number;
201
+ previousValuePrefix?: string;
202
+ trend?: number;
203
+ color?: VariantColors;
204
+ chartData?: number[];
205
+ children?: Snippet;
206
+ class?: ClassValue;
207
+ formatLargeNumbers?: boolean;
208
+ };
@@ -0,0 +1,73 @@
1
+ import { tv } from 'tailwind-variants';
2
+ export const statsCard = tv({
3
+ slots: {
4
+ base: '',
5
+ label: '',
6
+ value: '',
7
+ trend: '',
8
+ previousValue: '',
9
+ unit: '',
10
+ chartContainer: ''
11
+ },
12
+ variants: {
13
+ color: {
14
+ default: {
15
+ label: 'text-gray-500',
16
+ value: 'text-gray-900',
17
+ trend: 'text-gray-600',
18
+ previousValue: 'text-gray-500'
19
+ },
20
+ primary: {
21
+ label: 'text-primary-500',
22
+ value: 'text-primary-600',
23
+ trend: 'text-primary-600',
24
+ previousValue: 'text-primary-400'
25
+ },
26
+ secondary: {
27
+ label: 'text-secondary-500',
28
+ value: 'text-secondary-600',
29
+ trend: 'text-secondary-600',
30
+ previousValue: 'text-secondary-400'
31
+ },
32
+ info: {
33
+ label: 'text-info-500',
34
+ value: 'text-info-600',
35
+ trend: 'text-info-600',
36
+ previousValue: 'text-info-400'
37
+ },
38
+ success: {
39
+ label: 'text-success-500',
40
+ value: 'text-success-600',
41
+ trend: 'text-success-600',
42
+ previousValue: 'text-success-400'
43
+ },
44
+ warning: {
45
+ label: 'text-warning-500',
46
+ value: 'text-warning-600',
47
+ trend: 'text-warning-600',
48
+ previousValue: 'text-warning-400'
49
+ },
50
+ danger: {
51
+ label: 'text-danger-500',
52
+ value: 'text-danger-600',
53
+ trend: 'text-danger-600',
54
+ previousValue: 'text-danger-400'
55
+ }
56
+ },
57
+ trendDirection: {
58
+ up: {
59
+ trend: 'text-success-600'
60
+ },
61
+ down: {
62
+ trend: 'text-danger-600'
63
+ },
64
+ neutral: {
65
+ trend: 'text-gray-600'
66
+ }
67
+ }
68
+ },
69
+ defaultVariants: {
70
+ color: 'default',
71
+ trendDirection: 'neutral'
72
+ }
73
+ });
@@ -1 +1,7 @@
1
- export { default as Card, type CardProps } from './Card.svelte';
1
+ export { default as Card } from './card/Card.svelte';
2
+ export { default as Tab } from './tabs/Tab.svelte';
3
+ export { default as TabGroup } from './tabs/TabGroup.svelte';
4
+ export { default as Table } from './table/Table.svelte';
5
+ export { tabs, type TabItem, type TabProps, type TabsProps } from './tabs/tabs.js';
6
+ export { default as Cell } from './table/Cells.svelte';
7
+ export { default as StatsCard } from './card/StatsCard.svelte';
@@ -1 +1,7 @@
1
- export { default as Card } from './Card.svelte';
1
+ export { default as Card } from './card/Card.svelte';
2
+ export { default as Tab } from './tabs/Tab.svelte';
3
+ export { default as TabGroup } from './tabs/TabGroup.svelte';
4
+ export { default as Table } from './table/Table.svelte';
5
+ export { tabs } from './tabs/tabs.js';
6
+ export { default as Cell } from './table/Cells.svelte';
7
+ export { default as StatsCard } from './card/StatsCard.svelte';
@@ -0,0 +1,206 @@
1
+ <script lang="ts">
2
+ import { cn } from '../../helper/cls.js';
3
+ import { navbar, type NavbarProps } from './navbar.js';
4
+ import { onNavigate } from '$app/navigation';
5
+ import { isRouteActive } from '../../helper/nav.svelte.js';
6
+ import { slide } from 'svelte/transition';
7
+
8
+ let { logo, links = [], class: className = '', brand, children, actions }: NavbarProps = $props();
9
+
10
+ let mobileMenuOpen = $state(false);
11
+ let scrolled = $state(false);
12
+ let isScrollingDown = $state(false);
13
+
14
+ onNavigate(() => {
15
+ mobileMenuOpen = false;
16
+ });
17
+
18
+ const {
19
+ base,
20
+ wrapper,
21
+ container,
22
+ brand: brandSlot,
23
+ menu,
24
+ mobileMenu,
25
+ mobileMenuButton,
26
+ mobileMenuContainer,
27
+ links: linksSlot,
28
+ link,
29
+ mobileLink,
30
+ actions: actionsSlot
31
+ } = $derived(navbar());
32
+
33
+ const baseClass = $derived(
34
+ cn(base(), className, {
35
+ 'shadow-md': scrolled,
36
+ 'translate-y-0': !isScrollingDown || mobileMenuOpen,
37
+ '-translate-y-full': isScrollingDown && !mobileMenuOpen && scrolled
38
+ })
39
+ );
40
+ const wrapperClasses = $derived(cn(wrapper()));
41
+ const containerClasses = $derived(cn(container()));
42
+ const brandClasses = $derived(cn(brandSlot()));
43
+ const menuClasses = $derived(cn(menu()));
44
+ const mobileMenuClasses = $derived(cn(mobileMenu()));
45
+ const mobileMenuButtonClasses = $derived(cn(mobileMenuButton()));
46
+ const mobileMenuContainerClasses = $derived(cn(mobileMenuContainer()));
47
+ const linksClasses = $derived(cn(linksSlot()));
48
+ const linkClasses = $derived(cn(link()));
49
+ const mobileLinkClasses = $derived(cn(mobileLink()));
50
+ const actionsClasses = $derived(cn(actionsSlot()));
51
+
52
+ const processedLinks = $derived(
53
+ links.map((link) => ({
54
+ ...link,
55
+ current: isRouteActive(link.href)
56
+ }))
57
+ );
58
+
59
+ function toggleMobileMenu() {
60
+ mobileMenuOpen = !mobileMenuOpen;
61
+ }
62
+
63
+ $effect(() => {
64
+ if (typeof window !== 'undefined' && mobileMenuOpen) {
65
+ const handleEscape = (e: KeyboardEvent) => {
66
+ if (e.key === 'Escape') {
67
+ mobileMenuOpen = false;
68
+ }
69
+ };
70
+
71
+ window.addEventListener('keydown', handleEscape);
72
+
73
+ return () => {
74
+ window.removeEventListener('keydown', handleEscape);
75
+ };
76
+ }
77
+ });
78
+ </script>
79
+
80
+ <nav
81
+ class={baseClass}
82
+ aria-label="Main navigation"
83
+ class:sticky={scrolled}
84
+ class:top-0={scrolled}
85
+ class:z-10={true}
86
+ class:transition-transform={true}
87
+ class:duration-300={true}
88
+ >
89
+ <div class={wrapperClasses}>
90
+ <div class={containerClasses}>
91
+ <div class={brandClasses}>
92
+ {#if brand}
93
+ {@render brand()}
94
+ {:else if typeof logo === 'string'}
95
+ <a href="/" class="flex items-center">
96
+ <img src={logo} alt="Logo" class="h-8 w-auto" />
97
+ </a>
98
+ {:else if logo}
99
+ {@const LogoComponent = logo}
100
+ <a href="/" class="flex items-center">
101
+ <LogoComponent class="h-8 w-auto" />
102
+ </a>
103
+ {/if}
104
+ </div>
105
+
106
+ <!-- Mobile menu button -->
107
+ <div class="flex items-center sm:hidden">
108
+ <button
109
+ type="button"
110
+ class={mobileMenuButtonClasses}
111
+ aria-controls="mobile-menu"
112
+ aria-expanded={mobileMenuOpen}
113
+ onclick={toggleMobileMenu}
114
+ >
115
+ <span class="sr-only">Open main menu</span>
116
+ {#if mobileMenuOpen}
117
+ <svg
118
+ xmlns="http://www.w3.org/2000/svg"
119
+ class="h-6 w-6"
120
+ fill="none"
121
+ viewBox="0 0 24 24"
122
+ stroke="currentColor"
123
+ >
124
+ <path
125
+ stroke-linecap="round"
126
+ stroke-linejoin="round"
127
+ stroke-width="2"
128
+ d="M6 18L18 6M6 6l12 12"
129
+ />
130
+ </svg>
131
+ {:else}
132
+ <svg
133
+ xmlns="http://www.w3.org/2000/svg"
134
+ class="h-6 w-6"
135
+ fill="none"
136
+ viewBox="0 0 24 24"
137
+ stroke="currentColor"
138
+ >
139
+ <path
140
+ stroke-linecap="round"
141
+ stroke-linejoin="round"
142
+ stroke-width="2"
143
+ d="M4 6h16M4 12h16M4 18h16"
144
+ />
145
+ </svg>
146
+ {/if}
147
+ </button>
148
+ </div>
149
+
150
+ <!-- Desktop menu -->
151
+ <div class={menuClasses}>
152
+ <div class={linksClasses}>
153
+ {#each processedLinks as navItem (navItem.href)}
154
+ <a
155
+ href={navItem.href}
156
+ class={cn(linkClasses, navItem.current ? navbar({ active: true }).link() : '')}
157
+ aria-current={navItem.current ? 'page' : undefined}
158
+ >
159
+ {#if navItem.icon}
160
+ {@const Icon = navItem.icon}
161
+ <Icon class="h-4 w-4" />
162
+ {/if}
163
+ {navItem.label}
164
+ </a>
165
+ {/each}
166
+ {#if children}
167
+ {@render children()}
168
+ {/if}
169
+ </div>
170
+ </div>
171
+
172
+ {#if actions}
173
+ <div class={actionsClasses}>
174
+ {@render actions()}
175
+ </div>
176
+ {/if}
177
+ </div>
178
+ </div>
179
+
180
+ {#if mobileMenuOpen}
181
+ <div class={mobileMenuClasses} id="mobile-menu" transition:slide={{ duration: 200, axis: 'y' }}>
182
+ <div class={mobileMenuContainerClasses}>
183
+ {#each processedLinks as navItem (navItem.href)}
184
+ <a
185
+ href={navItem.href}
186
+ class={cn(
187
+ mobileLinkClasses,
188
+ navItem.current ? navbar({ active: true }).mobileLink() : ''
189
+ )}
190
+ aria-current={navItem.current ? 'page' : undefined}
191
+ >
192
+ {#if navItem.icon}
193
+ {@const Icon = navItem.icon}
194
+ <span class="flex items-center">
195
+ <Icon class="mr-2 h-4 w-4" />
196
+ {navItem.label}
197
+ </span>
198
+ {:else}
199
+ {navItem.label}
200
+ {/if}
201
+ </a>
202
+ {/each}
203
+ </div>
204
+ </div>
205
+ {/if}
206
+ </nav>
@@ -0,0 +1,4 @@
1
+ import { type NavbarProps } from './navbar.js';
2
+ declare const Navbar: import("svelte").Component<NavbarProps, {}, "">;
3
+ type Navbar = ReturnType<typeof Navbar>;
4
+ export default Navbar;
@@ -0,0 +1,2 @@
1
+ export { default as Navbar } from './Navbar.svelte';
2
+ export { navbar, type NavbarProps, type NavbarLinkItem } from './navbar.js';
@@ -0,0 +1,2 @@
1
+ export { default as Navbar } from './Navbar.svelte';
2
+ export { navbar } from './navbar.js';