diff --git a/packages/shared-ui/src/atoms/Button.svelte b/packages/shared-ui/src/atoms/Button.svelte index 4f4de014c..5cc77e11d 100644 --- a/packages/shared-ui/src/atoms/Button.svelte +++ b/packages/shared-ui/src/atoms/Button.svelte @@ -1,8 +1,8 @@ + +
+ + {#if icon} +
+ {@render icon()} +
+ {:else} + +
+ + + +
+ {/if} + + + + {title} + + + + {#if message} + + {message} + + {/if} + + + {#if actionLabel || secondaryActionLabel} +
+ {#if secondaryActionLabel && onSecondaryAction} + + {/if} + {#if actionLabel && onAction} + + {/if} +
+ {/if} +
diff --git a/packages/shared-ui/src/molecules/feedback/index.ts b/packages/shared-ui/src/molecules/feedback/index.ts new file mode 100644 index 000000000..a23dd372d --- /dev/null +++ b/packages/shared-ui/src/molecules/feedback/index.ts @@ -0,0 +1,4 @@ +/** + * Feedback components for user states + */ +export { default as EmptyState } from './EmptyState.svelte'; diff --git a/packages/shared-ui/src/molecules/index.ts b/packages/shared-ui/src/molecules/index.ts index 2d3c5ec9a..dd03d9b1a 100644 --- a/packages/shared-ui/src/molecules/index.ts +++ b/packages/shared-ui/src/molecules/index.ts @@ -3,7 +3,7 @@ export { default as Input } from './Input.svelte'; export { default as Select } from './Select.svelte'; export { default as Textarea } from './Textarea.svelte'; export { default as Checkbox } from './Checkbox.svelte'; -export type { SelectOption } from './Select.svelte'; +export type { SelectOption } from './Select.types'; // Stats components export { GlassCard, StatRow } from './stats'; @@ -13,3 +13,9 @@ export { TagBadge } from './tags'; // Media components export { AudioPlayer } from './media'; + +// Loading components +export { SkeletonBox, SkeletonText } from './loaders'; + +// Feedback components +export { EmptyState } from './feedback'; diff --git a/packages/shared-ui/src/molecules/loaders/SkeletonBox.svelte b/packages/shared-ui/src/molecules/loaders/SkeletonBox.svelte new file mode 100644 index 000000000..40fdc46ea --- /dev/null +++ b/packages/shared-ui/src/molecules/loaders/SkeletonBox.svelte @@ -0,0 +1,79 @@ + + +
+ + diff --git a/packages/shared-ui/src/molecules/loaders/SkeletonText.svelte b/packages/shared-ui/src/molecules/loaders/SkeletonText.svelte new file mode 100644 index 000000000..c069e2309 --- /dev/null +++ b/packages/shared-ui/src/molecules/loaders/SkeletonText.svelte @@ -0,0 +1,45 @@ + + +
+ {#each Array(lines) as _, i} + + {/each} +
diff --git a/packages/shared-ui/src/molecules/loaders/index.ts b/packages/shared-ui/src/molecules/loaders/index.ts new file mode 100644 index 000000000..536a53011 --- /dev/null +++ b/packages/shared-ui/src/molecules/loaders/index.ts @@ -0,0 +1,5 @@ +/** + * Loading state components + */ +export { default as SkeletonBox } from './SkeletonBox.svelte'; +export { default as SkeletonText } from './SkeletonText.svelte'; diff --git a/packages/shared-ui/src/organisms/ConfirmationModal.svelte b/packages/shared-ui/src/organisms/ConfirmationModal.svelte new file mode 100644 index 000000000..d3b7e6deb --- /dev/null +++ b/packages/shared-ui/src/organisms/ConfirmationModal.svelte @@ -0,0 +1,126 @@ + + + + {#snippet icon()} +
+ +
+ {/snippet} + +
+ {#if message} + + {message} + + {/if} +
+ + {#snippet footer()} +
+ + +
+ {/snippet} +
diff --git a/packages/shared-ui/src/organisms/index.ts b/packages/shared-ui/src/organisms/index.ts index 1642e822c..2dc96f6c6 100644 --- a/packages/shared-ui/src/organisms/index.ts +++ b/packages/shared-ui/src/organisms/index.ts @@ -1,3 +1,4 @@ export { default as Modal } from './Modal.svelte'; +export { default as ConfirmationModal } from './ConfirmationModal.svelte'; export { default as AppSlider } from './AppSlider.svelte'; -export type { AppItem } from './AppSlider.svelte'; +export type { AppItem } from './AppSlider.types';