@aspect-ops/exon-ui 0.2.1 → 0.2.2

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 (43) hide show
  1. package/dist/components/AspectRatio/AspectRatio.svelte +1 -0
  2. package/dist/components/Card/FlipCard.svelte +155 -0
  3. package/dist/components/Card/FlipCard.svelte.d.ts +13 -0
  4. package/dist/components/Card/index.d.ts +1 -0
  5. package/dist/components/Card/index.js +1 -0
  6. package/dist/components/Container/Container.svelte +1 -0
  7. package/dist/components/DataTable/DataTable.svelte +460 -0
  8. package/dist/components/DataTable/DataTable.svelte.d.ts +49 -0
  9. package/dist/components/DataTable/index.d.ts +2 -0
  10. package/dist/components/DataTable/index.js +1 -0
  11. package/dist/components/DoughnutChart/DoughnutChart.svelte +20 -2
  12. package/dist/components/Icon/Icon.svelte +15 -18
  13. package/dist/components/Icon/Icon.svelte.d.ts +2 -1
  14. package/dist/components/Menu/MenuContent.svelte +1 -0
  15. package/dist/components/Menu/MenuSubContent.svelte +1 -0
  16. package/dist/components/Mermaid/Mermaid.svelte +121 -7
  17. package/dist/components/Mermaid/Mermaid.svelte.d.ts +10 -0
  18. package/dist/components/PageHeader/PageHeader.svelte +140 -0
  19. package/dist/components/PageHeader/PageHeader.svelte.d.ts +30 -0
  20. package/dist/components/PageHeader/index.d.ts +1 -0
  21. package/dist/components/PageHeader/index.js +1 -0
  22. package/dist/components/StatCircle/StatCircle.svelte +172 -0
  23. package/dist/components/StatCircle/StatCircle.svelte.d.ts +19 -0
  24. package/dist/components/StatCircle/index.d.ts +1 -0
  25. package/dist/components/StatCircle/index.js +1 -0
  26. package/dist/components/StatsCard/StatsCard.svelte +301 -0
  27. package/dist/components/StatsCard/StatsCard.svelte.d.ts +32 -0
  28. package/dist/components/StatsCard/index.d.ts +2 -0
  29. package/dist/components/StatsCard/index.js +1 -0
  30. package/dist/components/StatusBadge/StatusBadge.svelte +221 -0
  31. package/dist/components/StatusBadge/StatusBadge.svelte.d.ts +22 -0
  32. package/dist/components/StatusBadge/index.d.ts +2 -0
  33. package/dist/components/StatusBadge/index.js +1 -0
  34. package/dist/components/StatusBanner/StatusBanner.svelte +325 -0
  35. package/dist/components/StatusBanner/StatusBanner.svelte.d.ts +13 -0
  36. package/dist/components/StatusBanner/index.d.ts +1 -0
  37. package/dist/components/StatusBanner/index.js +1 -0
  38. package/dist/index.d.ts +8 -2
  39. package/dist/index.js +7 -1
  40. package/dist/types/data-display.d.ts +72 -0
  41. package/dist/types/feedback.d.ts +10 -0
  42. package/dist/types/index.d.ts +2 -2
  43. package/package.json +3 -2
@@ -0,0 +1,325 @@
1
+ <script lang="ts">
2
+ import type { StatusBannerStatus, StatusBannerPosition } from '../../types/index.js';
3
+
4
+ interface Props {
5
+ status: StatusBannerStatus;
6
+ message?: string;
7
+ description?: string;
8
+ dismissible?: boolean;
9
+ position?: StatusBannerPosition;
10
+ class?: string;
11
+ children?: import('svelte').Snippet;
12
+ }
13
+
14
+ let {
15
+ status,
16
+ message,
17
+ description,
18
+ dismissible = false,
19
+ position = 'sticky',
20
+ class: className = '',
21
+ children
22
+ }: Props = $props();
23
+
24
+ let dismissed = $state(false);
25
+ let visible = $state(true);
26
+
27
+ function handleDismiss() {
28
+ visible = false;
29
+ setTimeout(() => {
30
+ dismissed = true;
31
+ }, 300); // Match animation duration
32
+ }
33
+
34
+ // Default icons for each status
35
+ const statusIcons: Record<StatusBannerStatus, string> = {
36
+ online: '✓',
37
+ offline: '⚠',
38
+ warning: '⚠',
39
+ error: '✕',
40
+ reconnecting: '↻'
41
+ };
42
+
43
+ // Default messages if not provided
44
+ const statusMessages: Record<StatusBannerStatus, string> = {
45
+ online: 'Online',
46
+ offline: 'Offline',
47
+ warning: 'Warning',
48
+ error: 'Error',
49
+ reconnecting: 'Reconnecting'
50
+ };
51
+ </script>
52
+
53
+ {#if !dismissed}
54
+ <div
55
+ class="status-banner status-banner--{status} status-banner--{position} {className}"
56
+ class:status-banner--visible={visible}
57
+ role="status"
58
+ aria-live="polite"
59
+ >
60
+ <div class="status-banner__content">
61
+ <span class="status-banner__icon" aria-hidden="true">
62
+ {statusIcons[status]}
63
+ </span>
64
+ <div class="status-banner__text">
65
+ <span class="status-banner__message">
66
+ {message || statusMessages[status]}
67
+ </span>
68
+ {#if description}
69
+ <span class="status-banner__description">
70
+ {description}
71
+ </span>
72
+ {/if}
73
+ {#if children}
74
+ {@render children()}
75
+ {/if}
76
+ </div>
77
+ </div>
78
+ {#if dismissible}
79
+ <button
80
+ type="button"
81
+ class="status-banner__close"
82
+ onclick={handleDismiss}
83
+ aria-label="Dismiss status banner"
84
+ >
85
+ ×
86
+ </button>
87
+ {/if}
88
+ </div>
89
+ {/if}
90
+
91
+ <style>
92
+ .status-banner {
93
+ position: relative;
94
+ display: flex;
95
+ align-items: center;
96
+ justify-content: space-between;
97
+ width: 100%;
98
+ padding: 0.75rem 1rem;
99
+ font-family: inherit;
100
+ font-size: 0.875rem;
101
+ line-height: 1.5;
102
+ opacity: 0;
103
+ transform: translateY(-100%);
104
+ transition:
105
+ transform 0.3s ease,
106
+ opacity 0.3s ease;
107
+ z-index: 1000;
108
+ }
109
+
110
+ .status-banner--visible {
111
+ opacity: 1;
112
+ transform: translateY(0);
113
+ }
114
+
115
+ .status-banner--fixed {
116
+ position: fixed;
117
+ top: 0;
118
+ left: 0;
119
+ right: 0;
120
+ }
121
+
122
+ .status-banner--sticky {
123
+ position: sticky;
124
+ top: 0;
125
+ }
126
+
127
+ .status-banner--static {
128
+ position: static;
129
+ }
130
+
131
+ /* Support for mobile safe areas */
132
+ @supports (padding-top: env(safe-area-inset-top)) {
133
+ .status-banner--fixed,
134
+ .status-banner--sticky {
135
+ padding-top: calc(0.75rem + env(safe-area-inset-top));
136
+ }
137
+ }
138
+
139
+ .status-banner__content {
140
+ display: flex;
141
+ align-items: center;
142
+ gap: 0.75rem;
143
+ flex: 1;
144
+ }
145
+
146
+ .status-banner__icon {
147
+ flex-shrink: 0;
148
+ display: flex;
149
+ align-items: center;
150
+ justify-content: center;
151
+ width: 1.5rem;
152
+ height: 1.5rem;
153
+ font-size: 1rem;
154
+ font-weight: 600;
155
+ line-height: 1;
156
+ }
157
+
158
+ .status-banner__text {
159
+ display: flex;
160
+ flex-direction: column;
161
+ gap: 0.125rem;
162
+ flex: 1;
163
+ }
164
+
165
+ .status-banner__message {
166
+ font-weight: 600;
167
+ letter-spacing: 0.025em;
168
+ }
169
+
170
+ .status-banner__description {
171
+ font-size: 0.8125rem;
172
+ opacity: 0.9;
173
+ }
174
+
175
+ .status-banner__close {
176
+ flex-shrink: 0;
177
+ display: flex;
178
+ align-items: center;
179
+ justify-content: center;
180
+ width: 2rem;
181
+ height: 2rem;
182
+ margin: -0.25rem -0.25rem -0.25rem 0.5rem;
183
+ padding: 0;
184
+ border: none;
185
+ border-radius: var(--radius-sm, 0.25rem);
186
+ background: transparent;
187
+ font-family: inherit;
188
+ font-size: 1.25rem;
189
+ line-height: 1;
190
+ cursor: pointer;
191
+ transition: background-color 0.2s ease;
192
+ }
193
+
194
+ .status-banner__close:hover {
195
+ background-color: rgba(0, 0, 0, 0.1);
196
+ }
197
+
198
+ .status-banner__close:focus-visible {
199
+ outline: 2px solid currentColor;
200
+ outline-offset: 2px;
201
+ }
202
+
203
+ /* Online variant */
204
+ .status-banner--online {
205
+ background-color: var(--color-success-bg, #ecfdf5);
206
+ color: var(--color-success, #10b981);
207
+ }
208
+
209
+ .status-banner--online .status-banner__message,
210
+ .status-banner--online .status-banner__description {
211
+ color: var(--color-success-text, #065f46);
212
+ }
213
+
214
+ /* Offline variant */
215
+ .status-banner--offline {
216
+ background-color: var(--color-warning-bg, #fffbeb);
217
+ color: var(--color-warning, #f59e0b);
218
+ }
219
+
220
+ .status-banner--offline .status-banner__message,
221
+ .status-banner--offline .status-banner__description {
222
+ color: var(--color-warning-text, #92400e);
223
+ }
224
+
225
+ /* Warning variant */
226
+ .status-banner--warning {
227
+ background-color: var(--color-warning-bg, #fffbeb);
228
+ color: var(--color-warning, #f59e0b);
229
+ }
230
+
231
+ .status-banner--warning .status-banner__message,
232
+ .status-banner--warning .status-banner__description {
233
+ color: var(--color-warning-text, #92400e);
234
+ }
235
+
236
+ /* Error variant */
237
+ .status-banner--error {
238
+ background-color: var(--color-error-bg, #fef2f2);
239
+ color: var(--color-error, #ef4444);
240
+ }
241
+
242
+ .status-banner--error .status-banner__message,
243
+ .status-banner--error .status-banner__description {
244
+ color: var(--color-error-text, #991b1b);
245
+ }
246
+
247
+ /* Reconnecting variant */
248
+ .status-banner--reconnecting {
249
+ background-color: var(--color-info-bg, #eff6ff);
250
+ color: var(--color-info, #3b82f6);
251
+ }
252
+
253
+ .status-banner--reconnecting .status-banner__message,
254
+ .status-banner--reconnecting .status-banner__description {
255
+ color: var(--color-info-text, #1e3a8a);
256
+ }
257
+
258
+ .status-banner--reconnecting .status-banner__icon {
259
+ animation: spin 1s linear infinite;
260
+ }
261
+
262
+ @keyframes spin {
263
+ from {
264
+ transform: rotate(0deg);
265
+ }
266
+ to {
267
+ transform: rotate(360deg);
268
+ }
269
+ }
270
+
271
+ /* Dark mode support */
272
+ :global([data-theme='dark']) .status-banner--online {
273
+ background-color: var(--color-success-bg-dark, #064e3b);
274
+ color: var(--color-success-dark, #6ee7b7);
275
+ }
276
+
277
+ :global([data-theme='dark']) .status-banner--online .status-banner__message,
278
+ :global([data-theme='dark']) .status-banner--online .status-banner__description {
279
+ color: var(--color-success-text-dark, #d1fae5);
280
+ }
281
+
282
+ :global([data-theme='dark']) .status-banner--offline {
283
+ background-color: var(--color-warning-bg-dark, #78350f);
284
+ color: var(--color-warning-dark, #fcd34d);
285
+ }
286
+
287
+ :global([data-theme='dark']) .status-banner--offline .status-banner__message,
288
+ :global([data-theme='dark']) .status-banner--offline .status-banner__description {
289
+ color: var(--color-warning-text-dark, #fef3c7);
290
+ }
291
+
292
+ :global([data-theme='dark']) .status-banner--warning {
293
+ background-color: var(--color-warning-bg-dark, #78350f);
294
+ color: var(--color-warning-dark, #fcd34d);
295
+ }
296
+
297
+ :global([data-theme='dark']) .status-banner--warning .status-banner__message,
298
+ :global([data-theme='dark']) .status-banner--warning .status-banner__description {
299
+ color: var(--color-warning-text-dark, #fef3c7);
300
+ }
301
+
302
+ :global([data-theme='dark']) .status-banner--error {
303
+ background-color: var(--color-error-bg-dark, #7f1d1d);
304
+ color: var(--color-error-dark, #fca5a5);
305
+ }
306
+
307
+ :global([data-theme='dark']) .status-banner--error .status-banner__message,
308
+ :global([data-theme='dark']) .status-banner--error .status-banner__description {
309
+ color: var(--color-error-text-dark, #fee2e2);
310
+ }
311
+
312
+ :global([data-theme='dark']) .status-banner--reconnecting {
313
+ background-color: var(--color-info-bg-dark, #1e3a8a);
314
+ color: var(--color-info-dark, #93c5fd);
315
+ }
316
+
317
+ :global([data-theme='dark']) .status-banner--reconnecting .status-banner__message,
318
+ :global([data-theme='dark']) .status-banner--reconnecting .status-banner__description {
319
+ color: var(--color-info-text-dark, #dbeafe);
320
+ }
321
+
322
+ :global([data-theme='dark']) .status-banner__close:hover {
323
+ background-color: rgba(255, 255, 255, 0.1);
324
+ }
325
+ </style>
@@ -0,0 +1,13 @@
1
+ import type { StatusBannerStatus, StatusBannerPosition } from '../../types/index.js';
2
+ interface Props {
3
+ status: StatusBannerStatus;
4
+ message?: string;
5
+ description?: string;
6
+ dismissible?: boolean;
7
+ position?: StatusBannerPosition;
8
+ class?: string;
9
+ children?: import('svelte').Snippet;
10
+ }
11
+ declare const StatusBanner: import("svelte").Component<Props, {}, "">;
12
+ type StatusBanner = ReturnType<typeof StatusBanner>;
13
+ export default StatusBanner;
@@ -0,0 +1 @@
1
+ export { default as StatusBanner } from './StatusBanner.svelte';
@@ -0,0 +1 @@
1
+ export { default as StatusBanner } from './StatusBanner.svelte';
package/dist/index.d.ts CHANGED
@@ -52,16 +52,22 @@ export { ProgressBar, ProgressCircle, Spinner } from './components/Progress/inde
52
52
  export { Tooltip } from './components/Tooltip/index.js';
53
53
  export { Popover, PopoverTrigger, PopoverContent } from './components/Popover/index.js';
54
54
  export { Skeleton } from './components/Skeleton/index.js';
55
- export { Card, CardHeader, CardBody, CardFooter } from './components/Card/index.js';
55
+ export { StatusBanner } from './components/StatusBanner/index.js';
56
+ export { Card, CardHeader, CardBody, CardFooter, FlipCard } from './components/Card/index.js';
56
57
  export { Avatar, AvatarGroup } from './components/Avatar/index.js';
57
58
  export { Tag } from './components/Tag/index.js';
58
59
  export { EmptyState } from './components/EmptyState/index.js';
60
+ export { PageHeader } from './components/PageHeader/index.js';
59
61
  export { List, ListItem } from './components/List/index.js';
62
+ export { StatCircle } from './components/StatCircle/index.js';
60
63
  export { Table, TableHead, TableHeader, TableBody, TableRow, TableCell } from './components/Table/index.js';
61
64
  export { Accordion, AccordionItem } from './components/Accordion/index.js';
62
65
  export { Slider } from './components/Slider/index.js';
63
66
  export { Carousel, CarouselSlide } from './components/Carousel/index.js';
64
67
  export { Image } from './components/Image/index.js';
68
+ export { StatusBadge } from './components/StatusBadge/index.js';
69
+ export { StatsCard } from './components/StatsCard/index.js';
70
+ export { DataTable } from './components/DataTable/index.js';
65
71
  export { Container } from './components/Container/index.js';
66
72
  export { Grid } from './components/Grid/index.js';
67
73
  export { GridItem } from './components/Grid/index.js';
@@ -83,4 +89,4 @@ export { ContactForm } from './components/ContactForm/index.js';
83
89
  export { ViewCounter } from './components/ViewCounter/index.js';
84
90
  export { Mermaid } from './components/Mermaid/index.js';
85
91
  export { DoughnutChart } from './components/DoughnutChart/index.js';
86
- export type { ButtonProps, ButtonVariant, ButtonSize, TypographyProps, TypographyVariant, IconProps, IconSize, BadgeProps, BadgeVariant, LinkProps, InputSize, TextInputType, FormFieldProps, TextInputProps, TextareaProps, SelectOption, SelectProps, CheckboxProps, RadioProps, RadioGroupProps, SwitchProps, SearchInputProps, DatePickerProps, FileUploadProps, OTPInputProps, TimeFormat, TimePickerProps, RatingProps, ToggleGroupType, ToggleGroupOrientation, ToggleGroupProps, ToggleGroupItemProps, NumberInputProps, PaginationProps, TabsOrientation, TabsProps, TabListProps, TabTriggerProps, TabContentProps, MenuProps, MenuTriggerProps, MenuContentProps, MenuItemProps, MenuSeparatorProps, MenuSubProps, MenuSubTriggerProps, MenuSubContentProps, BreadcrumbItemData, BreadcrumbsProps, BreadcrumbItemProps, BottomNavItemData, BottomNavProps, BottomNavItemProps, NavItemProps, NavbarProps, SidebarItemData, SidebarProps, SidebarItemProps, SidebarGroupProps, StepperOrientation, StepperProps, StepperStepProps, AlertVariant, AlertProps, ToastVariant, ToastPosition, ToastData, ToastProps, ToastContainerProps, ModalSize, ModalProps, ModalHeaderProps, ModalBodyProps, ModalFooterProps, ProgressSize, ProgressBarProps, ProgressCircleProps, SpinnerProps, TooltipSide, TooltipProps, PopoverSide, PopoverProps, PopoverTriggerProps, PopoverContentProps, SkeletonVariant, SkeletonProps, CardVariant, CardProps, CardHeaderProps, CardBodyProps, CardFooterProps, AvatarSize, AvatarShape, AvatarProps, AvatarGroupProps, TagVariant, TagSize, TagProps, ChipVariant, ChipColor, ChipSize, ChipProps, ChipGroupProps, EmptyStateSize, EmptyStateProps, ListProps, ListItemProps, TableProps, TableHeadProps, TableHeaderAlign, TableHeaderSortDirection, TableHeaderProps, TableBodyProps, TableRowProps, TableCellAlign, TableCellProps, AccordionProps, AccordionItemProps, SliderProps, CarouselProps, CarouselSlideProps, ImageObjectFit, ImageRounded, ImageProps, ContainerSize, ContainerProps, GridAlign, GridJustify, SpacingToken, GridProps, GridItemProps, StackDirection, StackProps, DividerOrientation, DividerProps, SpacerSize, SpacerProps, AspectRatioPreset, AspectRatioProps, CenterProps, BoxProps, SafeAreaEdge, SafeAreaProps, BottomSheetSnapPoint, BottomSheetProps, BottomSheetHeaderProps, BottomSheetBodyProps, ActionSheetAction, ActionSheetProps, ActionSheetItemProps, PullToRefreshProps, SwipeActionSide, SwipeActionData, SwipeActionsProps, SwipeActionProps, FABSize, FABPosition, FABProps, FABAction, FABGroupProps } from './types/index.js';
92
+ export type { ButtonProps, ButtonVariant, ButtonSize, TypographyProps, TypographyVariant, IconProps, IconSize, BadgeProps, BadgeVariant, LinkProps, InputSize, TextInputType, FormFieldProps, TextInputProps, TextareaProps, SelectOption, SelectProps, CheckboxProps, RadioProps, RadioGroupProps, SwitchProps, SearchInputProps, DatePickerProps, FileUploadProps, OTPInputProps, TimeFormat, TimePickerProps, RatingProps, ToggleGroupType, ToggleGroupOrientation, ToggleGroupProps, ToggleGroupItemProps, NumberInputProps, PaginationProps, TabsOrientation, TabsProps, TabListProps, TabTriggerProps, TabContentProps, MenuProps, MenuTriggerProps, MenuContentProps, MenuItemProps, MenuSeparatorProps, MenuSubProps, MenuSubTriggerProps, MenuSubContentProps, BreadcrumbItemData, BreadcrumbsProps, BreadcrumbItemProps, BottomNavItemData, BottomNavProps, BottomNavItemProps, NavItemProps, NavbarProps, SidebarItemData, SidebarProps, SidebarItemProps, SidebarGroupProps, StepperOrientation, StepperProps, StepperStepProps, AlertVariant, AlertProps, ToastVariant, ToastPosition, ToastData, ToastProps, ToastContainerProps, ModalSize, ModalProps, ModalHeaderProps, ModalBodyProps, ModalFooterProps, ProgressSize, ProgressBarProps, ProgressCircleProps, SpinnerProps, TooltipSide, TooltipProps, PopoverSide, PopoverProps, PopoverTriggerProps, PopoverContentProps, SkeletonVariant, SkeletonProps, StatusBannerStatus, StatusBannerPosition, StatusBannerProps, CardVariant, CardProps, CardHeaderProps, CardBodyProps, CardFooterProps, FlipDirection, FlipTrigger, FlipCardProps, AvatarSize, AvatarShape, AvatarProps, AvatarGroupProps, TagVariant, TagSize, TagProps, ChipVariant, ChipColor, ChipSize, ChipProps, ChipGroupProps, EmptyStateSize, EmptyStateProps, PageHeaderProps, StatCircleColor, StatCircleSize, StatCircleProps, ListProps, ListItemProps, TableProps, TableHeadProps, TableHeaderAlign, TableHeaderSortDirection, TableHeaderProps, TableBodyProps, TableRowProps, TableCellAlign, TableCellProps, AccordionProps, AccordionItemProps, SliderProps, CarouselProps, CarouselSlideProps, ImageObjectFit, ImageRounded, ImageProps, StatusBadgeColor, StatusBadgeSize, StatusBadgeProps, StatsCardColor, StatsCardTrend, StatsCardProps, DataTableSortOrder, DataTableColumnAlign, DataTableColumn, DataTableProps, ContainerSize, ContainerProps, GridAlign, GridJustify, SpacingToken, GridProps, GridItemProps, StackDirection, StackProps, DividerOrientation, DividerProps, SpacerSize, SpacerProps, AspectRatioPreset, AspectRatioProps, CenterProps, BoxProps, SafeAreaEdge, SafeAreaProps, BottomSheetSnapPoint, BottomSheetProps, BottomSheetHeaderProps, BottomSheetBodyProps, ActionSheetAction, ActionSheetProps, ActionSheetItemProps, PullToRefreshProps, SwipeActionSide, SwipeActionData, SwipeActionsProps, SwipeActionProps, FABSize, FABPosition, FABProps, FABAction, FABGroupProps } from './types/index.js';
package/dist/index.js CHANGED
@@ -58,17 +58,23 @@ export { ProgressBar, ProgressCircle, Spinner } from './components/Progress/inde
58
58
  export { Tooltip } from './components/Tooltip/index.js';
59
59
  export { Popover, PopoverTrigger, PopoverContent } from './components/Popover/index.js';
60
60
  export { Skeleton } from './components/Skeleton/index.js';
61
+ export { StatusBanner } from './components/StatusBanner/index.js';
61
62
  // Data Display Components
62
- export { Card, CardHeader, CardBody, CardFooter } from './components/Card/index.js';
63
+ export { Card, CardHeader, CardBody, CardFooter, FlipCard } from './components/Card/index.js';
63
64
  export { Avatar, AvatarGroup } from './components/Avatar/index.js';
64
65
  export { Tag } from './components/Tag/index.js';
65
66
  export { EmptyState } from './components/EmptyState/index.js';
67
+ export { PageHeader } from './components/PageHeader/index.js';
66
68
  export { List, ListItem } from './components/List/index.js';
69
+ export { StatCircle } from './components/StatCircle/index.js';
67
70
  export { Table, TableHead, TableHeader, TableBody, TableRow, TableCell } from './components/Table/index.js';
68
71
  export { Accordion, AccordionItem } from './components/Accordion/index.js';
69
72
  export { Slider } from './components/Slider/index.js';
70
73
  export { Carousel, CarouselSlide } from './components/Carousel/index.js';
71
74
  export { Image } from './components/Image/index.js';
75
+ export { StatusBadge } from './components/StatusBadge/index.js';
76
+ export { StatsCard } from './components/StatsCard/index.js';
77
+ export { DataTable } from './components/DataTable/index.js';
72
78
  // Layout Components
73
79
  export { Container } from './components/Container/index.js';
74
80
  export { Grid } from './components/Grid/index.js';
@@ -13,6 +13,12 @@ export interface CardBodyProps {
13
13
  export interface CardFooterProps {
14
14
  class?: string;
15
15
  }
16
+ export interface FlipCardProps {
17
+ flipped?: boolean;
18
+ class?: string;
19
+ front?: import('svelte').Snippet;
20
+ back?: import('svelte').Snippet;
21
+ }
16
22
  export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
17
23
  export type AvatarShape = 'circle' | 'square';
18
24
  export interface AvatarProps {
@@ -45,6 +51,24 @@ export interface EmptyStateProps {
45
51
  size?: EmptyStateSize;
46
52
  class?: string;
47
53
  }
54
+ export interface PageHeaderProps {
55
+ greeting?: string;
56
+ userName: string;
57
+ avatarSrc?: string;
58
+ avatarInitials?: string;
59
+ class?: string;
60
+ }
61
+ export type StatCircleColor = 'default' | 'primary' | 'warning' | 'error' | 'success';
62
+ export type StatCircleSize = 'sm' | 'md' | 'lg';
63
+ export interface StatCircleProps {
64
+ value: number | string;
65
+ label: string;
66
+ color?: StatCircleColor;
67
+ size?: StatCircleSize;
68
+ clickable?: boolean;
69
+ class?: string;
70
+ onclick?: (event: MouseEvent) => void;
71
+ }
48
72
  export interface ListProps {
49
73
  dividers?: boolean;
50
74
  class?: string;
@@ -159,3 +183,51 @@ export interface ImageProps {
159
183
  aspectRatio?: string;
160
184
  class?: string;
161
185
  }
186
+ export type StatusBadgeColor = 'success' | 'warning' | 'error' | 'info' | 'default';
187
+ export type StatusBadgeSize = 'sm' | 'md' | 'lg';
188
+ export interface StatusBadgeProps {
189
+ status: string;
190
+ colorMap?: Record<string, StatusBadgeColor>;
191
+ size?: StatusBadgeSize;
192
+ dot?: boolean;
193
+ uppercase?: boolean;
194
+ class?: string;
195
+ }
196
+ export type StatsCardColor = 'default' | 'primary' | 'success' | 'warning' | 'error';
197
+ export interface StatsCardTrend {
198
+ value: number;
199
+ direction: 'up' | 'down';
200
+ }
201
+ export interface StatsCardProps {
202
+ label: string;
203
+ value: number | string;
204
+ color?: StatsCardColor;
205
+ selected?: boolean;
206
+ onclick?: (event: MouseEvent) => void;
207
+ trend?: StatsCardTrend;
208
+ loading?: boolean;
209
+ class?: string;
210
+ }
211
+ export type DataTableSortOrder = 'asc' | 'desc';
212
+ export type DataTableColumnAlign = 'left' | 'center' | 'right';
213
+ export interface DataTableColumn {
214
+ key: string;
215
+ header: string;
216
+ sortable?: boolean;
217
+ width?: string;
218
+ align?: DataTableColumnAlign;
219
+ cell?: import('svelte').Snippet<[value: unknown, row: unknown]>;
220
+ }
221
+ export interface DataTableProps {
222
+ data: unknown[];
223
+ columns: DataTableColumn[];
224
+ sortBy?: string;
225
+ sortOrder?: DataTableSortOrder;
226
+ onsort?: (column: string, order: DataTableSortOrder) => void;
227
+ loading?: boolean;
228
+ loadingRows?: number;
229
+ rowHover?: boolean;
230
+ striped?: boolean;
231
+ stickyHeader?: boolean;
232
+ class?: string;
233
+ }
@@ -90,3 +90,13 @@ export interface SkeletonProps {
90
90
  height?: string;
91
91
  class?: string;
92
92
  }
93
+ export type StatusBannerStatus = 'online' | 'offline' | 'warning' | 'error' | 'reconnecting';
94
+ export type StatusBannerPosition = 'fixed' | 'sticky' | 'static';
95
+ export interface StatusBannerProps {
96
+ status: StatusBannerStatus;
97
+ message?: string;
98
+ description?: string;
99
+ dismissible?: boolean;
100
+ position?: StatusBannerPosition;
101
+ class?: string;
102
+ }
@@ -127,8 +127,8 @@ export interface SwitchProps {
127
127
  class?: string;
128
128
  }
129
129
  export type { TabsOrientation, TabsProps, TabListProps, TabTriggerProps, TabContentProps, MenuProps, MenuTriggerProps, MenuContentProps, MenuItemProps, MenuSeparatorProps, MenuSubProps, MenuSubTriggerProps, MenuSubContentProps, BreadcrumbItemData, BreadcrumbsProps, BreadcrumbItemProps, BottomNavItemData, BottomNavProps, BottomNavItemProps, NavItemProps, NavbarProps, SidebarItemData, SidebarProps, SidebarItemProps, SidebarGroupProps, StepperOrientation, StepperProps, StepperStepProps } from './navigation.js';
130
- export type { AlertVariant, AlertProps, ToastVariant, ToastPosition, ToastData, ToastProps, ToastContainerProps, ModalSize, ModalProps, ModalHeaderProps, ModalBodyProps, ModalFooterProps, ProgressSize, ProgressBarProps, ProgressCircleProps, SpinnerProps, TooltipSide, TooltipProps, PopoverSide, PopoverProps, PopoverTriggerProps, PopoverContentProps, SkeletonVariant, SkeletonProps } from './feedback.js';
131
- export type { CardVariant, CardProps, CardHeaderProps, CardBodyProps, CardFooterProps, AvatarSize, AvatarShape, AvatarProps, AvatarGroupProps, TagVariant, TagSize, TagProps, ChipVariant, ChipColor, ChipSize, ChipProps, ChipGroupProps, EmptyStateSize, EmptyStateProps, ListProps, ListItemProps, TableProps, TableHeadProps, TableHeaderAlign, TableHeaderSortDirection, TableHeaderProps, TableBodyProps, TableRowProps, TableCellAlign, TableCellProps, AccordionProps, AccordionItemProps, SliderProps, CarouselProps, CarouselSlideProps, ImageObjectFit, ImageRounded, ImageProps } from './data-display.js';
130
+ export type { AlertVariant, AlertProps, ToastVariant, ToastPosition, ToastData, ToastProps, ToastContainerProps, ModalSize, ModalProps, ModalHeaderProps, ModalBodyProps, ModalFooterProps, ProgressSize, ProgressBarProps, ProgressCircleProps, SpinnerProps, TooltipSide, TooltipProps, PopoverSide, PopoverProps, PopoverTriggerProps, PopoverContentProps, SkeletonVariant, SkeletonProps, StatusBannerStatus, StatusBannerPosition, StatusBannerProps } from './feedback.js';
131
+ export type { CardVariant, CardProps, CardHeaderProps, CardBodyProps, CardFooterProps, FlipCardProps, AvatarSize, AvatarShape, AvatarProps, AvatarGroupProps, TagVariant, TagSize, TagProps, ChipVariant, ChipColor, ChipSize, ChipProps, ChipGroupProps, EmptyStateSize, EmptyStateProps, PageHeaderProps, StatCircleColor, StatCircleSize, StatCircleProps, ListProps, ListItemProps, TableProps, TableHeadProps, TableHeaderAlign, TableHeaderSortDirection, TableHeaderProps, TableBodyProps, TableRowProps, TableCellAlign, TableCellProps, AccordionProps, AccordionItemProps, SliderProps, CarouselProps, CarouselSlideProps, ImageObjectFit, ImageRounded, ImageProps, StatusBadgeColor, StatusBadgeSize, StatusBadgeProps, StatsCardColor, StatsCardTrend, StatsCardProps, DataTableSortOrder, DataTableColumnAlign, DataTableColumn, DataTableProps } from './data-display.js';
132
132
  export type { ContainerSize, ContainerProps, GridAlign, GridJustify, SpacingToken, GridProps, GridItemProps, StackDirection, StackProps, DividerOrientation, DividerProps, SpacerSize, SpacerProps, AspectRatioPreset, AspectRatioProps, CenterProps, BoxProps } from './layout.js';
133
133
  export type { SafeAreaEdge, SafeAreaProps, BottomSheetSnapPoint, BottomSheetProps, BottomSheetHeaderProps, BottomSheetBodyProps, ActionSheetAction, ActionSheetProps, ActionSheetItemProps, PullToRefreshProps, SwipeActionSide, SwipeActionData, SwipeActionsProps, SwipeActionProps, FABSize, FABPosition, FABProps, FABAction, FABGroupProps } from './mobile.js';
134
134
  export type { SearchInputProps, DatePickerProps, FileUploadProps, OTPInputProps, TimeFormat, TimePickerProps, RatingProps, ToggleGroupType, ToggleGroupOrientation, ToggleGroupProps, ToggleGroupItemProps, NumberInputProps, PaginationProps } from './input.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aspect-ops/exon-ui",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Reusable Svelte UI components for web and Capacitor mobile apps",
5
5
  "author": "Exon Team",
6
6
  "license": "MIT",
@@ -111,7 +111,8 @@
111
111
  "vitest": "^2.0.0"
112
112
  },
113
113
  "dependencies": {
114
- "bits-ui": "^1.0.0"
114
+ "bits-ui": "^1.0.0",
115
+ "lucide-svelte": "^0.562.0"
115
116
  },
116
117
  "publishConfig": {
117
118
  "access": "public"