@autumnsgrove/groveengine 0.3.2 → 0.4.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.
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.js +5 -0
- package/dist/components/admin/GutterManager.svelte +4 -4
- package/dist/components/admin/MarkdownEditor.svelte +381 -1311
- package/dist/components/admin/MarkdownEditor.svelte.d.ts +2 -8
- package/dist/components/admin/composables/index.d.ts +7 -0
- package/dist/components/admin/composables/index.js +12 -0
- package/dist/components/admin/composables/useAmbientSounds.svelte.d.ts +53 -0
- package/dist/components/admin/composables/useAmbientSounds.svelte.js +192 -0
- package/dist/components/admin/composables/useCommandPalette.svelte.d.ts +17 -0
- package/dist/components/admin/composables/useCommandPalette.svelte.js +118 -0
- package/dist/components/admin/composables/useDraftManager.svelte.d.ts +17 -0
- package/dist/components/admin/composables/useDraftManager.svelte.js +154 -0
- package/dist/components/admin/composables/useEditorTheme.svelte.d.ts +195 -0
- package/dist/components/admin/composables/useEditorTheme.svelte.js +182 -0
- package/dist/components/admin/composables/useSlashCommands.svelte.d.ts +32 -0
- package/dist/components/admin/composables/useSlashCommands.svelte.js +166 -0
- package/dist/components/admin/composables/useSnippets.svelte.d.ts +5 -0
- package/dist/components/admin/composables/useSnippets.svelte.js +122 -0
- package/dist/components/admin/composables/useWritingSession.svelte.d.ts +13 -0
- package/dist/components/admin/composables/useWritingSession.svelte.js +100 -0
- package/dist/components/custom/ContentWithGutter.svelte +1 -1
- package/dist/components/custom/GutterItem.svelte +2 -2
- package/dist/config/ai-models.d.ts +25 -0
- package/dist/config/ai-models.js +50 -0
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.js +4 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.js +6 -6
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.js +4 -0
- package/dist/ui/components/charts/ActivityOverview.svelte +293 -0
- package/dist/ui/components/charts/ActivityOverview.svelte.d.ts +12 -0
- package/dist/ui/components/charts/LOCBar.svelte +129 -0
- package/dist/ui/components/charts/LOCBar.svelte.d.ts +21 -0
- package/dist/ui/components/charts/RepoBreakdown.svelte +136 -0
- package/dist/ui/components/charts/RepoBreakdown.svelte.d.ts +16 -0
- package/dist/ui/components/charts/Sparkline.svelte +139 -0
- package/dist/ui/components/charts/Sparkline.svelte.d.ts +6 -0
- package/dist/ui/components/charts/index.d.ts +5 -0
- package/dist/ui/components/charts/index.js +11 -0
- package/dist/ui/components/content/PlanCard.svelte +91 -0
- package/dist/ui/components/content/PlanCard.svelte.d.ts +13 -0
- package/dist/ui/components/content/ProductCard.svelte +125 -0
- package/dist/ui/components/content/ProductCard.svelte.d.ts +14 -0
- package/dist/ui/components/content/SearchCard.svelte +60 -0
- package/dist/ui/components/content/SearchCard.svelte.d.ts +10 -0
- package/dist/ui/components/content/index.d.ts +4 -0
- package/dist/ui/components/content/index.js +10 -0
- package/dist/ui/components/forms/SearchInput.svelte +89 -0
- package/dist/ui/components/forms/SearchInput.svelte.d.ts +11 -0
- package/dist/ui/components/forms/index.d.ts +2 -0
- package/dist/ui/components/forms/index.js +8 -0
- package/dist/ui/components/gallery/index.d.ts +5 -0
- package/dist/ui/components/gallery/index.js +13 -0
- package/dist/ui/components/icons/IconLegend.svelte +83 -0
- package/dist/ui/components/icons/IconLegend.svelte.d.ts +11 -0
- package/dist/ui/components/icons/Icons.svelte +115 -0
- package/dist/ui/components/icons/Icons.svelte.d.ts +8 -0
- package/dist/ui/components/icons/index.d.ts +3 -0
- package/dist/ui/components/icons/index.js +9 -0
- package/dist/ui/components/indicators/CreditBalance.svelte +67 -0
- package/dist/ui/components/indicators/CreditBalance.svelte.d.ts +9 -0
- package/dist/ui/components/indicators/ScoreBar.svelte +63 -0
- package/dist/ui/components/indicators/ScoreBar.svelte.d.ts +9 -0
- package/dist/ui/components/indicators/StatusBadge.svelte +46 -0
- package/dist/ui/components/indicators/StatusBadge.svelte.d.ts +7 -0
- package/dist/ui/components/indicators/index.d.ts +4 -0
- package/dist/ui/components/indicators/index.js +10 -0
- package/dist/{components/ui → ui/components/primitives}/accordion/accordion-content.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/accordion/accordion-item.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/accordion/accordion-trigger.svelte +1 -1
- package/dist/ui/components/primitives/badge/badge.svelte +50 -0
- package/dist/ui/components/primitives/badge/badge.svelte.d.ts +60 -0
- package/dist/ui/components/primitives/badge/index.d.ts +2 -0
- package/dist/ui/components/primitives/badge/index.js +2 -0
- package/dist/ui/components/primitives/button/button.svelte +82 -0
- package/dist/ui/components/primitives/button/button.svelte.d.ts +132 -0
- package/dist/ui/components/primitives/button/index.d.ts +2 -0
- package/dist/ui/components/primitives/button/index.js +4 -0
- package/dist/ui/components/primitives/card/card-content.svelte +16 -0
- package/dist/ui/components/primitives/card/card-content.svelte.d.ts +5 -0
- package/dist/ui/components/primitives/card/card-description.svelte +16 -0
- package/dist/ui/components/primitives/card/card-description.svelte.d.ts +5 -0
- package/dist/ui/components/primitives/card/card-footer.svelte +16 -0
- package/dist/ui/components/primitives/card/card-footer.svelte.d.ts +5 -0
- package/dist/ui/components/primitives/card/card-header.svelte +16 -0
- package/dist/ui/components/primitives/card/card-header.svelte.d.ts +5 -0
- package/dist/ui/components/primitives/card/card-title.svelte +25 -0
- package/dist/ui/components/primitives/card/card-title.svelte.d.ts +8 -0
- package/dist/ui/components/primitives/card/card.svelte +20 -0
- package/dist/ui/components/primitives/card/card.svelte.d.ts +5 -0
- package/dist/ui/components/primitives/card/index.d.ts +7 -0
- package/dist/ui/components/primitives/card/index.js +9 -0
- package/dist/{components/ui → ui/components/primitives}/dialog/dialog-content.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/dialog/dialog-description.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/dialog/dialog-footer.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/dialog/dialog-header.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/dialog/dialog-overlay.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/dialog/dialog-title.svelte +1 -1
- package/dist/ui/components/primitives/input/index.d.ts +2 -0
- package/dist/ui/components/primitives/input/index.js +4 -0
- package/dist/ui/components/primitives/input/input.svelte +46 -0
- package/dist/ui/components/primitives/input/input.svelte.d.ts +13 -0
- package/dist/{components/ui → ui/components/primitives}/select/select-content.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/select/select-group-heading.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/select/select-item.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/select/select-scroll-down-button.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/select/select-scroll-up-button.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/select/select-separator.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/select/select-trigger.svelte +1 -1
- package/dist/ui/components/primitives/separator/index.d.ts +2 -0
- package/dist/ui/components/primitives/separator/index.js +4 -0
- package/dist/ui/components/primitives/separator/separator.svelte +22 -0
- package/dist/ui/components/primitives/separator/separator.svelte.d.ts +4 -0
- package/dist/{components/ui → ui/components/primitives}/sheet/sheet-content.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/sheet/sheet-description.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/sheet/sheet-footer.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/sheet/sheet-header.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/sheet/sheet-overlay.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/sheet/sheet-title.svelte +1 -1
- package/dist/ui/components/primitives/skeleton/index.d.ts +2 -0
- package/dist/ui/components/primitives/skeleton/index.js +4 -0
- package/dist/ui/components/primitives/skeleton/skeleton.svelte +17 -0
- package/dist/ui/components/primitives/skeleton/skeleton.svelte.d.ts +5 -0
- package/dist/{components/ui → ui/components/primitives}/table/table-body.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/table/table-caption.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/table/table-cell.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/table/table-footer.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/table/table-head.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/table/table-header.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/table/table-row.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/table/table.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/tabs/tabs-content.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/tabs/tabs-list.svelte +1 -1
- package/dist/{components/ui → ui/components/primitives}/tabs/tabs-trigger.svelte +1 -1
- package/dist/ui/components/primitives/textarea/index.d.ts +2 -0
- package/dist/ui/components/primitives/textarea/index.js +4 -0
- package/dist/ui/components/primitives/textarea/textarea.svelte +24 -0
- package/dist/ui/components/primitives/textarea/textarea.svelte.d.ts +6 -0
- package/dist/ui/components/states/EmptyState.svelte +28 -0
- package/dist/ui/components/states/EmptyState.svelte.d.ts +10 -0
- package/dist/ui/components/states/Loading.svelte +62 -0
- package/dist/ui/components/states/Loading.svelte.d.ts +7 -0
- package/dist/ui/components/states/LoadingSkeleton.svelte +46 -0
- package/dist/ui/components/states/LoadingSkeleton.svelte.d.ts +8 -0
- package/dist/ui/components/states/ThemeToggle.svelte +138 -0
- package/dist/ui/components/states/ThemeToggle.svelte.d.ts +6 -0
- package/dist/ui/components/states/index.d.ts +5 -0
- package/dist/ui/components/states/index.js +11 -0
- package/dist/{components → ui/components}/ui/Accordion.svelte +1 -1
- package/dist/ui/components/ui/Badge.svelte +52 -0
- package/dist/ui/components/ui/Badge.svelte.d.ts +28 -0
- package/dist/ui/components/ui/Button.svelte +77 -0
- package/dist/ui/components/ui/Button.svelte.d.ts +34 -0
- package/dist/ui/components/ui/Card.svelte +102 -0
- package/dist/ui/components/ui/Card.svelte.d.ts +46 -0
- package/dist/ui/components/ui/CollapsibleSection.svelte +65 -0
- package/dist/ui/components/ui/CollapsibleSection.svelte.d.ts +10 -0
- package/dist/{components → ui/components}/ui/Dialog.svelte +1 -1
- package/dist/ui/components/ui/Input.svelte +81 -0
- package/dist/ui/components/ui/Input.svelte.d.ts +35 -0
- package/dist/{components → ui/components}/ui/Select.svelte +1 -1
- package/dist/{components → ui/components}/ui/Sheet.svelte +1 -1
- package/dist/ui/components/ui/Skeleton.svelte +31 -0
- package/dist/ui/components/ui/Skeleton.svelte.d.ts +26 -0
- package/dist/ui/components/ui/Spinner.svelte +45 -0
- package/dist/ui/components/ui/Spinner.svelte.d.ts +15 -0
- package/dist/{components → ui/components}/ui/Table.svelte +2 -2
- package/dist/{components → ui/components}/ui/Table.svelte.d.ts +1 -1
- package/dist/{components → ui/components}/ui/Tabs.svelte +2 -2
- package/dist/ui/components/ui/Textarea.svelte +81 -0
- package/dist/ui/components/ui/Textarea.svelte.d.ts +35 -0
- package/dist/{components → ui/components}/ui/Toast.svelte +1 -1
- package/dist/ui/components/ui/index.d.ts +18 -0
- package/dist/ui/components/ui/index.js +28 -0
- package/dist/{components → ui/components}/ui/toast.d.ts +1 -1
- package/dist/{components → ui/components}/ui/toast.js +2 -2
- package/dist/ui/index.d.ts +10 -0
- package/dist/ui/index.js +22 -0
- package/dist/ui/stores/theme.d.ts +12 -0
- package/dist/ui/stores/theme.js +52 -0
- package/dist/ui/styles/content.css +514 -0
- package/dist/ui/styles/grove.css +715 -0
- package/dist/ui/styles/tokens.css +429 -0
- package/dist/ui/tailwind.preset.d.ts +340 -0
- package/dist/ui/tailwind.preset.js +441 -0
- package/dist/ui/tokens/animation.d.ts +417 -0
- package/dist/ui/tokens/animation.js +139 -0
- package/dist/ui/tokens/colors.d.ts +183 -0
- package/dist/ui/tokens/colors.js +97 -0
- package/dist/ui/tokens/effects.d.ts +111 -0
- package/dist/ui/tokens/effects.js +61 -0
- package/dist/ui/tokens/index.d.ts +6 -0
- package/dist/ui/tokens/index.js +19 -0
- package/dist/ui/tokens/spacing.d.ts +89 -0
- package/dist/ui/tokens/spacing.js +49 -0
- package/dist/ui/tokens/typography.d.ts +85 -0
- package/dist/ui/tokens/typography.js +68 -0
- package/dist/ui/utils/cn.d.ts +13 -0
- package/dist/ui/utils/cn.js +24 -0
- package/dist/ui/utils/index.d.ts +2 -0
- package/dist/ui/utils/index.js +8 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.js +14 -0
- package/dist/utils/markdown.d.ts +11 -0
- package/dist/utils/markdown.js +25 -0
- package/dist/utils/sanitize.js +2 -3
- package/package.json +73 -10
- package/dist/components/ui/index.d.ts +0 -14
- package/dist/components/ui/index.js +0 -18
- /package/dist/{components → ui/components}/gallery/ImageGallery.svelte +0 -0
- /package/dist/{components → ui/components}/gallery/ImageGallery.svelte.d.ts +0 -0
- /package/dist/{components → ui/components}/gallery/Lightbox.svelte +0 -0
- /package/dist/{components → ui/components}/gallery/Lightbox.svelte.d.ts +0 -0
- /package/dist/{components → ui/components}/gallery/LightboxCaption.svelte +0 -0
- /package/dist/{components → ui/components}/gallery/LightboxCaption.svelte.d.ts +0 -0
- /package/dist/{components → ui/components}/gallery/ZoomableImage.svelte +0 -0
- /package/dist/{components → ui/components}/gallery/ZoomableImage.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/accordion/accordion-content.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/accordion/accordion-item.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/accordion/accordion-trigger.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/accordion/index.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/accordion/index.js +0 -0
- /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-content.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-description.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-footer.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-header.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-overlay.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-title.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/dialog/index.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/dialog/index.js +0 -0
- /package/dist/{components/ui → ui/components/primitives}/select/index.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/select/index.js +0 -0
- /package/dist/{components/ui → ui/components/primitives}/select/select-content.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/select/select-group-heading.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/select/select-item.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/select/select-scroll-down-button.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/select/select-scroll-up-button.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/select/select-separator.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/select/select-trigger.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/sheet/index.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/sheet/index.js +0 -0
- /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-content.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-description.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-footer.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-header.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-overlay.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-title.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/table/index.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/table/index.js +0 -0
- /package/dist/{components/ui → ui/components/primitives}/table/table-body.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/table/table-caption.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/table/table-cell.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/table/table-footer.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/table/table-head.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/table/table-header.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/table/table-row.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/table/table.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/tabs/index.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/tabs/index.js +0 -0
- /package/dist/{components/ui → ui/components/primitives}/tabs/tabs-content.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/tabs/tabs-list.svelte.d.ts +0 -0
- /package/dist/{components/ui → ui/components/primitives}/tabs/tabs-trigger.svelte.d.ts +0 -0
- /package/dist/{components → ui/components}/ui/Accordion.svelte.d.ts +0 -0
- /package/dist/{components → ui/components}/ui/Dialog.svelte.d.ts +0 -0
- /package/dist/{components → ui/components}/ui/Select.svelte.d.ts +0 -0
- /package/dist/{components → ui/components}/ui/Sheet.svelte.d.ts +0 -0
- /package/dist/{components → ui/components}/ui/Tabs.svelte.d.ts +0 -0
- /package/dist/{components → ui/components}/ui/Toast.svelte.d.ts +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { HTMLInputAttributes } from "svelte/elements";
|
|
2
|
+
/**
|
|
3
|
+
* Input component wrapper with label, error handling, and validation
|
|
4
|
+
*
|
|
5
|
+
* @prop {string} [label] - Input label text (renders above input)
|
|
6
|
+
* @prop {string} [error] - Error message to display (turns border red)
|
|
7
|
+
* @prop {string|number} [value] - Input value (bindable for two-way binding)
|
|
8
|
+
* @prop {string} [placeholder] - Placeholder text
|
|
9
|
+
* @prop {string} [type="text"] - Input type (text|email|password|number)
|
|
10
|
+
* @prop {boolean} [required=false] - Whether input is required (shows asterisk)
|
|
11
|
+
* @prop {boolean} [disabled=false] - Whether input is disabled
|
|
12
|
+
* @prop {string} [class] - Additional CSS classes to apply
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* <Input label="Email" type="email" bind:value={email} required />
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* <Input label="Password" type="password" bind:value={password} error={passwordError} />
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* <Input placeholder="Search..." bind:value={searchQuery} />
|
|
22
|
+
*/
|
|
23
|
+
interface Props extends Omit<HTMLInputAttributes, "class"> {
|
|
24
|
+
label?: string;
|
|
25
|
+
error?: string;
|
|
26
|
+
value?: string | number;
|
|
27
|
+
placeholder?: string;
|
|
28
|
+
type?: "text" | "email" | "password" | "number";
|
|
29
|
+
required?: boolean;
|
|
30
|
+
disabled?: boolean;
|
|
31
|
+
class?: string;
|
|
32
|
+
}
|
|
33
|
+
declare const Input: import("svelte").Component<Props, {}, "value">;
|
|
34
|
+
type Input = ReturnType<typeof Input>;
|
|
35
|
+
export default Input;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Skeleton as ShadcnSkeleton } from "../primitives/skeleton";
|
|
3
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Skeleton component wrapper for loading placeholders
|
|
7
|
+
* Creates animated gray rectangles that indicate loading content
|
|
8
|
+
*
|
|
9
|
+
* @prop {string} [class] - CSS classes to customize size/shape (e.g., "h-12 w-12 rounded-full")
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <Skeleton class="h-4 w-full" />
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* <Skeleton class="h-12 w-12 rounded-full" />
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* <div class="flex flex-col gap-2">
|
|
19
|
+
* <Skeleton class="h-6 w-3/4" />
|
|
20
|
+
* <Skeleton class="h-4 w-full" />
|
|
21
|
+
* <Skeleton class="h-4 w-5/6" />
|
|
22
|
+
* </div>
|
|
23
|
+
*/
|
|
24
|
+
interface Props extends HTMLAttributes<HTMLDivElement> {
|
|
25
|
+
class?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
let { class: className, ...restProps }: Props = $props();
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<ShadcnSkeleton class={className} {...restProps} />
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
2
|
+
/**
|
|
3
|
+
* Skeleton component wrapper for loading placeholders
|
|
4
|
+
* Creates animated gray rectangles that indicate loading content
|
|
5
|
+
*
|
|
6
|
+
* @prop {string} [class] - CSS classes to customize size/shape (e.g., "h-12 w-12 rounded-full")
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* <Skeleton class="h-4 w-full" />
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <Skeleton class="h-12 w-12 rounded-full" />
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* <div class="flex flex-col gap-2">
|
|
16
|
+
* <Skeleton class="h-6 w-3/4" />
|
|
17
|
+
* <Skeleton class="h-4 w-full" />
|
|
18
|
+
* <Skeleton class="h-4 w-5/6" />
|
|
19
|
+
* </div>
|
|
20
|
+
*/
|
|
21
|
+
interface Props extends HTMLAttributes<HTMLDivElement> {
|
|
22
|
+
class?: string;
|
|
23
|
+
}
|
|
24
|
+
declare const Skeleton: import("svelte").Component<Props, {}, "">;
|
|
25
|
+
type Skeleton = ReturnType<typeof Skeleton>;
|
|
26
|
+
export default Skeleton;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Spinner loading indicator
|
|
4
|
+
* A simple spinning loader for indicating loading states
|
|
5
|
+
*
|
|
6
|
+
* @prop {string} [size="md"] - Size variant (sm|md|lg)
|
|
7
|
+
* @prop {string} [class] - Additional CSS classes
|
|
8
|
+
*/
|
|
9
|
+
type SpinnerSize = 'sm' | 'md' | 'lg';
|
|
10
|
+
|
|
11
|
+
interface Props {
|
|
12
|
+
size?: SpinnerSize;
|
|
13
|
+
class?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let { size = 'md', class: className = '' }: Props = $props();
|
|
17
|
+
|
|
18
|
+
const sizeClasses: Record<SpinnerSize, string> = {
|
|
19
|
+
sm: 'h-4 w-4',
|
|
20
|
+
md: 'h-8 w-8',
|
|
21
|
+
lg: 'h-12 w-12'
|
|
22
|
+
};
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<div
|
|
26
|
+
class="animate-spin rounded-full border-2 border-current border-t-transparent {sizeClasses[size]} {className}"
|
|
27
|
+
role="status"
|
|
28
|
+
aria-label="Loading"
|
|
29
|
+
>
|
|
30
|
+
<span class="sr-only">Loading...</span>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<style>
|
|
34
|
+
.sr-only {
|
|
35
|
+
position: absolute;
|
|
36
|
+
width: 1px;
|
|
37
|
+
height: 1px;
|
|
38
|
+
padding: 0;
|
|
39
|
+
margin: -1px;
|
|
40
|
+
overflow: hidden;
|
|
41
|
+
clip: rect(0, 0, 0, 0);
|
|
42
|
+
white-space: nowrap;
|
|
43
|
+
border-width: 0;
|
|
44
|
+
}
|
|
45
|
+
</style>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spinner loading indicator
|
|
3
|
+
* A simple spinning loader for indicating loading states
|
|
4
|
+
*
|
|
5
|
+
* @prop {string} [size="md"] - Size variant (sm|md|lg)
|
|
6
|
+
* @prop {string} [class] - Additional CSS classes
|
|
7
|
+
*/
|
|
8
|
+
type SpinnerSize = 'sm' | 'md' | 'lg';
|
|
9
|
+
interface Props {
|
|
10
|
+
size?: SpinnerSize;
|
|
11
|
+
class?: string;
|
|
12
|
+
}
|
|
13
|
+
declare const Spinner: import("svelte").Component<Props, {}, "">;
|
|
14
|
+
type Spinner = ReturnType<typeof Spinner>;
|
|
15
|
+
export default Spinner;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
TableBody,
|
|
6
6
|
TableRow,
|
|
7
7
|
TableCell
|
|
8
|
-
} from "
|
|
8
|
+
} from "../primitives/table";
|
|
9
9
|
import type { Snippet } from "svelte";
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
* </Table>
|
|
43
43
|
*
|
|
44
44
|
* @example
|
|
45
|
-
* import { Table, TableHeader, TableBody, TableRow, TableCell } from "
|
|
45
|
+
* import { Table, TableHeader, TableBody, TableRow, TableCell } from "../../../components/ui";
|
|
46
46
|
*/
|
|
47
47
|
interface Props {
|
|
48
48
|
class?: string;
|
|
@@ -33,7 +33,7 @@ import type { Snippet } from "svelte";
|
|
|
33
33
|
* </Table>
|
|
34
34
|
*
|
|
35
35
|
* @example
|
|
36
|
-
* import { Table, TableHeader, TableBody, TableRow, TableCell } from "
|
|
36
|
+
* import { Table, TableHeader, TableBody, TableRow, TableCell } from "../../../components/ui";
|
|
37
37
|
*/
|
|
38
38
|
interface Props {
|
|
39
39
|
class?: string;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
TabsContent,
|
|
5
5
|
TabsList,
|
|
6
6
|
TabsTrigger
|
|
7
|
-
} from "
|
|
7
|
+
} from "../primitives/tabs";
|
|
8
8
|
import type { Snippet } from "svelte";
|
|
9
9
|
|
|
10
10
|
interface Tab {
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
let {
|
|
50
|
-
value = $bindable(tabs[0]?.value ?? ""),
|
|
51
50
|
tabs,
|
|
51
|
+
value = $bindable(tabs[0]?.value ?? ""),
|
|
52
52
|
content,
|
|
53
53
|
class: className,
|
|
54
54
|
children
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Textarea as ShadcnTextarea } from "../primitives/textarea";
|
|
3
|
+
import type { HTMLTextareaAttributes } from "svelte/elements";
|
|
4
|
+
import { cn } from "../../utils";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Textarea component wrapper with label, error handling, and validation
|
|
8
|
+
*
|
|
9
|
+
* @prop {string} [label] - Textarea label text (renders above textarea)
|
|
10
|
+
* @prop {string} [error] - Error message to display (turns border red)
|
|
11
|
+
* @prop {string} [value] - Textarea value (bindable for two-way binding)
|
|
12
|
+
* @prop {string} [placeholder] - Placeholder text
|
|
13
|
+
* @prop {number} [rows] - Number of visible text rows
|
|
14
|
+
* @prop {boolean} [required=false] - Whether textarea is required (shows asterisk)
|
|
15
|
+
* @prop {boolean} [disabled=false] - Whether textarea is disabled
|
|
16
|
+
* @prop {string} [class] - Additional CSS classes to apply
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* <Textarea label="Description" bind:value={description} required />
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* <Textarea label="Notes" bind:value={notes} rows={5} error={notesError} />
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* <Textarea placeholder="Enter your message..." bind:value={message} />
|
|
26
|
+
*/
|
|
27
|
+
interface Props extends Omit<HTMLTextareaAttributes, "class"> {
|
|
28
|
+
label?: string;
|
|
29
|
+
error?: string;
|
|
30
|
+
value?: string;
|
|
31
|
+
placeholder?: string;
|
|
32
|
+
rows?: number;
|
|
33
|
+
required?: boolean;
|
|
34
|
+
disabled?: boolean;
|
|
35
|
+
class?: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
let {
|
|
39
|
+
label,
|
|
40
|
+
error,
|
|
41
|
+
value = $bindable(""),
|
|
42
|
+
placeholder,
|
|
43
|
+
rows,
|
|
44
|
+
required = false,
|
|
45
|
+
disabled = false,
|
|
46
|
+
class: className,
|
|
47
|
+
...restProps
|
|
48
|
+
}: Props = $props();
|
|
49
|
+
|
|
50
|
+
const textareaClass = $derived(
|
|
51
|
+
cn(
|
|
52
|
+
error && "border-destructive focus-visible:ring-destructive/20",
|
|
53
|
+
className
|
|
54
|
+
)
|
|
55
|
+
);
|
|
56
|
+
</script>
|
|
57
|
+
|
|
58
|
+
<div class="flex flex-col gap-1.5">
|
|
59
|
+
{#if label}
|
|
60
|
+
<label class="text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70">
|
|
61
|
+
{label}
|
|
62
|
+
{#if required}
|
|
63
|
+
<span class="text-destructive">*</span>
|
|
64
|
+
{/if}
|
|
65
|
+
</label>
|
|
66
|
+
{/if}
|
|
67
|
+
|
|
68
|
+
<ShadcnTextarea
|
|
69
|
+
bind:value
|
|
70
|
+
{placeholder}
|
|
71
|
+
{rows}
|
|
72
|
+
{required}
|
|
73
|
+
{disabled}
|
|
74
|
+
class={textareaClass}
|
|
75
|
+
{...restProps}
|
|
76
|
+
/>
|
|
77
|
+
|
|
78
|
+
{#if error}
|
|
79
|
+
<p class="text-sm text-destructive">{error}</p>
|
|
80
|
+
{/if}
|
|
81
|
+
</div>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { HTMLTextareaAttributes } from "svelte/elements";
|
|
2
|
+
/**
|
|
3
|
+
* Textarea component wrapper with label, error handling, and validation
|
|
4
|
+
*
|
|
5
|
+
* @prop {string} [label] - Textarea label text (renders above textarea)
|
|
6
|
+
* @prop {string} [error] - Error message to display (turns border red)
|
|
7
|
+
* @prop {string} [value] - Textarea value (bindable for two-way binding)
|
|
8
|
+
* @prop {string} [placeholder] - Placeholder text
|
|
9
|
+
* @prop {number} [rows] - Number of visible text rows
|
|
10
|
+
* @prop {boolean} [required=false] - Whether textarea is required (shows asterisk)
|
|
11
|
+
* @prop {boolean} [disabled=false] - Whether textarea is disabled
|
|
12
|
+
* @prop {string} [class] - Additional CSS classes to apply
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* <Textarea label="Description" bind:value={description} required />
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* <Textarea label="Notes" bind:value={notes} rows={5} error={notesError} />
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* <Textarea placeholder="Enter your message..." bind:value={message} />
|
|
22
|
+
*/
|
|
23
|
+
interface Props extends Omit<HTMLTextareaAttributes, "class"> {
|
|
24
|
+
label?: string;
|
|
25
|
+
error?: string;
|
|
26
|
+
value?: string;
|
|
27
|
+
placeholder?: string;
|
|
28
|
+
rows?: number;
|
|
29
|
+
required?: boolean;
|
|
30
|
+
disabled?: boolean;
|
|
31
|
+
class?: string;
|
|
32
|
+
}
|
|
33
|
+
declare const Textarea: import("svelte").Component<Props, {}, "value">;
|
|
34
|
+
type Textarea = ReturnType<typeof Textarea>;
|
|
35
|
+
export default Textarea;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { default as Button } from './Button.svelte';
|
|
2
|
+
export { default as Card } from './Card.svelte';
|
|
3
|
+
export { default as Badge } from './Badge.svelte';
|
|
4
|
+
export { default as Dialog } from './Dialog.svelte';
|
|
5
|
+
export { default as Input } from './Input.svelte';
|
|
6
|
+
export { default as Textarea } from './Textarea.svelte';
|
|
7
|
+
export { default as Select } from './Select.svelte';
|
|
8
|
+
export { default as Tabs } from './Tabs.svelte';
|
|
9
|
+
export { default as Accordion } from './Accordion.svelte';
|
|
10
|
+
export { default as Sheet } from './Sheet.svelte';
|
|
11
|
+
export { default as Toast } from './Toast.svelte';
|
|
12
|
+
export { default as Skeleton } from './Skeleton.svelte';
|
|
13
|
+
export { default as Spinner } from './Spinner.svelte';
|
|
14
|
+
export { default as Table } from './Table.svelte';
|
|
15
|
+
export { default as CollapsibleSection } from './CollapsibleSection.svelte';
|
|
16
|
+
export { TableHeader, TableBody, TableRow, TableCell, TableHead, TableFooter, TableCaption, } from '../primitives/table';
|
|
17
|
+
export * from './toast.js';
|
|
18
|
+
export declare const UI_VERSION = "0.2.0";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// GroveUI - Basic UI Components
|
|
2
|
+
//
|
|
3
|
+
// This module exports all basic UI components:
|
|
4
|
+
// Button, Card, Input, Dialog, Select, Tabs, Accordion, Badge, etc.
|
|
5
|
+
//
|
|
6
|
+
// Usage:
|
|
7
|
+
// import { Button, Card } from '@groveengine/ui/ui';
|
|
8
|
+
// Wrapper components
|
|
9
|
+
export { default as Button } from './Button.svelte';
|
|
10
|
+
export { default as Card } from './Card.svelte';
|
|
11
|
+
export { default as Badge } from './Badge.svelte';
|
|
12
|
+
export { default as Dialog } from './Dialog.svelte';
|
|
13
|
+
export { default as Input } from './Input.svelte';
|
|
14
|
+
export { default as Textarea } from './Textarea.svelte';
|
|
15
|
+
export { default as Select } from './Select.svelte';
|
|
16
|
+
export { default as Tabs } from './Tabs.svelte';
|
|
17
|
+
export { default as Accordion } from './Accordion.svelte';
|
|
18
|
+
export { default as Sheet } from './Sheet.svelte';
|
|
19
|
+
export { default as Toast } from './Toast.svelte';
|
|
20
|
+
export { default as Skeleton } from './Skeleton.svelte';
|
|
21
|
+
export { default as Spinner } from './Spinner.svelte';
|
|
22
|
+
export { default as Table } from './Table.svelte';
|
|
23
|
+
export { default as CollapsibleSection } from './CollapsibleSection.svelte';
|
|
24
|
+
// Table sub-components (from primitives)
|
|
25
|
+
export { TableHeader, TableBody, TableRow, TableCell, TableHead, TableFooter, TableCaption, } from '../primitives/table';
|
|
26
|
+
// Toast utility
|
|
27
|
+
export * from './toast.js';
|
|
28
|
+
export const UI_VERSION = '0.2.0';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { toast as sonnerToast } from "
|
|
1
|
+
import { toast as sonnerToast } from "sonner";
|
|
2
2
|
/**
|
|
3
3
|
* Toast notification utility for displaying temporary messages
|
|
4
4
|
* Wraps sonner toast with consistent defaults and API
|
|
5
5
|
*
|
|
6
6
|
* @example
|
|
7
|
-
* import { toast } from "
|
|
7
|
+
* import { toast } from "../../../components/ui";
|
|
8
8
|
* toast.success("Profile updated!");
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './components/ui/index.js';
|
|
2
|
+
export * from './components/gallery/index.js';
|
|
3
|
+
export * from './components/indicators/index.js';
|
|
4
|
+
export * from './components/content/index.js';
|
|
5
|
+
export * from './components/forms/index.js';
|
|
6
|
+
export * from './components/icons/index.js';
|
|
7
|
+
export * from './components/states/index.js';
|
|
8
|
+
export * from './components/charts/index.js';
|
|
9
|
+
export * from './tokens/index.js';
|
|
10
|
+
export { cn } from './utils/cn.js';
|
package/dist/ui/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// GroveUI - Main Entry Point
|
|
2
|
+
// @groveengine/ui v0.2.0
|
|
3
|
+
//
|
|
4
|
+
// A calm, organic design system for the Grove platform.
|
|
5
|
+
// "a place to Be"
|
|
6
|
+
// Re-export all component categories
|
|
7
|
+
// Core UI (from GroveEngine)
|
|
8
|
+
export * from './components/ui/index.js';
|
|
9
|
+
export * from './components/gallery/index.js';
|
|
10
|
+
// Editor component is in GroveEngine (domain-specific)
|
|
11
|
+
// New categories (from GroveScout)
|
|
12
|
+
export * from './components/indicators/index.js';
|
|
13
|
+
export * from './components/content/index.js';
|
|
14
|
+
export * from './components/forms/index.js';
|
|
15
|
+
export * from './components/icons/index.js';
|
|
16
|
+
export * from './components/states/index.js';
|
|
17
|
+
// Charts (from AutumnsGrove)
|
|
18
|
+
export * from './components/charts/index.js';
|
|
19
|
+
// Export design tokens
|
|
20
|
+
export * from './tokens/index.js';
|
|
21
|
+
// Export utilities
|
|
22
|
+
export { cn } from './utils/cn.js';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Store for GroveUI
|
|
3
|
+
* Manages light/dark/system theme preferences
|
|
4
|
+
*/
|
|
5
|
+
type Theme = 'light' | 'dark' | 'system';
|
|
6
|
+
export declare const themeStore: {
|
|
7
|
+
theme: import("svelte/store").Writable<Theme>;
|
|
8
|
+
resolvedTheme: import("svelte/store").Readable<"light" | "dark">;
|
|
9
|
+
setTheme: (newTheme: Theme) => void;
|
|
10
|
+
toggle: () => void;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Store for GroveUI
|
|
3
|
+
* Manages light/dark/system theme preferences
|
|
4
|
+
*/
|
|
5
|
+
import { writable, derived, get } from 'svelte/store';
|
|
6
|
+
import { browser } from '$app/environment';
|
|
7
|
+
function createThemeStore() {
|
|
8
|
+
// Initialize theme from localStorage or default to 'system'
|
|
9
|
+
const initialTheme = browser
|
|
10
|
+
? localStorage.getItem('theme') ?? 'system'
|
|
11
|
+
: 'system';
|
|
12
|
+
const theme = writable(initialTheme);
|
|
13
|
+
// Resolved theme (light/dark based on system preference if theme is 'system')
|
|
14
|
+
const resolvedTheme = derived(theme, ($theme) => {
|
|
15
|
+
if ($theme === 'system' && browser) {
|
|
16
|
+
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
17
|
+
}
|
|
18
|
+
return $theme === 'system' ? 'light' : $theme;
|
|
19
|
+
});
|
|
20
|
+
// Apply theme to document
|
|
21
|
+
function applyTheme(t) {
|
|
22
|
+
if (browser) {
|
|
23
|
+
document.documentElement.classList.toggle('dark', t === 'dark');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Subscribe to resolved theme changes and apply
|
|
27
|
+
if (browser) {
|
|
28
|
+
resolvedTheme.subscribe((t) => applyTheme(t));
|
|
29
|
+
// Listen for system preference changes
|
|
30
|
+
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
|
|
31
|
+
// Re-trigger derived store calculation
|
|
32
|
+
theme.update(t => t);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function setTheme(newTheme) {
|
|
36
|
+
theme.set(newTheme);
|
|
37
|
+
if (browser) {
|
|
38
|
+
localStorage.setItem('theme', newTheme);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function toggle() {
|
|
42
|
+
const current = get(resolvedTheme);
|
|
43
|
+
setTheme(current === 'dark' ? 'light' : 'dark');
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
theme,
|
|
47
|
+
resolvedTheme,
|
|
48
|
+
setTheme,
|
|
49
|
+
toggle
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export const themeStore = createThemeStore();
|