@synthaxai/ui 1.0.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 (185) hide show
  1. package/README.md +262 -0
  2. package/dist/app.css +2 -0
  3. package/dist/app.html +12 -0
  4. package/dist/data-display/DataTable/DataTable.svelte +773 -0
  5. package/dist/data-display/DataTable/DataTable.svelte.d.ts +120 -0
  6. package/dist/data-display/DataTable/DataTable.svelte.d.ts.map +1 -0
  7. package/dist/data-display/DataTable/index.d.ts +2 -0
  8. package/dist/data-display/DataTable/index.d.ts.map +1 -0
  9. package/dist/data-display/DataTable/index.js +1 -0
  10. package/dist/data-display/StatCard/StatCard.svelte +409 -0
  11. package/dist/data-display/StatCard/StatCard.svelte.d.ts +63 -0
  12. package/dist/data-display/StatCard/StatCard.svelte.d.ts.map +1 -0
  13. package/dist/data-display/StatCard/index.d.ts +2 -0
  14. package/dist/data-display/StatCard/index.d.ts.map +1 -0
  15. package/dist/data-display/StatCard/index.js +1 -0
  16. package/dist/data-display/index.d.ts +8 -0
  17. package/dist/data-display/index.d.ts.map +1 -0
  18. package/dist/data-display/index.js +7 -0
  19. package/dist/dialogs/ConfirmDialog/ConfirmDialog.svelte +693 -0
  20. package/dist/dialogs/ConfirmDialog/ConfirmDialog.svelte.d.ts +66 -0
  21. package/dist/dialogs/ConfirmDialog/ConfirmDialog.svelte.d.ts.map +1 -0
  22. package/dist/dialogs/ConfirmDialog/index.d.ts +2 -0
  23. package/dist/dialogs/ConfirmDialog/index.d.ts.map +1 -0
  24. package/dist/dialogs/ConfirmDialog/index.js +1 -0
  25. package/dist/dialogs/Modal/Modal.svelte +441 -0
  26. package/dist/dialogs/Modal/Modal.svelte.d.ts +69 -0
  27. package/dist/dialogs/Modal/Modal.svelte.d.ts.map +1 -0
  28. package/dist/dialogs/Modal/index.d.ts +2 -0
  29. package/dist/dialogs/Modal/index.d.ts.map +1 -0
  30. package/dist/dialogs/Modal/index.js +1 -0
  31. package/dist/dialogs/index.d.ts +8 -0
  32. package/dist/dialogs/index.d.ts.map +1 -0
  33. package/dist/dialogs/index.js +7 -0
  34. package/dist/feedback/Alert/Alert.svelte +565 -0
  35. package/dist/feedback/Alert/Alert.svelte.d.ts +60 -0
  36. package/dist/feedback/Alert/Alert.svelte.d.ts.map +1 -0
  37. package/dist/feedback/Alert/index.d.ts +2 -0
  38. package/dist/feedback/Alert/index.d.ts.map +1 -0
  39. package/dist/feedback/Alert/index.js +1 -0
  40. package/dist/feedback/EmptyState/EmptyState.svelte +377 -0
  41. package/dist/feedback/EmptyState/EmptyState.svelte.d.ts +63 -0
  42. package/dist/feedback/EmptyState/EmptyState.svelte.d.ts.map +1 -0
  43. package/dist/feedback/EmptyState/index.d.ts +2 -0
  44. package/dist/feedback/EmptyState/index.d.ts.map +1 -0
  45. package/dist/feedback/EmptyState/index.js +1 -0
  46. package/dist/feedback/ProgressBar/ProgressBar.svelte +585 -0
  47. package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts +68 -0
  48. package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts.map +1 -0
  49. package/dist/feedback/ProgressBar/index.d.ts +2 -0
  50. package/dist/feedback/ProgressBar/index.d.ts.map +1 -0
  51. package/dist/feedback/ProgressBar/index.js +1 -0
  52. package/dist/feedback/Skeleton/Skeleton.svelte +568 -0
  53. package/dist/feedback/Skeleton/Skeleton.svelte.d.ts +54 -0
  54. package/dist/feedback/Skeleton/Skeleton.svelte.d.ts.map +1 -0
  55. package/dist/feedback/Skeleton/index.d.ts +2 -0
  56. package/dist/feedback/Skeleton/index.d.ts.map +1 -0
  57. package/dist/feedback/Skeleton/index.js +1 -0
  58. package/dist/feedback/Spinner/Spinner.svelte +434 -0
  59. package/dist/feedback/Spinner/Spinner.svelte.d.ts +49 -0
  60. package/dist/feedback/Spinner/Spinner.svelte.d.ts.map +1 -0
  61. package/dist/feedback/Spinner/index.d.ts +2 -0
  62. package/dist/feedback/Spinner/index.d.ts.map +1 -0
  63. package/dist/feedback/Spinner/index.js +1 -0
  64. package/dist/feedback/Toast/Toast.svelte +587 -0
  65. package/dist/feedback/Toast/Toast.svelte.d.ts +55 -0
  66. package/dist/feedback/Toast/Toast.svelte.d.ts.map +1 -0
  67. package/dist/feedback/Toast/ToastContainer.svelte +168 -0
  68. package/dist/feedback/Toast/ToastContainer.svelte.d.ts +28 -0
  69. package/dist/feedback/Toast/ToastContainer.svelte.d.ts.map +1 -0
  70. package/dist/feedback/Toast/index.d.ts +4 -0
  71. package/dist/feedback/Toast/index.d.ts.map +1 -0
  72. package/dist/feedback/Toast/index.js +3 -0
  73. package/dist/feedback/Toast/toast-store.d.ts +72 -0
  74. package/dist/feedback/Toast/toast-store.d.ts.map +1 -0
  75. package/dist/feedback/Toast/toast-store.js +157 -0
  76. package/dist/feedback/index.d.ts +13 -0
  77. package/dist/feedback/index.d.ts.map +1 -0
  78. package/dist/feedback/index.js +12 -0
  79. package/dist/forms/Checkbox/Checkbox.svelte +404 -0
  80. package/dist/forms/Checkbox/Checkbox.svelte.d.ts +62 -0
  81. package/dist/forms/Checkbox/Checkbox.svelte.d.ts.map +1 -0
  82. package/dist/forms/Checkbox/index.d.ts +2 -0
  83. package/dist/forms/Checkbox/index.d.ts.map +1 -0
  84. package/dist/forms/Checkbox/index.js +1 -0
  85. package/dist/forms/FormField/FormField.svelte +299 -0
  86. package/dist/forms/FormField/FormField.svelte.d.ts +43 -0
  87. package/dist/forms/FormField/FormField.svelte.d.ts.map +1 -0
  88. package/dist/forms/FormField/index.d.ts +2 -0
  89. package/dist/forms/FormField/index.d.ts.map +1 -0
  90. package/dist/forms/FormField/index.js +1 -0
  91. package/dist/forms/RadioGroup/RadioGroup.svelte +418 -0
  92. package/dist/forms/RadioGroup/RadioGroup.svelte.d.ts +70 -0
  93. package/dist/forms/RadioGroup/RadioGroup.svelte.d.ts.map +1 -0
  94. package/dist/forms/RadioGroup/index.d.ts +2 -0
  95. package/dist/forms/RadioGroup/index.d.ts.map +1 -0
  96. package/dist/forms/RadioGroup/index.js +1 -0
  97. package/dist/forms/Select/Select.svelte +548 -0
  98. package/dist/forms/Select/Select.svelte.d.ts +74 -0
  99. package/dist/forms/Select/Select.svelte.d.ts.map +1 -0
  100. package/dist/forms/Select/index.d.ts +2 -0
  101. package/dist/forms/Select/index.d.ts.map +1 -0
  102. package/dist/forms/Select/index.js +1 -0
  103. package/dist/forms/TextInput/TextInput.svelte +628 -0
  104. package/dist/forms/TextInput/TextInput.svelte.d.ts +97 -0
  105. package/dist/forms/TextInput/TextInput.svelte.d.ts.map +1 -0
  106. package/dist/forms/TextInput/index.d.ts +2 -0
  107. package/dist/forms/TextInput/index.d.ts.map +1 -0
  108. package/dist/forms/TextInput/index.js +1 -0
  109. package/dist/forms/Textarea/Textarea.svelte +587 -0
  110. package/dist/forms/Textarea/Textarea.svelte.d.ts +71 -0
  111. package/dist/forms/Textarea/Textarea.svelte.d.ts.map +1 -0
  112. package/dist/forms/Textarea/index.d.ts +2 -0
  113. package/dist/forms/Textarea/index.d.ts.map +1 -0
  114. package/dist/forms/Textarea/index.js +1 -0
  115. package/dist/forms/index.d.ts +13 -0
  116. package/dist/forms/index.d.ts.map +1 -0
  117. package/dist/forms/index.js +12 -0
  118. package/dist/index.d.ts +37 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +65 -0
  121. package/dist/layout/Card/Card.svelte +316 -0
  122. package/dist/layout/Card/Card.svelte.d.ts +63 -0
  123. package/dist/layout/Card/Card.svelte.d.ts.map +1 -0
  124. package/dist/layout/Card/index.d.ts +2 -0
  125. package/dist/layout/Card/index.d.ts.map +1 -0
  126. package/dist/layout/Card/index.js +1 -0
  127. package/dist/layout/Container/Container.svelte +252 -0
  128. package/dist/layout/Container/Container.svelte.d.ts +50 -0
  129. package/dist/layout/Container/Container.svelte.d.ts.map +1 -0
  130. package/dist/layout/Container/index.d.ts +2 -0
  131. package/dist/layout/Container/index.d.ts.map +1 -0
  132. package/dist/layout/Container/index.js +1 -0
  133. package/dist/layout/index.d.ts +8 -0
  134. package/dist/layout/index.d.ts.map +1 -0
  135. package/dist/layout/index.js +7 -0
  136. package/dist/navigation/StepIndicator/StepIndicator.svelte +601 -0
  137. package/dist/navigation/StepIndicator/StepIndicator.svelte.d.ts +70 -0
  138. package/dist/navigation/StepIndicator/StepIndicator.svelte.d.ts.map +1 -0
  139. package/dist/navigation/StepIndicator/index.d.ts +2 -0
  140. package/dist/navigation/StepIndicator/index.d.ts.map +1 -0
  141. package/dist/navigation/StepIndicator/index.js +1 -0
  142. package/dist/navigation/index.d.ts +7 -0
  143. package/dist/navigation/index.d.ts.map +1 -0
  144. package/dist/navigation/index.js +6 -0
  145. package/dist/primitives/Badge/Badge.svelte +365 -0
  146. package/dist/primitives/Badge/Badge.svelte.d.ts +39 -0
  147. package/dist/primitives/Badge/Badge.svelte.d.ts.map +1 -0
  148. package/dist/primitives/Badge/index.d.ts +2 -0
  149. package/dist/primitives/Badge/index.d.ts.map +1 -0
  150. package/dist/primitives/Badge/index.js +1 -0
  151. package/dist/primitives/Button/Button.svelte +430 -0
  152. package/dist/primitives/Button/Button.svelte.d.ts +50 -0
  153. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -0
  154. package/dist/primitives/Button/index.d.ts +2 -0
  155. package/dist/primitives/Button/index.d.ts.map +1 -0
  156. package/dist/primitives/Button/index.js +1 -0
  157. package/dist/primitives/index.d.ts +9 -0
  158. package/dist/primitives/index.d.ts.map +1 -0
  159. package/dist/primitives/index.js +8 -0
  160. package/dist/routes/+layout.svelte +12 -0
  161. package/dist/routes/+layout.svelte.d.ts +12 -0
  162. package/dist/routes/+layout.svelte.d.ts.map +1 -0
  163. package/dist/routes/+page.svelte +53 -0
  164. package/dist/routes/+page.svelte.d.ts +27 -0
  165. package/dist/routes/+page.svelte.d.ts.map +1 -0
  166. package/dist/styles/tokens.css +399 -0
  167. package/dist/types/index.d.ts +175 -0
  168. package/dist/types/index.d.ts.map +1 -0
  169. package/dist/types/index.js +7 -0
  170. package/dist/utils/accessibility.d.ts +103 -0
  171. package/dist/utils/accessibility.d.ts.map +1 -0
  172. package/dist/utils/accessibility.js +202 -0
  173. package/dist/utils/cn.d.ts +71 -0
  174. package/dist/utils/cn.d.ts.map +1 -0
  175. package/dist/utils/cn.js +61 -0
  176. package/dist/utils/form-styles.d.ts +76 -0
  177. package/dist/utils/form-styles.d.ts.map +1 -0
  178. package/dist/utils/form-styles.js +95 -0
  179. package/dist/utils/index.d.ts +10 -0
  180. package/dist/utils/index.d.ts.map +1 -0
  181. package/dist/utils/index.js +13 -0
  182. package/dist/utils/keyboard.d.ts +94 -0
  183. package/dist/utils/keyboard.d.ts.map +1 -0
  184. package/dist/utils/keyboard.js +179 -0
  185. package/package.json +119 -0
@@ -0,0 +1,120 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { TableColumn, SortState } from '../../types/index.js';
3
+ declare function $$render<T extends Record<string, unknown>>(): {
4
+ props: {
5
+ /** Column definitions */
6
+ columns: TableColumn<T>[];
7
+ /** Data rows */
8
+ data: T[];
9
+ /** Table caption for accessibility - describes the table's purpose */
10
+ caption?: string;
11
+ /** Whether to visually hide the caption (still available to screen readers) */
12
+ captionHidden?: boolean;
13
+ /** Size variant */
14
+ size?: "sm" | "md" | "lg";
15
+ /** Initial sort state */
16
+ sortState?: SortState;
17
+ /** Whether rows are hoverable */
18
+ hoverable?: boolean;
19
+ /** Whether rows are striped */
20
+ striped?: boolean;
21
+ /** Whether the header should stick when scrolling */
22
+ stickyHeader?: boolean;
23
+ /** Maximum height for scrollable table (enables sticky header behavior) */
24
+ maxHeight?: string;
25
+ /** Whether rows are selectable */
26
+ selectable?: boolean;
27
+ /** Currently selected row keys */
28
+ selectedKeys?: Set<string>;
29
+ /** Whether the table is loading */
30
+ loading?: boolean;
31
+ /** Number of skeleton rows to show when loading */
32
+ loadingRows?: number;
33
+ /** Empty state message */
34
+ emptyMessage?: string;
35
+ /** Empty state description */
36
+ emptyDescription?: string;
37
+ /** Row key function */
38
+ getRowKey?: (row: T, index: number) => string;
39
+ /** Custom cell renderer */
40
+ cellRenderer?: Snippet<[{
41
+ value: unknown;
42
+ row: T;
43
+ column: TableColumn<T>;
44
+ }]>;
45
+ /** Custom empty state snippet */
46
+ emptyState?: Snippet;
47
+ /** Row click handler */
48
+ onRowClick?: (row: T) => void;
49
+ /** Sort change handler */
50
+ onSort?: (state: SortState) => void;
51
+ /** Selection change handler */
52
+ onSelectionChange?: (selectedKeys: Set<string>) => void;
53
+ /** Pagination - current page (1-indexed) */
54
+ currentPage?: number;
55
+ /** Pagination - items per page */
56
+ pageSize?: number;
57
+ /** Pagination - total items (for server-side pagination) */
58
+ totalItems?: number;
59
+ /** Pagination - page change handler */
60
+ onPageChange?: (page: number) => void;
61
+ /** Row highlight function - return variant name for highlighting */
62
+ getRowHighlight?: (row: T) => "error" | "warning" | "success" | "info" | null;
63
+ /** Additional CSS classes */
64
+ class?: string;
65
+ /** ID for the table */
66
+ id?: string;
67
+ };
68
+ exports: {};
69
+ bindings: "";
70
+ slots: {};
71
+ events: {};
72
+ };
73
+ declare class __sveltets_Render<T extends Record<string, unknown>> {
74
+ props(): ReturnType<typeof $$render<T>>['props'];
75
+ events(): ReturnType<typeof $$render<T>>['events'];
76
+ slots(): ReturnType<typeof $$render<T>>['slots'];
77
+ bindings(): "";
78
+ exports(): {};
79
+ }
80
+ interface $$IsomorphicComponent {
81
+ new <T extends Record<string, unknown>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
82
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
83
+ } & ReturnType<__sveltets_Render<T>['exports']>;
84
+ <T extends Record<string, unknown>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
85
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
86
+ }
87
+ /**
88
+ * DataTable
89
+ *
90
+ * A world-class responsive data table component designed for healthcare applications.
91
+ * Features sorting, row selection, sticky headers, pagination, and full accessibility.
92
+ *
93
+ * Features:
94
+ * - Full WCAG 2.1 AA compliance with proper semantic markup
95
+ * - Sortable columns with keyboard support
96
+ * - Row selection with checkbox support
97
+ * - Sticky header option for long tables
98
+ * - Size variants (sm, md, lg) for different data densities
99
+ * - Loading state with skeleton placeholders
100
+ * - Empty state with customizable message
101
+ * - Pagination support for large datasets
102
+ * - Mobile-responsive with column hiding
103
+ *
104
+ * @example
105
+ * <DataTable
106
+ * columns={[
107
+ * { key: 'name', header: 'Patient Name', sortable: true },
108
+ * { key: 'status', header: 'Status' },
109
+ * { key: 'date', header: 'Date', hideOnMobile: true }
110
+ * ]}
111
+ * data={patients}
112
+ * caption="Patient list for Dr. Smith"
113
+ * selectable
114
+ * stickyHeader
115
+ * />
116
+ */
117
+ declare const DataTable: $$IsomorphicComponent;
118
+ type DataTable<T extends Record<string, unknown>> = InstanceType<typeof DataTable<T>>;
119
+ export default DataTable;
120
+ //# sourceMappingURL=DataTable.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.svelte.d.ts","sourceRoot":"","sources":["../../../src/data-display/DataTable/DataTable.svelte.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { default as DataTable } from './DataTable.svelte';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data-display/DataTable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1 @@
1
+ export { default as DataTable } from './DataTable.svelte';
@@ -0,0 +1,409 @@
1
+ <!--
2
+ @component StatCard
3
+
4
+ A world-class card component for displaying statistics with icon, value, label,
5
+ and optional trend indicator. Designed for healthcare dashboards and KPI displays.
6
+
7
+ Features:
8
+ - Multiple size variants (sm, md, lg)
9
+ - Trend indicators with direction and color coding
10
+ - Comparison context display
11
+ - Loading state with skeleton
12
+ - Sparkline slot for mini charts
13
+ - Interactive mode with proper accessibility
14
+ - Info variant for neutral metrics
15
+
16
+ @example
17
+ <StatCard
18
+ value="1,234"
19
+ label="Total Patients"
20
+ trend="+12%"
21
+ trendDirection="up"
22
+ />
23
+ -->
24
+ <script lang="ts">
25
+ import type { Snippet } from 'svelte';
26
+ import { TrendingUp, TrendingDown, Minus, HelpCircle } from 'lucide-svelte';
27
+ import { Skeleton } from '../../feedback/Skeleton/index.js';
28
+
29
+ type StatCardVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
30
+ type StatCardSize = 'sm' | 'md' | 'lg';
31
+ type TrendDirection = 'up' | 'down' | 'neutral';
32
+
33
+ interface Props {
34
+ /** The main value to display */
35
+ value: string | number;
36
+ /** Label describing the value */
37
+ label: string;
38
+ /** Size variant */
39
+ size?: StatCardSize;
40
+ /** Optional period/context (e.g., "Last 30 days") */
41
+ period?: string;
42
+ /** Optional comparison text (e.g., "vs last month") */
43
+ comparison?: string;
44
+ /** Optional trend indicator text (e.g., "+12%") */
45
+ trend?: string;
46
+ /** Direction of the trend */
47
+ trendDirection?: TrendDirection;
48
+ /** Visual variant for icon styling */
49
+ variant?: StatCardVariant;
50
+ /** Whether the card is in loading state */
51
+ loading?: boolean;
52
+ /** Whether the card is interactive */
53
+ interactive?: boolean;
54
+ /** Icon snippet */
55
+ icon?: Snippet;
56
+ /** Sparkline/chart snippet */
57
+ sparkline?: Snippet;
58
+ /** Optional help/info text */
59
+ helpText?: string;
60
+ /** Additional CSS classes */
61
+ class?: string;
62
+ /** Click handler */
63
+ onclick?: () => void;
64
+ }
65
+
66
+ let {
67
+ value,
68
+ label,
69
+ size = 'md',
70
+ period = '',
71
+ comparison = '',
72
+ trend = '',
73
+ trendDirection = 'neutral',
74
+ variant = 'default',
75
+ loading = false,
76
+ interactive = false,
77
+ icon,
78
+ sparkline,
79
+ helpText = '',
80
+ class: className = '',
81
+ onclick
82
+ }: Props = $props();
83
+
84
+ // Size configurations
85
+ const sizeConfig: Record<StatCardSize, {
86
+ padding: string;
87
+ iconSize: string;
88
+ iconWrapperSize: string;
89
+ valueSize: string;
90
+ labelSize: string;
91
+ gap: string;
92
+ }> = {
93
+ sm: {
94
+ padding: '1rem',
95
+ iconSize: '1.125rem',
96
+ iconWrapperSize: '2.25rem',
97
+ valueSize: '1.5rem',
98
+ labelSize: '0.75rem',
99
+ gap: '0.75rem'
100
+ },
101
+ md: {
102
+ padding: '1.25rem',
103
+ iconSize: '1.25rem',
104
+ iconWrapperSize: '2.75rem',
105
+ valueSize: '1.75rem',
106
+ labelSize: '0.8125rem',
107
+ gap: '1rem'
108
+ },
109
+ lg: {
110
+ padding: '1.5rem',
111
+ iconSize: '1.5rem',
112
+ iconWrapperSize: '3.5rem',
113
+ valueSize: '2.25rem',
114
+ labelSize: '0.875rem',
115
+ gap: '1.25rem'
116
+ }
117
+ };
118
+
119
+ const config = $derived(sizeConfig[size]);
120
+ </script>
121
+
122
+ {#snippet statContent()}
123
+ <!-- Icon -->
124
+ {#if icon && !loading}
125
+ <div
126
+ class="stat-card-icon stat-card-icon-{variant}"
127
+ style="width: {config.iconWrapperSize}; height: {config.iconWrapperSize}; font-size: {config.iconSize};"
128
+ aria-hidden="true"
129
+ >
130
+ {@render icon()}
131
+ </div>
132
+ {:else if loading}
133
+ <Skeleton variant="circle" width={config.iconWrapperSize} height={config.iconWrapperSize} animation="wave" />
134
+ {/if}
135
+
136
+ <!-- Content -->
137
+ <div class="stat-card-content">
138
+ {#if loading}
139
+ <Skeleton variant="text" width="4rem" height={config.valueSize} animation="wave" />
140
+ <Skeleton variant="text" width="6rem" height={config.labelSize} animation="wave" />
141
+ {:else}
142
+ <!-- Value Row -->
143
+ <div class="stat-card-value-row">
144
+ <span class="stat-card-value" style="font-size: {config.valueSize};">
145
+ {value}
146
+ </span>
147
+ {#if trend}
148
+ <span class="stat-card-trend stat-card-trend-{trendDirection}">
149
+ {#if trendDirection === 'up'}
150
+ <TrendingUp size={14} />
151
+ {:else if trendDirection === 'down'}
152
+ <TrendingDown size={14} />
153
+ {:else}
154
+ <Minus size={14} />
155
+ {/if}
156
+ {trend}
157
+ </span>
158
+ {/if}
159
+ {#if helpText}
160
+ <span class="stat-card-help" title={helpText}>
161
+ <HelpCircle size={14} />
162
+ </span>
163
+ {/if}
164
+ </div>
165
+
166
+ <!-- Label -->
167
+ <span class="stat-card-label" style="font-size: {config.labelSize};">
168
+ {label}
169
+ </span>
170
+
171
+ <!-- Period / Comparison -->
172
+ {#if period || comparison}
173
+ <span class="stat-card-period">
174
+ {period}
175
+ {#if period && comparison}
176
+ <span class="stat-card-separator">·</span>
177
+ {/if}
178
+ {comparison}
179
+ </span>
180
+ {/if}
181
+ {/if}
182
+ </div>
183
+
184
+ <!-- Sparkline -->
185
+ {#if sparkline && !loading}
186
+ <div class="stat-card-sparkline" aria-hidden="true">
187
+ {@render sparkline()}
188
+ </div>
189
+ {/if}
190
+ {/snippet}
191
+
192
+ {#if interactive}
193
+ <button
194
+ type="button"
195
+ class="stat-card stat-card-{size} stat-card-interactive {className}"
196
+ style="padding: {config.padding}; gap: {config.gap};"
197
+ onclick={onclick}
198
+ >
199
+ {@render statContent()}
200
+ </button>
201
+ {:else}
202
+ <div
203
+ class="stat-card stat-card-{size} {className}"
204
+ style="padding: {config.padding}; gap: {config.gap};"
205
+ >
206
+ {@render statContent()}
207
+ </div>
208
+ {/if}
209
+
210
+ <style>
211
+ /* ========================================
212
+ BASE STYLES
213
+ ======================================== */
214
+ .stat-card {
215
+ display: flex;
216
+ align-items: center;
217
+ background-color: var(--ui-bg-primary);
218
+ border: 1px solid var(--ui-border-default);
219
+ border-radius: 0.75rem;
220
+ transition: all 0.2s ease;
221
+ overflow: hidden;
222
+ }
223
+
224
+ /* Reset button styles */
225
+ button.stat-card {
226
+ width: 100%;
227
+ text-align: left;
228
+ font: inherit;
229
+ }
230
+
231
+ /* ========================================
232
+ INTERACTIVE STATE
233
+ ======================================== */
234
+ .stat-card-interactive {
235
+ cursor: pointer;
236
+ }
237
+
238
+ .stat-card-interactive:hover {
239
+ transform: translateY(-2px);
240
+ border-color: var(--ui-border-hover);
241
+ }
242
+
243
+ .stat-card-interactive:active {
244
+ transform: translateY(0);
245
+ }
246
+
247
+ .stat-card-interactive:focus-visible {
248
+ outline: none;
249
+ box-shadow: 0 0 0 3px rgb(var(--ui-color-primary) / 0.4);
250
+ }
251
+
252
+ :global([data-theme='dark']) .stat-card-interactive:focus-visible {
253
+ box-shadow: 0 0 0 3px rgb(var(--ui-color-primary-light) / 0.5);
254
+ }
255
+
256
+ @media (prefers-color-scheme: dark) {
257
+ :global(:root:not([data-theme='light'])) .stat-card-interactive:focus-visible {
258
+ box-shadow: 0 0 0 3px rgb(var(--ui-color-primary-light) / 0.5);
259
+ }
260
+ }
261
+
262
+ /* ========================================
263
+ ICON STYLES
264
+ ======================================== */
265
+ .stat-card-icon {
266
+ display: flex;
267
+ align-items: center;
268
+ justify-content: center;
269
+ border-radius: 0.75rem;
270
+ flex-shrink: 0;
271
+ }
272
+
273
+ .stat-card-icon-default,
274
+ .stat-card-icon-primary {
275
+ background-color: rgb(var(--ui-color-primary) / 0.1);
276
+ color: rgb(var(--ui-color-primary));
277
+ }
278
+
279
+ .stat-card-icon-success {
280
+ background-color: rgb(var(--ui-color-success) / 0.1);
281
+ color: rgb(var(--ui-color-success));
282
+ }
283
+
284
+ .stat-card-icon-warning {
285
+ background-color: rgb(var(--ui-color-warning) / 0.1);
286
+ color: rgb(var(--ui-color-warning));
287
+ }
288
+
289
+ .stat-card-icon-error {
290
+ background-color: rgb(var(--ui-color-error) / 0.1);
291
+ color: rgb(var(--ui-color-error));
292
+ }
293
+
294
+ .stat-card-icon-info {
295
+ background-color: rgb(var(--ui-color-info) / 0.1);
296
+ color: rgb(var(--ui-color-info));
297
+ }
298
+
299
+ /* ========================================
300
+ CONTENT STYLES
301
+ ======================================== */
302
+ .stat-card-content {
303
+ display: flex;
304
+ flex-direction: column;
305
+ min-width: 0;
306
+ flex: 1;
307
+ gap: 0.125rem;
308
+ }
309
+
310
+ .stat-card-value-row {
311
+ display: flex;
312
+ align-items: baseline;
313
+ gap: 0.5rem;
314
+ flex-wrap: wrap;
315
+ }
316
+
317
+ .stat-card-value {
318
+ font-weight: 700;
319
+ color: var(--ui-text-primary);
320
+ line-height: 1.2;
321
+ overflow: hidden;
322
+ text-overflow: ellipsis;
323
+ white-space: nowrap;
324
+ }
325
+
326
+ .stat-card-label {
327
+ color: var(--ui-text-secondary);
328
+ line-height: 1.4;
329
+ overflow: hidden;
330
+ text-overflow: ellipsis;
331
+ white-space: nowrap;
332
+ }
333
+
334
+ .stat-card-period {
335
+ font-size: 0.6875rem;
336
+ color: var(--ui-text-tertiary);
337
+ line-height: 1.4;
338
+ overflow: hidden;
339
+ text-overflow: ellipsis;
340
+ white-space: nowrap;
341
+ }
342
+
343
+ .stat-card-separator {
344
+ margin: 0 0.25rem;
345
+ }
346
+
347
+ /* ========================================
348
+ TREND INDICATOR
349
+ ======================================== */
350
+ .stat-card-trend {
351
+ display: inline-flex;
352
+ align-items: center;
353
+ gap: 0.125rem;
354
+ font-size: 0.75rem;
355
+ font-weight: 600;
356
+ padding: 0.125rem 0.375rem;
357
+ border-radius: 0.25rem;
358
+ }
359
+
360
+ .stat-card-trend-up {
361
+ color: rgb(var(--ui-color-success));
362
+ background-color: rgb(var(--ui-color-success) / 0.1);
363
+ }
364
+
365
+ .stat-card-trend-down {
366
+ color: rgb(var(--ui-color-error));
367
+ background-color: rgb(var(--ui-color-error) / 0.1);
368
+ }
369
+
370
+ .stat-card-trend-neutral {
371
+ color: var(--ui-text-tertiary);
372
+ background-color: var(--ui-bg-tertiary);
373
+ }
374
+
375
+ /* ========================================
376
+ HELP ICON
377
+ ======================================== */
378
+ .stat-card-help {
379
+ color: var(--ui-text-tertiary);
380
+ cursor: help;
381
+ display: inline-flex;
382
+ align-items: center;
383
+ }
384
+
385
+ .stat-card-help:hover {
386
+ color: var(--ui-text-secondary);
387
+ }
388
+
389
+ /* ========================================
390
+ SPARKLINE
391
+ ======================================== */
392
+ .stat-card-sparkline {
393
+ margin-left: auto;
394
+ flex-shrink: 0;
395
+ }
396
+
397
+ /* ========================================
398
+ REDUCED MOTION
399
+ ======================================== */
400
+ @media (prefers-reduced-motion: reduce) {
401
+ .stat-card {
402
+ transition: none;
403
+ }
404
+
405
+ .stat-card-interactive:hover {
406
+ transform: none;
407
+ }
408
+ }
409
+ </style>
@@ -0,0 +1,63 @@
1
+ import type { Snippet } from 'svelte';
2
+ type StatCardVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
3
+ type StatCardSize = 'sm' | 'md' | 'lg';
4
+ type TrendDirection = 'up' | 'down' | 'neutral';
5
+ interface Props {
6
+ /** The main value to display */
7
+ value: string | number;
8
+ /** Label describing the value */
9
+ label: string;
10
+ /** Size variant */
11
+ size?: StatCardSize;
12
+ /** Optional period/context (e.g., "Last 30 days") */
13
+ period?: string;
14
+ /** Optional comparison text (e.g., "vs last month") */
15
+ comparison?: string;
16
+ /** Optional trend indicator text (e.g., "+12%") */
17
+ trend?: string;
18
+ /** Direction of the trend */
19
+ trendDirection?: TrendDirection;
20
+ /** Visual variant for icon styling */
21
+ variant?: StatCardVariant;
22
+ /** Whether the card is in loading state */
23
+ loading?: boolean;
24
+ /** Whether the card is interactive */
25
+ interactive?: boolean;
26
+ /** Icon snippet */
27
+ icon?: Snippet;
28
+ /** Sparkline/chart snippet */
29
+ sparkline?: Snippet;
30
+ /** Optional help/info text */
31
+ helpText?: string;
32
+ /** Additional CSS classes */
33
+ class?: string;
34
+ /** Click handler */
35
+ onclick?: () => void;
36
+ }
37
+ /**
38
+ * StatCard
39
+ *
40
+ * A world-class card component for displaying statistics with icon, value, label,
41
+ * and optional trend indicator. Designed for healthcare dashboards and KPI displays.
42
+ *
43
+ * Features:
44
+ * - Multiple size variants (sm, md, lg)
45
+ * - Trend indicators with direction and color coding
46
+ * - Comparison context display
47
+ * - Loading state with skeleton
48
+ * - Sparkline slot for mini charts
49
+ * - Interactive mode with proper accessibility
50
+ * - Info variant for neutral metrics
51
+ *
52
+ * @example
53
+ * <StatCard
54
+ * value="1,234"
55
+ * label="Total Patients"
56
+ * trend="+12%"
57
+ * trendDirection="up"
58
+ * />
59
+ */
60
+ declare const StatCard: import("svelte").Component<Props, {}, "">;
61
+ type StatCard = ReturnType<typeof StatCard>;
62
+ export default StatCard;
63
+ //# sourceMappingURL=StatCard.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatCard.svelte.d.ts","sourceRoot":"","sources":["../../../src/data-display/StatCard/StatCard.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAKrC,KAAK,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AACxF,KAAK,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACvC,KAAK,cAAc,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhD,UAAU,KAAK;IACd,gCAAgC;IAChC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,sCAAsC;IACtC,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAmJF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,QAAA,MAAM,QAAQ,2CAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default as StatCard } from './StatCard.svelte';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data-display/StatCard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1 @@
1
+ export { default as StatCard } from './StatCard.svelte';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @synthaxai/ui - Data Display Components
3
+ *
4
+ * Components for displaying data in tables, cards, and other formats.
5
+ */
6
+ export { StatCard } from './StatCard/index.js';
7
+ export { DataTable } from './DataTable/index.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-display/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @synthaxai/ui - Data Display Components
3
+ *
4
+ * Components for displaying data in tables, cards, and other formats.
5
+ */
6
+ export { StatCard } from './StatCard/index.js';
7
+ export { DataTable } from './DataTable/index.js';