@makolabs/ripple 1.7.11 → 1.9.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.
Files changed (135) hide show
  1. package/README.md +16 -0
  2. package/dist/adapters/ai/OpenAIAdapter.d.ts +8 -1
  3. package/dist/adapters/ai/OpenAIAdapter.js +2 -2
  4. package/dist/adapters/storage/BaseAdapter.js +2 -2
  5. package/dist/adapters/storage/S3Adapter.js +1 -6
  6. package/dist/adapters/storage/types.d.ts +3 -3
  7. package/dist/ai/AIChatInterface.svelte +0 -1
  8. package/dist/ai/ai-chat-interface.d.ts +21 -22
  9. package/dist/ai/ai-types.d.ts +44 -0
  10. package/dist/ai/ai-types.js +1 -0
  11. package/dist/ai/content-detector.js +0 -1
  12. package/dist/button/Button.svelte +9 -2
  13. package/dist/button/button-types.d.ts +25 -0
  14. package/dist/button/button-types.js +1 -0
  15. package/dist/button/button.d.ts +39 -40
  16. package/dist/charts/Chart.svelte +11 -23
  17. package/dist/charts/chart-types.d.ts +137 -0
  18. package/dist/charts/chart-types.js +1 -0
  19. package/dist/drawer/Drawer.svelte +57 -23
  20. package/dist/drawer/drawer-types.d.ts +33 -0
  21. package/dist/drawer/drawer-types.js +1 -0
  22. package/dist/drawer/drawer.d.ts +18 -19
  23. package/dist/elements/accordion/Accordion.svelte +39 -18
  24. package/dist/elements/accordion/accordion-types.d.ts +29 -0
  25. package/dist/elements/accordion/accordion-types.js +1 -0
  26. package/dist/elements/accordion/accordion.d.ts +21 -22
  27. package/dist/elements/alert/Alert.svelte +20 -8
  28. package/dist/elements/badge/Badge.svelte +5 -2
  29. package/dist/elements/badge/badge-types.d.ts +11 -0
  30. package/dist/elements/badge/badge-types.js +1 -0
  31. package/dist/elements/badge/badge.d.ts +39 -40
  32. package/dist/elements/dropdown/Dropdown.svelte +18 -2
  33. package/dist/elements/dropdown/Select.svelte +17 -5
  34. package/dist/elements/dropdown/dropdown-types.d.ts +68 -0
  35. package/dist/elements/dropdown/dropdown-types.js +1 -0
  36. package/dist/elements/dropdown/dropdown.d.ts +18 -19
  37. package/dist/elements/dropdown/select.d.ts +18 -19
  38. package/dist/elements/file-upload/file-upload-types.d.ts +68 -0
  39. package/dist/elements/file-upload/file-upload-types.js +1 -0
  40. package/dist/elements/pagination/Pagination.svelte +15 -2
  41. package/dist/elements/pagination/Pagination.svelte.d.ts +1 -0
  42. package/dist/elements/progress/progress-types.d.ts +22 -0
  43. package/dist/elements/progress/progress-types.js +1 -0
  44. package/dist/elements/timeline/timeline-types.d.ts +11 -0
  45. package/dist/elements/timeline/timeline-types.js +1 -0
  46. package/dist/filters/filter-types.d.ts +24 -0
  47. package/dist/filters/filter-types.js +1 -0
  48. package/dist/forms/Checkbox.svelte +16 -4
  49. package/dist/forms/Form.svelte +0 -2
  50. package/dist/forms/Input.svelte +19 -5
  51. package/dist/forms/NumberInput.svelte +8 -1
  52. package/dist/forms/RadioInputs.svelte +14 -5
  53. package/dist/forms/Slider.svelte +6 -4
  54. package/dist/forms/Toggle.svelte +67 -29
  55. package/dist/forms/form-types.d.ts +168 -0
  56. package/dist/forms/form-types.js +1 -0
  57. package/dist/forms/slider.d.ts +72 -10
  58. package/dist/forms/slider.js +21 -0
  59. package/dist/header/Breadcrumbs.svelte +47 -24
  60. package/dist/header/PageHeader.svelte +12 -2
  61. package/dist/header/breadcrumbs.d.ts +47 -39
  62. package/dist/header/header-types.d.ts +43 -0
  63. package/dist/header/header-types.js +1 -0
  64. package/dist/helper/deprecation.d.ts +14 -0
  65. package/dist/helper/deprecation.js +24 -0
  66. package/dist/helper/testid.d.ts +10 -0
  67. package/dist/helper/testid.js +17 -0
  68. package/dist/index.d.ts +37 -1007
  69. package/dist/index.js +38 -14
  70. package/dist/layout/activity-list/activity-list-types.d.ts +30 -0
  71. package/dist/layout/activity-list/activity-list-types.js +1 -0
  72. package/dist/layout/activity-list/activity-list.d.ts +21 -22
  73. package/dist/layout/card/Card.svelte +19 -5
  74. package/dist/layout/card/card-types.d.ts +43 -0
  75. package/dist/layout/card/card-types.js +1 -0
  76. package/dist/layout/card/card.d.ts +21 -22
  77. package/dist/layout/card/metric-card.d.ts +3 -3
  78. package/dist/layout/card/ranked-card.d.ts +2 -1
  79. package/dist/layout/navbar/Navbar.svelte +14 -16
  80. package/dist/layout/navbar/navbar-types.d.ts +19 -0
  81. package/dist/layout/navbar/navbar-types.js +1 -0
  82. package/dist/layout/navbar/navbar.d.ts +19 -19
  83. package/dist/layout/sidebar/Sidebar.svelte +6 -3
  84. package/dist/layout/sidebar/sidebar-types.d.ts +59 -0
  85. package/dist/layout/sidebar/sidebar-types.js +1 -0
  86. package/dist/layout/table/Table.svelte +237 -303
  87. package/dist/layout/table/table-types.d.ts +82 -0
  88. package/dist/layout/table/table-types.js +1 -0
  89. package/dist/layout/table/table.d.ts +24 -25
  90. package/dist/layout/tabs/Tab.svelte +3 -1
  91. package/dist/layout/tabs/TabGroup.svelte +7 -4
  92. package/dist/layout/tabs/tabs-types.d.ts +43 -0
  93. package/dist/layout/tabs/tabs-types.js +1 -0
  94. package/dist/layout/tabs/tabs.d.ts +39 -40
  95. package/dist/modal/Modal.svelte +124 -21
  96. package/dist/modal/modal-types.d.ts +34 -0
  97. package/dist/modal/modal-types.js +1 -0
  98. package/dist/modal/modal.d.ts +18 -19
  99. package/dist/modal/modal.js +2 -2
  100. package/dist/types/echarts.d.ts +27 -0
  101. package/dist/user-management/UserModal.svelte +1 -1
  102. package/dist/user-management/UserTable.svelte +3 -3
  103. package/dist/user-management/UserViewModal.svelte +2 -2
  104. package/dist/user-management/user-management-types.d.ts +156 -0
  105. package/dist/user-management/user-management-types.js +1 -0
  106. package/dist/variants.d.ts +13 -13
  107. package/package.json +9 -7
  108. package/dist/ai/AIChatInterfaceTestWrapper.svelte +0 -26
  109. package/dist/ai/AIChatInterfaceTestWrapper.svelte.d.ts +0 -17
  110. package/dist/button/ButtonTestWrapper.svelte +0 -10
  111. package/dist/button/ButtonTestWrapper.svelte.d.ts +0 -7
  112. package/dist/drawer/DrawerTestWrapper.svelte +0 -19
  113. package/dist/drawer/DrawerTestWrapper.svelte.d.ts +0 -9
  114. package/dist/elements/accordion/AccordionTestWrapper.svelte +0 -21
  115. package/dist/elements/accordion/AccordionTestWrapper.svelte.d.ts +0 -10
  116. package/dist/elements/badge/BadgeTestWrapper.svelte +0 -14
  117. package/dist/elements/badge/BadgeTestWrapper.svelte.d.ts +0 -9
  118. package/dist/forms/CheckboxTestWrapper.svelte +0 -8
  119. package/dist/forms/CheckboxTestWrapper.svelte.d.ts +0 -4
  120. package/dist/forms/InputTestWrapper.svelte +0 -8
  121. package/dist/forms/InputTestWrapper.svelte.d.ts +0 -4
  122. package/dist/forms/ToggleTestWrapper.svelte +0 -8
  123. package/dist/forms/ToggleTestWrapper.svelte.d.ts +0 -7
  124. package/dist/layout/card/CardTestWrapper.svelte +0 -15
  125. package/dist/layout/card/CardTestWrapper.svelte.d.ts +0 -7
  126. package/dist/modal/ModalTestWrapper.svelte +0 -20
  127. package/dist/modal/ModalTestWrapper.svelte.d.ts +0 -8
  128. package/dist/user-management/UserManagementTestWrapper.svelte +0 -32
  129. package/dist/user-management/UserManagementTestWrapper.svelte.d.ts +0 -12
  130. package/dist/user-management/UserModalTestWrapper.svelte +0 -22
  131. package/dist/user-management/UserModalTestWrapper.svelte.d.ts +0 -7
  132. package/dist/user-management/UserTableTestWrapper.svelte +0 -41
  133. package/dist/user-management/UserTableTestWrapper.svelte.d.ts +0 -7
  134. package/dist/user-management/UserViewModalTestWrapper.svelte +0 -22
  135. package/dist/user-management/UserViewModalTestWrapper.svelte.d.ts +0 -7
package/dist/index.js CHANGED
@@ -8,10 +8,15 @@ import { ChartColor, Color, Size } from './variants.js';
8
8
  * - ChartColors: Record type mapping ChartColor enum to string values
9
9
  */
10
10
  export { Color, Size, ChartColor };
11
+ export { buildTestId } from './helper/testid.js';
12
+ // ============================================================================
11
13
  // Helper utilities
14
+ // ============================================================================
12
15
  export { tv, cn } from './helper/cls.js';
13
16
  export { isRouteActive } from './helper/nav.svelte.js';
17
+ // ============================================================================
14
18
  // Direct Component Exports
19
+ // ============================================================================
15
20
  // Button
16
21
  export { default as Button } from './button/Button.svelte';
17
22
  // Modal
@@ -34,6 +39,7 @@ export { default as RankedCard } from './layout/card/RankedCard.svelte';
34
39
  // Elements - Alert
35
40
  export { default as Alert } from './elements/alert/Alert.svelte';
36
41
  export { default as Pagination } from './elements/pagination/Pagination.svelte';
42
+ // Elements - Tabs
37
43
  export { default as Tab } from './layout/tabs/Tab.svelte';
38
44
  export { default as TabContent } from './layout/tabs/TabContent.svelte';
39
45
  export { default as TabGroup } from './layout/tabs/TabGroup.svelte';
@@ -48,18 +54,15 @@ export { default as NavItem } from './layout/sidebar/NavItem.svelte';
48
54
  export { default as NavGroup } from './layout/sidebar/NavGroup.svelte';
49
55
  // Elements - ActivityList
50
56
  export { default as ActivityList } from './layout/activity-list/ActivityList.svelte';
51
- // Component Variant Utilities
52
- export { dropdownMenu } from './elements/dropdown/dropdown.js';
53
- export { badge } from './elements/badge/badge.js';
54
- export { buttonVariants } from './button/button.js';
55
- export { modal } from './modal/modal.js';
56
- export { drawer } from './drawer/drawer.js';
57
- export { selectTV } from './elements/dropdown/select.js';
58
- export { breadcrumbs } from './header/breadcrumbs.js';
59
- export { metricCard } from './layout/card/metric-card.js';
60
- export { rankedCard } from './layout/card/ranked-card.js';
61
- export { activityList } from './layout/activity-list/activity-list.js';
57
+ // Elements - Progress
58
+ export { default as Progress } from './elements/progress/Progress.svelte';
59
+ // Elements - Accordion
60
+ export { default as Accordion } from './elements/accordion/Accordion.svelte';
61
+ // Elements - Timeline
62
+ export { default as Timeline } from './elements/timeline/Timeline.svelte';
63
+ // Chart
62
64
  export { default as Chart } from './charts/Chart.svelte';
65
+ // File Upload
63
66
  export { default as FileUpload } from './elements/file-upload/FileUpload.svelte';
64
67
  export { default as FilesPreview } from './elements/file-upload/FilesPreview.svelte';
65
68
  // Toaster: Should be registered in +layout.svelte
@@ -81,19 +84,40 @@ export { default as NumberInput } from './forms/NumberInput.svelte';
81
84
  export { default as DateRange } from './forms/DateRange.svelte';
82
85
  export { default as Tags } from './forms/Tags.svelte';
83
86
  export { default as RadioPill } from './forms/RadioPill.svelte';
84
- export { default as Progress } from './elements/progress/Progress.svelte';
85
- export { default as Accordion } from './elements/accordion/Accordion.svelte';
86
- export { default as Timeline } from './elements/timeline/Timeline.svelte';
87
+ // ============================================================================
88
+ // Component Variant Utilities
89
+ // ============================================================================
90
+ export { dropdownMenu } from './elements/dropdown/dropdown.js';
91
+ export { badge } from './elements/badge/badge.js';
92
+ export { buttonVariants } from './button/button.js';
93
+ export { modal } from './modal/modal.js';
94
+ export { drawer } from './drawer/drawer.js';
95
+ export { selectTV } from './elements/dropdown/select.js';
96
+ export { breadcrumbs } from './header/breadcrumbs.js';
97
+ export { metricCard } from './layout/card/metric-card.js';
98
+ export { rankedCard } from './layout/card/ranked-card.js';
99
+ export { activityList } from './layout/activity-list/activity-list.js';
100
+ export { slider } from './forms/slider.js';
101
+ // ============================================================================
87
102
  // Re-export filters
103
+ // ============================================================================
88
104
  export { CompactFilters } from './filters/index.js';
105
+ // ============================================================================
89
106
  // File Browser and Storage Adapters
107
+ // ============================================================================
90
108
  export * from './file-browser/index.js';
91
109
  export * from './adapters/storage/index.js';
110
+ // ============================================================================
92
111
  // AI Adapters
112
+ // ============================================================================
93
113
  export * from './adapters/ai/index.js';
114
+ // ============================================================================
94
115
  // User Management Helper Functions
116
+ // ============================================================================
95
117
  export { getUserDisplayName, getUserInitials } from './user-management/user-management.js';
118
+ // ============================================================================
96
119
  // User Management Components
120
+ // ============================================================================
97
121
  export { default as UserManagement } from './user-management/UserManagement.svelte';
98
122
  export { default as UserTable } from './user-management/UserTable.svelte';
99
123
  export { default as UserModal } from './user-management/UserModal.svelte';
@@ -0,0 +1,30 @@
1
+ import type { ClassValue } from 'tailwind-variants';
2
+ import type { Snippet } from 'svelte';
3
+ import type { VariantColors } from '../../index.js';
4
+ export type ActivityItemBadge = {
5
+ text: string;
6
+ class: string;
7
+ };
8
+ export type ActivityItemAction = {
9
+ label: string;
10
+ onClick?: () => void;
11
+ };
12
+ export type ActivityItem = {
13
+ title: string;
14
+ subtitle?: string;
15
+ badges?: ActivityItemBadge[];
16
+ actions?: ActivityItemAction[];
17
+ };
18
+ export type ActivityListProps = {
19
+ title?: string;
20
+ items?: ActivityItem[];
21
+ color?: VariantColors;
22
+ class?: ClassValue;
23
+ headerClass?: ClassValue;
24
+ titleClass?: ClassValue;
25
+ contentClass?: ClassValue;
26
+ itemClass?: ClassValue;
27
+ onItemClick?: (item: ActivityItem, index: number) => void;
28
+ children?: Snippet;
29
+ testId?: string;
30
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,37 +1,36 @@
1
- import { Color } from '../../variants.js';
2
1
  export declare const activityList: import("tailwind-variants").TVReturnType<{
3
2
  color: {
4
- [Color.DEFAULT]: {
3
+ default: {
5
4
  base: string;
6
5
  header: string;
7
6
  title: string;
8
7
  };
9
- [Color.PRIMARY]: {
8
+ primary: {
10
9
  base: string;
11
10
  header: string;
12
11
  title: string;
13
12
  };
14
- [Color.SECONDARY]: {
13
+ secondary: {
15
14
  base: string;
16
15
  header: string;
17
16
  title: string;
18
17
  };
19
- [Color.INFO]: {
18
+ info: {
20
19
  base: string;
21
20
  header: string;
22
21
  title: string;
23
22
  };
24
- [Color.SUCCESS]: {
23
+ success: {
25
24
  base: string;
26
25
  header: string;
27
26
  title: string;
28
27
  };
29
- [Color.WARNING]: {
28
+ warning: {
30
29
  base: string;
31
30
  header: string;
32
31
  title: string;
33
32
  };
34
- [Color.DANGER]: {
33
+ danger: {
35
34
  base: string;
36
35
  header: string;
37
36
  title: string;
@@ -51,37 +50,37 @@ export declare const activityList: import("tailwind-variants").TVReturnType<{
51
50
  itemActions: string;
52
51
  }, undefined, {
53
52
  color: {
54
- [Color.DEFAULT]: {
53
+ default: {
55
54
  base: string;
56
55
  header: string;
57
56
  title: string;
58
57
  };
59
- [Color.PRIMARY]: {
58
+ primary: {
60
59
  base: string;
61
60
  header: string;
62
61
  title: string;
63
62
  };
64
- [Color.SECONDARY]: {
63
+ secondary: {
65
64
  base: string;
66
65
  header: string;
67
66
  title: string;
68
67
  };
69
- [Color.INFO]: {
68
+ info: {
70
69
  base: string;
71
70
  header: string;
72
71
  title: string;
73
72
  };
74
- [Color.SUCCESS]: {
73
+ success: {
75
74
  base: string;
76
75
  header: string;
77
76
  title: string;
78
77
  };
79
- [Color.WARNING]: {
78
+ warning: {
80
79
  base: string;
81
80
  header: string;
82
81
  title: string;
83
82
  };
84
- [Color.DANGER]: {
83
+ danger: {
85
84
  base: string;
86
85
  header: string;
87
86
  title: string;
@@ -101,37 +100,37 @@ export declare const activityList: import("tailwind-variants").TVReturnType<{
101
100
  itemActions: string;
102
101
  }, import("tailwind-variants").TVReturnType<{
103
102
  color: {
104
- [Color.DEFAULT]: {
103
+ default: {
105
104
  base: string;
106
105
  header: string;
107
106
  title: string;
108
107
  };
109
- [Color.PRIMARY]: {
108
+ primary: {
110
109
  base: string;
111
110
  header: string;
112
111
  title: string;
113
112
  };
114
- [Color.SECONDARY]: {
113
+ secondary: {
115
114
  base: string;
116
115
  header: string;
117
116
  title: string;
118
117
  };
119
- [Color.INFO]: {
118
+ info: {
120
119
  base: string;
121
120
  header: string;
122
121
  title: string;
123
122
  };
124
- [Color.SUCCESS]: {
123
+ success: {
125
124
  base: string;
126
125
  header: string;
127
126
  title: string;
128
127
  };
129
- [Color.WARNING]: {
128
+ warning: {
130
129
  base: string;
131
130
  header: string;
132
131
  title: string;
133
132
  };
134
- [Color.DANGER]: {
133
+ danger: {
135
134
  base: string;
136
135
  header: string;
137
136
  title: string;
@@ -1,5 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { cn } from '../../helper/cls.js';
3
+ import { buildTestId } from '../../helper/testid.js';
4
+ import { warnDeprecatedProps } from '../../helper/deprecation.js';
3
5
  import { card } from './card.js';
4
6
  import type { CardProps } from '../../index.js';
5
7
  import { Color } from '../../variants.js';
@@ -10,10 +12,22 @@
10
12
  title,
11
13
  color = Color.DEFAULT,
12
14
  class: className = '',
13
- titleclass: titleClass = '',
14
- bodyclass: bodyClass = ''
15
+ titleclass,
16
+ titleClass = titleclass ?? '',
17
+ bodyclass,
18
+ bodyClass = bodyclass ?? '',
19
+ testId
15
20
  }: CardProps = $props();
16
21
 
22
+ warnDeprecatedProps(
23
+ 'Card',
24
+ { titleclass, bodyclass },
25
+ {
26
+ titleclass: 'titleClass',
27
+ bodyclass: 'bodyClass'
28
+ }
29
+ );
30
+
17
31
  const { base, title: titleSlot, body: bodySlot } = $derived(card({ color }));
18
32
 
19
33
  const baseClass = $derived(cn(base(), className));
@@ -21,15 +35,15 @@
21
35
  const bodyClasses = $derived(cn(bodySlot(), bodyClass));
22
36
  </script>
23
37
 
24
- <div class={baseClass}>
38
+ <div class={baseClass} data-testid={buildTestId('card', undefined, testId)}>
25
39
  {#if custom}
26
40
  {@render custom()}
27
41
  {:else}
28
42
  {#if title}
29
- <h3 class={titleClasses}>{title}</h3>
43
+ <h3 class={titleClasses} data-testid={buildTestId('card', 'title', testId)}>{title}</h3>
30
44
  {/if}
31
45
  {#if children}
32
- <div class={bodyClasses}>
46
+ <div class={bodyClasses} data-testid={buildTestId('card', 'body', testId)}>
33
47
  {@render children()}
34
48
  </div>
35
49
  {/if}
@@ -0,0 +1,43 @@
1
+ import type { ClassValue } from 'tailwind-variants';
2
+ import type { Snippet } from 'svelte';
3
+ import type { Component } from 'svelte';
4
+ import type { VariantColors } from '../../index.js';
5
+ import type { ProgressSegment } from '../../elements/progress/progress-types.js';
6
+ export type CardProps = {
7
+ color?: VariantColors;
8
+ title?: string;
9
+ class?: ClassValue;
10
+ /** @deprecated Use titleClass instead */
11
+ titleclass?: ClassValue;
12
+ titleClass?: ClassValue;
13
+ /** @deprecated Use bodyClass instead */
14
+ bodyclass?: ClassValue;
15
+ bodyClass?: ClassValue;
16
+ children?: Snippet;
17
+ custom?: Snippet;
18
+ testId?: string;
19
+ };
20
+ export type AlertProps = {
21
+ title?: string;
22
+ message: string;
23
+ color?: VariantColors;
24
+ class?: ClassValue;
25
+ onclose?: () => void;
26
+ footer?: Snippet;
27
+ icon?: Component;
28
+ testId?: string;
29
+ };
30
+ export type MetricDetail = {
31
+ label: string;
32
+ value: string | number;
33
+ color?: VariantColors;
34
+ };
35
+ export type MetricCardProps = {
36
+ title: string;
37
+ value: string | number;
38
+ details?: MetricDetail[];
39
+ percent?: number;
40
+ segments?: ProgressSegment[];
41
+ class?: ClassValue;
42
+ testId?: string;
43
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,37 +1,36 @@
1
- import { Color } from '../../variants.js';
2
1
  export declare const card: import("tailwind-variants").TVReturnType<{
3
2
  color: {
4
- [Color.DEFAULT]: {
3
+ default: {
5
4
  base: string;
6
5
  title: string;
7
6
  body: string;
8
7
  };
9
- [Color.PRIMARY]: {
8
+ primary: {
10
9
  base: string;
11
10
  title: string;
12
11
  body: string;
13
12
  };
14
- [Color.SECONDARY]: {
13
+ secondary: {
15
14
  base: string;
16
15
  title: string;
17
16
  body: string;
18
17
  };
19
- [Color.INFO]: {
18
+ info: {
20
19
  base: string;
21
20
  title: string;
22
21
  body: string;
23
22
  };
24
- [Color.SUCCESS]: {
23
+ success: {
25
24
  base: string;
26
25
  title: string;
27
26
  body: string;
28
27
  };
29
- [Color.WARNING]: {
28
+ warning: {
30
29
  base: string;
31
30
  title: string;
32
31
  body: string;
33
32
  };
34
- [Color.DANGER]: {
33
+ danger: {
35
34
  base: string;
36
35
  title: string;
37
36
  body: string;
@@ -43,37 +42,37 @@ export declare const card: import("tailwind-variants").TVReturnType<{
43
42
  body: string;
44
43
  }, undefined, {
45
44
  color: {
46
- [Color.DEFAULT]: {
45
+ default: {
47
46
  base: string;
48
47
  title: string;
49
48
  body: string;
50
49
  };
51
- [Color.PRIMARY]: {
50
+ primary: {
52
51
  base: string;
53
52
  title: string;
54
53
  body: string;
55
54
  };
56
- [Color.SECONDARY]: {
55
+ secondary: {
57
56
  base: string;
58
57
  title: string;
59
58
  body: string;
60
59
  };
61
- [Color.INFO]: {
60
+ info: {
62
61
  base: string;
63
62
  title: string;
64
63
  body: string;
65
64
  };
66
- [Color.SUCCESS]: {
65
+ success: {
67
66
  base: string;
68
67
  title: string;
69
68
  body: string;
70
69
  };
71
- [Color.WARNING]: {
70
+ warning: {
72
71
  base: string;
73
72
  title: string;
74
73
  body: string;
75
74
  };
76
- [Color.DANGER]: {
75
+ danger: {
77
76
  base: string;
78
77
  title: string;
79
78
  body: string;
@@ -85,37 +84,37 @@ export declare const card: import("tailwind-variants").TVReturnType<{
85
84
  body: string;
86
85
  }, import("tailwind-variants").TVReturnType<{
87
86
  color: {
88
- [Color.DEFAULT]: {
87
+ default: {
89
88
  base: string;
90
89
  title: string;
91
90
  body: string;
92
91
  };
93
- [Color.PRIMARY]: {
92
+ primary: {
94
93
  base: string;
95
94
  title: string;
96
95
  body: string;
97
96
  };
98
- [Color.SECONDARY]: {
97
+ secondary: {
99
98
  base: string;
100
99
  title: string;
101
100
  body: string;
102
101
  };
103
- [Color.INFO]: {
102
+ info: {
104
103
  base: string;
105
104
  title: string;
106
105
  body: string;
107
106
  };
108
- [Color.SUCCESS]: {
107
+ success: {
109
108
  base: string;
110
109
  title: string;
111
110
  body: string;
112
111
  };
113
- [Color.WARNING]: {
112
+ warning: {
114
113
  base: string;
115
114
  title: string;
116
115
  body: string;
117
116
  };
118
- [Color.DANGER]: {
117
+ danger: {
119
118
  base: string;
120
119
  title: string;
121
120
  body: string;
@@ -2,8 +2,8 @@ export declare const metricCard: import("tailwind-variants").TVReturnType<{
2
2
  [key: string]: {
3
3
  [key: string]: import("tailwind-merge").ClassNameValue | {
4
4
  base?: import("tailwind-merge").ClassNameValue;
5
- title?: import("tailwind-merge").ClassNameValue;
6
5
  value?: import("tailwind-merge").ClassNameValue;
6
+ title?: import("tailwind-merge").ClassNameValue;
7
7
  progress?: import("tailwind-merge").ClassNameValue;
8
8
  detail?: import("tailwind-merge").ClassNameValue;
9
9
  };
@@ -12,8 +12,8 @@ export declare const metricCard: import("tailwind-variants").TVReturnType<{
12
12
  [x: string]: {
13
13
  [x: string]: import("tailwind-merge").ClassNameValue | {
14
14
  base?: import("tailwind-merge").ClassNameValue;
15
- title?: import("tailwind-merge").ClassNameValue;
16
15
  value?: import("tailwind-merge").ClassNameValue;
16
+ title?: import("tailwind-merge").ClassNameValue;
17
17
  progress?: import("tailwind-merge").ClassNameValue;
18
18
  detail?: import("tailwind-merge").ClassNameValue;
19
19
  };
@@ -28,8 +28,8 @@ export declare const metricCard: import("tailwind-variants").TVReturnType<{
28
28
  [key: string]: {
29
29
  [key: string]: import("tailwind-merge").ClassNameValue | {
30
30
  base?: import("tailwind-merge").ClassNameValue;
31
- title?: import("tailwind-merge").ClassNameValue;
32
31
  value?: import("tailwind-merge").ClassNameValue;
32
+ title?: import("tailwind-merge").ClassNameValue;
33
33
  progress?: import("tailwind-merge").ClassNameValue;
34
34
  detail?: import("tailwind-merge").ClassNameValue;
35
35
  };
@@ -1,3 +1,4 @@
1
+ import type { ClassValue } from 'tailwind-variants';
1
2
  export declare const rankedCard: import("tailwind-variants").TVReturnType<{
2
3
  columns: {
3
4
  1: {
@@ -100,5 +101,5 @@ export type RankedCardItem = {
100
101
  export type RankedCardProps = {
101
102
  items: RankedCardItem[];
102
103
  columns?: 1 | 2 | 3 | 4;
103
- class?: string;
104
+ class?: ClassValue;
104
105
  };
@@ -5,12 +5,19 @@
5
5
  import { isRouteActive } from '../../helper/nav.svelte.js';
6
6
  import { slide } from 'svelte/transition';
7
7
  import { resolve } from '$app/paths';
8
+ import { buildTestId } from '../../helper/testid.js';
8
9
 
9
- let { logo, links = [], class: className = '', brand, children, actions }: NavbarProps = $props();
10
+ let {
11
+ logo,
12
+ links = [],
13
+ class: className = '',
14
+ brand,
15
+ children,
16
+ actions,
17
+ testId
18
+ }: NavbarProps = $props();
10
19
 
11
20
  let mobileMenuOpen = $state(false);
12
- let scrolled = $state(false);
13
- let isScrollingDown = $state(false);
14
21
 
15
22
  onNavigate(() => {
16
23
  mobileMenuOpen = false;
@@ -31,13 +38,7 @@
31
38
  actions: actionsSlot
32
39
  } = $derived(navbar());
33
40
 
34
- const baseClass = $derived(
35
- cn(base(), className, {
36
- 'shadow-md': scrolled,
37
- 'translate-y-0': !isScrollingDown || mobileMenuOpen,
38
- '-translate-y-full': isScrollingDown && !mobileMenuOpen && scrolled
39
- })
40
- );
41
+ const baseClass = $derived(cn(base(), className));
41
42
  const wrapperClasses = $derived(cn(wrapper()));
42
43
  const containerClasses = $derived(cn(container()));
43
44
  const brandClasses = $derived(cn(brandSlot()));
@@ -79,13 +80,9 @@
79
80
  </script>
80
81
 
81
82
  <nav
82
- class={baseClass}
83
+ class={cn(baseClass, 'z-10')}
83
84
  aria-label="Main navigation"
84
- class:sticky={scrolled}
85
- class:top-0={scrolled}
86
- class:z-10={true}
87
- class:transition-transform={true}
88
- class:duration-300={true}
85
+ data-testid={buildTestId('navbar', undefined, testId)}
89
86
  >
90
87
  <div class={wrapperClasses}>
91
88
  <div class={containerClasses}>
@@ -112,6 +109,7 @@
112
109
  aria-controls="mobile-menu"
113
110
  aria-expanded={mobileMenuOpen}
114
111
  onclick={toggleMobileMenu}
112
+ data-testid={buildTestId('navbar', 'toggle', testId)}
115
113
  >
116
114
  <span class="sr-only">Open main menu</span>
117
115
  {#if mobileMenuOpen}
@@ -0,0 +1,19 @@
1
+ import type { ClassValue } from 'tailwind-variants';
2
+ import type { Snippet } from 'svelte';
3
+ import type { Component } from 'svelte';
4
+ export type NavbarLinkItem = {
5
+ label: string;
6
+ href: string;
7
+ icon?: Component;
8
+ active?: boolean;
9
+ children?: NavbarLinkItem[];
10
+ };
11
+ export type NavbarProps = {
12
+ logo?: string | Component;
13
+ links?: NavbarLinkItem[];
14
+ class?: ClassValue;
15
+ brand?: Snippet;
16
+ children?: Snippet;
17
+ actions?: Snippet;
18
+ testId?: string;
19
+ };
@@ -0,0 +1 @@
1
+ export {};