@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.
Files changed (270) hide show
  1. package/dist/auth/index.d.ts +2 -0
  2. package/dist/auth/index.js +5 -0
  3. package/dist/components/admin/GutterManager.svelte +4 -4
  4. package/dist/components/admin/MarkdownEditor.svelte +381 -1311
  5. package/dist/components/admin/MarkdownEditor.svelte.d.ts +2 -8
  6. package/dist/components/admin/composables/index.d.ts +7 -0
  7. package/dist/components/admin/composables/index.js +12 -0
  8. package/dist/components/admin/composables/useAmbientSounds.svelte.d.ts +53 -0
  9. package/dist/components/admin/composables/useAmbientSounds.svelte.js +192 -0
  10. package/dist/components/admin/composables/useCommandPalette.svelte.d.ts +17 -0
  11. package/dist/components/admin/composables/useCommandPalette.svelte.js +118 -0
  12. package/dist/components/admin/composables/useDraftManager.svelte.d.ts +17 -0
  13. package/dist/components/admin/composables/useDraftManager.svelte.js +154 -0
  14. package/dist/components/admin/composables/useEditorTheme.svelte.d.ts +195 -0
  15. package/dist/components/admin/composables/useEditorTheme.svelte.js +182 -0
  16. package/dist/components/admin/composables/useSlashCommands.svelte.d.ts +32 -0
  17. package/dist/components/admin/composables/useSlashCommands.svelte.js +166 -0
  18. package/dist/components/admin/composables/useSnippets.svelte.d.ts +5 -0
  19. package/dist/components/admin/composables/useSnippets.svelte.js +122 -0
  20. package/dist/components/admin/composables/useWritingSession.svelte.d.ts +13 -0
  21. package/dist/components/admin/composables/useWritingSession.svelte.js +100 -0
  22. package/dist/components/custom/ContentWithGutter.svelte +1 -1
  23. package/dist/components/custom/GutterItem.svelte +2 -2
  24. package/dist/config/ai-models.d.ts +25 -0
  25. package/dist/config/ai-models.js +50 -0
  26. package/dist/config/index.d.ts +1 -0
  27. package/dist/config/index.js +4 -0
  28. package/dist/index.d.ts +5 -5
  29. package/dist/index.js +6 -6
  30. package/dist/server/index.d.ts +1 -0
  31. package/dist/server/index.js +4 -0
  32. package/dist/ui/components/charts/ActivityOverview.svelte +293 -0
  33. package/dist/ui/components/charts/ActivityOverview.svelte.d.ts +12 -0
  34. package/dist/ui/components/charts/LOCBar.svelte +129 -0
  35. package/dist/ui/components/charts/LOCBar.svelte.d.ts +21 -0
  36. package/dist/ui/components/charts/RepoBreakdown.svelte +136 -0
  37. package/dist/ui/components/charts/RepoBreakdown.svelte.d.ts +16 -0
  38. package/dist/ui/components/charts/Sparkline.svelte +139 -0
  39. package/dist/ui/components/charts/Sparkline.svelte.d.ts +6 -0
  40. package/dist/ui/components/charts/index.d.ts +5 -0
  41. package/dist/ui/components/charts/index.js +11 -0
  42. package/dist/ui/components/content/PlanCard.svelte +91 -0
  43. package/dist/ui/components/content/PlanCard.svelte.d.ts +13 -0
  44. package/dist/ui/components/content/ProductCard.svelte +125 -0
  45. package/dist/ui/components/content/ProductCard.svelte.d.ts +14 -0
  46. package/dist/ui/components/content/SearchCard.svelte +60 -0
  47. package/dist/ui/components/content/SearchCard.svelte.d.ts +10 -0
  48. package/dist/ui/components/content/index.d.ts +4 -0
  49. package/dist/ui/components/content/index.js +10 -0
  50. package/dist/ui/components/forms/SearchInput.svelte +89 -0
  51. package/dist/ui/components/forms/SearchInput.svelte.d.ts +11 -0
  52. package/dist/ui/components/forms/index.d.ts +2 -0
  53. package/dist/ui/components/forms/index.js +8 -0
  54. package/dist/ui/components/gallery/index.d.ts +5 -0
  55. package/dist/ui/components/gallery/index.js +13 -0
  56. package/dist/ui/components/icons/IconLegend.svelte +83 -0
  57. package/dist/ui/components/icons/IconLegend.svelte.d.ts +11 -0
  58. package/dist/ui/components/icons/Icons.svelte +115 -0
  59. package/dist/ui/components/icons/Icons.svelte.d.ts +8 -0
  60. package/dist/ui/components/icons/index.d.ts +3 -0
  61. package/dist/ui/components/icons/index.js +9 -0
  62. package/dist/ui/components/indicators/CreditBalance.svelte +67 -0
  63. package/dist/ui/components/indicators/CreditBalance.svelte.d.ts +9 -0
  64. package/dist/ui/components/indicators/ScoreBar.svelte +63 -0
  65. package/dist/ui/components/indicators/ScoreBar.svelte.d.ts +9 -0
  66. package/dist/ui/components/indicators/StatusBadge.svelte +46 -0
  67. package/dist/ui/components/indicators/StatusBadge.svelte.d.ts +7 -0
  68. package/dist/ui/components/indicators/index.d.ts +4 -0
  69. package/dist/ui/components/indicators/index.js +10 -0
  70. package/dist/{components/ui → ui/components/primitives}/accordion/accordion-content.svelte +1 -1
  71. package/dist/{components/ui → ui/components/primitives}/accordion/accordion-item.svelte +1 -1
  72. package/dist/{components/ui → ui/components/primitives}/accordion/accordion-trigger.svelte +1 -1
  73. package/dist/ui/components/primitives/badge/badge.svelte +50 -0
  74. package/dist/ui/components/primitives/badge/badge.svelte.d.ts +60 -0
  75. package/dist/ui/components/primitives/badge/index.d.ts +2 -0
  76. package/dist/ui/components/primitives/badge/index.js +2 -0
  77. package/dist/ui/components/primitives/button/button.svelte +82 -0
  78. package/dist/ui/components/primitives/button/button.svelte.d.ts +132 -0
  79. package/dist/ui/components/primitives/button/index.d.ts +2 -0
  80. package/dist/ui/components/primitives/button/index.js +4 -0
  81. package/dist/ui/components/primitives/card/card-content.svelte +16 -0
  82. package/dist/ui/components/primitives/card/card-content.svelte.d.ts +5 -0
  83. package/dist/ui/components/primitives/card/card-description.svelte +16 -0
  84. package/dist/ui/components/primitives/card/card-description.svelte.d.ts +5 -0
  85. package/dist/ui/components/primitives/card/card-footer.svelte +16 -0
  86. package/dist/ui/components/primitives/card/card-footer.svelte.d.ts +5 -0
  87. package/dist/ui/components/primitives/card/card-header.svelte +16 -0
  88. package/dist/ui/components/primitives/card/card-header.svelte.d.ts +5 -0
  89. package/dist/ui/components/primitives/card/card-title.svelte +25 -0
  90. package/dist/ui/components/primitives/card/card-title.svelte.d.ts +8 -0
  91. package/dist/ui/components/primitives/card/card.svelte +20 -0
  92. package/dist/ui/components/primitives/card/card.svelte.d.ts +5 -0
  93. package/dist/ui/components/primitives/card/index.d.ts +7 -0
  94. package/dist/ui/components/primitives/card/index.js +9 -0
  95. package/dist/{components/ui → ui/components/primitives}/dialog/dialog-content.svelte +1 -1
  96. package/dist/{components/ui → ui/components/primitives}/dialog/dialog-description.svelte +1 -1
  97. package/dist/{components/ui → ui/components/primitives}/dialog/dialog-footer.svelte +1 -1
  98. package/dist/{components/ui → ui/components/primitives}/dialog/dialog-header.svelte +1 -1
  99. package/dist/{components/ui → ui/components/primitives}/dialog/dialog-overlay.svelte +1 -1
  100. package/dist/{components/ui → ui/components/primitives}/dialog/dialog-title.svelte +1 -1
  101. package/dist/ui/components/primitives/input/index.d.ts +2 -0
  102. package/dist/ui/components/primitives/input/index.js +4 -0
  103. package/dist/ui/components/primitives/input/input.svelte +46 -0
  104. package/dist/ui/components/primitives/input/input.svelte.d.ts +13 -0
  105. package/dist/{components/ui → ui/components/primitives}/select/select-content.svelte +1 -1
  106. package/dist/{components/ui → ui/components/primitives}/select/select-group-heading.svelte +1 -1
  107. package/dist/{components/ui → ui/components/primitives}/select/select-item.svelte +1 -1
  108. package/dist/{components/ui → ui/components/primitives}/select/select-scroll-down-button.svelte +1 -1
  109. package/dist/{components/ui → ui/components/primitives}/select/select-scroll-up-button.svelte +1 -1
  110. package/dist/{components/ui → ui/components/primitives}/select/select-separator.svelte +1 -1
  111. package/dist/{components/ui → ui/components/primitives}/select/select-trigger.svelte +1 -1
  112. package/dist/ui/components/primitives/separator/index.d.ts +2 -0
  113. package/dist/ui/components/primitives/separator/index.js +4 -0
  114. package/dist/ui/components/primitives/separator/separator.svelte +22 -0
  115. package/dist/ui/components/primitives/separator/separator.svelte.d.ts +4 -0
  116. package/dist/{components/ui → ui/components/primitives}/sheet/sheet-content.svelte +1 -1
  117. package/dist/{components/ui → ui/components/primitives}/sheet/sheet-description.svelte +1 -1
  118. package/dist/{components/ui → ui/components/primitives}/sheet/sheet-footer.svelte +1 -1
  119. package/dist/{components/ui → ui/components/primitives}/sheet/sheet-header.svelte +1 -1
  120. package/dist/{components/ui → ui/components/primitives}/sheet/sheet-overlay.svelte +1 -1
  121. package/dist/{components/ui → ui/components/primitives}/sheet/sheet-title.svelte +1 -1
  122. package/dist/ui/components/primitives/skeleton/index.d.ts +2 -0
  123. package/dist/ui/components/primitives/skeleton/index.js +4 -0
  124. package/dist/ui/components/primitives/skeleton/skeleton.svelte +17 -0
  125. package/dist/ui/components/primitives/skeleton/skeleton.svelte.d.ts +5 -0
  126. package/dist/{components/ui → ui/components/primitives}/table/table-body.svelte +1 -1
  127. package/dist/{components/ui → ui/components/primitives}/table/table-caption.svelte +1 -1
  128. package/dist/{components/ui → ui/components/primitives}/table/table-cell.svelte +1 -1
  129. package/dist/{components/ui → ui/components/primitives}/table/table-footer.svelte +1 -1
  130. package/dist/{components/ui → ui/components/primitives}/table/table-head.svelte +1 -1
  131. package/dist/{components/ui → ui/components/primitives}/table/table-header.svelte +1 -1
  132. package/dist/{components/ui → ui/components/primitives}/table/table-row.svelte +1 -1
  133. package/dist/{components/ui → ui/components/primitives}/table/table.svelte +1 -1
  134. package/dist/{components/ui → ui/components/primitives}/tabs/tabs-content.svelte +1 -1
  135. package/dist/{components/ui → ui/components/primitives}/tabs/tabs-list.svelte +1 -1
  136. package/dist/{components/ui → ui/components/primitives}/tabs/tabs-trigger.svelte +1 -1
  137. package/dist/ui/components/primitives/textarea/index.d.ts +2 -0
  138. package/dist/ui/components/primitives/textarea/index.js +4 -0
  139. package/dist/ui/components/primitives/textarea/textarea.svelte +24 -0
  140. package/dist/ui/components/primitives/textarea/textarea.svelte.d.ts +6 -0
  141. package/dist/ui/components/states/EmptyState.svelte +28 -0
  142. package/dist/ui/components/states/EmptyState.svelte.d.ts +10 -0
  143. package/dist/ui/components/states/Loading.svelte +62 -0
  144. package/dist/ui/components/states/Loading.svelte.d.ts +7 -0
  145. package/dist/ui/components/states/LoadingSkeleton.svelte +46 -0
  146. package/dist/ui/components/states/LoadingSkeleton.svelte.d.ts +8 -0
  147. package/dist/ui/components/states/ThemeToggle.svelte +138 -0
  148. package/dist/ui/components/states/ThemeToggle.svelte.d.ts +6 -0
  149. package/dist/ui/components/states/index.d.ts +5 -0
  150. package/dist/ui/components/states/index.js +11 -0
  151. package/dist/{components → ui/components}/ui/Accordion.svelte +1 -1
  152. package/dist/ui/components/ui/Badge.svelte +52 -0
  153. package/dist/ui/components/ui/Badge.svelte.d.ts +28 -0
  154. package/dist/ui/components/ui/Button.svelte +77 -0
  155. package/dist/ui/components/ui/Button.svelte.d.ts +34 -0
  156. package/dist/ui/components/ui/Card.svelte +102 -0
  157. package/dist/ui/components/ui/Card.svelte.d.ts +46 -0
  158. package/dist/ui/components/ui/CollapsibleSection.svelte +65 -0
  159. package/dist/ui/components/ui/CollapsibleSection.svelte.d.ts +10 -0
  160. package/dist/{components → ui/components}/ui/Dialog.svelte +1 -1
  161. package/dist/ui/components/ui/Input.svelte +81 -0
  162. package/dist/ui/components/ui/Input.svelte.d.ts +35 -0
  163. package/dist/{components → ui/components}/ui/Select.svelte +1 -1
  164. package/dist/{components → ui/components}/ui/Sheet.svelte +1 -1
  165. package/dist/ui/components/ui/Skeleton.svelte +31 -0
  166. package/dist/ui/components/ui/Skeleton.svelte.d.ts +26 -0
  167. package/dist/ui/components/ui/Spinner.svelte +45 -0
  168. package/dist/ui/components/ui/Spinner.svelte.d.ts +15 -0
  169. package/dist/{components → ui/components}/ui/Table.svelte +2 -2
  170. package/dist/{components → ui/components}/ui/Table.svelte.d.ts +1 -1
  171. package/dist/{components → ui/components}/ui/Tabs.svelte +2 -2
  172. package/dist/ui/components/ui/Textarea.svelte +81 -0
  173. package/dist/ui/components/ui/Textarea.svelte.d.ts +35 -0
  174. package/dist/{components → ui/components}/ui/Toast.svelte +1 -1
  175. package/dist/ui/components/ui/index.d.ts +18 -0
  176. package/dist/ui/components/ui/index.js +28 -0
  177. package/dist/{components → ui/components}/ui/toast.d.ts +1 -1
  178. package/dist/{components → ui/components}/ui/toast.js +2 -2
  179. package/dist/ui/index.d.ts +10 -0
  180. package/dist/ui/index.js +22 -0
  181. package/dist/ui/stores/theme.d.ts +12 -0
  182. package/dist/ui/stores/theme.js +52 -0
  183. package/dist/ui/styles/content.css +514 -0
  184. package/dist/ui/styles/grove.css +715 -0
  185. package/dist/ui/styles/tokens.css +429 -0
  186. package/dist/ui/tailwind.preset.d.ts +340 -0
  187. package/dist/ui/tailwind.preset.js +441 -0
  188. package/dist/ui/tokens/animation.d.ts +417 -0
  189. package/dist/ui/tokens/animation.js +139 -0
  190. package/dist/ui/tokens/colors.d.ts +183 -0
  191. package/dist/ui/tokens/colors.js +97 -0
  192. package/dist/ui/tokens/effects.d.ts +111 -0
  193. package/dist/ui/tokens/effects.js +61 -0
  194. package/dist/ui/tokens/index.d.ts +6 -0
  195. package/dist/ui/tokens/index.js +19 -0
  196. package/dist/ui/tokens/spacing.d.ts +89 -0
  197. package/dist/ui/tokens/spacing.js +49 -0
  198. package/dist/ui/tokens/typography.d.ts +85 -0
  199. package/dist/ui/tokens/typography.js +68 -0
  200. package/dist/ui/utils/cn.d.ts +13 -0
  201. package/dist/ui/utils/cn.js +24 -0
  202. package/dist/ui/utils/index.d.ts +2 -0
  203. package/dist/ui/utils/index.js +8 -0
  204. package/dist/utils/index.d.ts +11 -0
  205. package/dist/utils/index.js +14 -0
  206. package/dist/utils/markdown.d.ts +11 -0
  207. package/dist/utils/markdown.js +25 -0
  208. package/dist/utils/sanitize.js +2 -3
  209. package/package.json +73 -10
  210. package/dist/components/ui/index.d.ts +0 -14
  211. package/dist/components/ui/index.js +0 -18
  212. /package/dist/{components → ui/components}/gallery/ImageGallery.svelte +0 -0
  213. /package/dist/{components → ui/components}/gallery/ImageGallery.svelte.d.ts +0 -0
  214. /package/dist/{components → ui/components}/gallery/Lightbox.svelte +0 -0
  215. /package/dist/{components → ui/components}/gallery/Lightbox.svelte.d.ts +0 -0
  216. /package/dist/{components → ui/components}/gallery/LightboxCaption.svelte +0 -0
  217. /package/dist/{components → ui/components}/gallery/LightboxCaption.svelte.d.ts +0 -0
  218. /package/dist/{components → ui/components}/gallery/ZoomableImage.svelte +0 -0
  219. /package/dist/{components → ui/components}/gallery/ZoomableImage.svelte.d.ts +0 -0
  220. /package/dist/{components/ui → ui/components/primitives}/accordion/accordion-content.svelte.d.ts +0 -0
  221. /package/dist/{components/ui → ui/components/primitives}/accordion/accordion-item.svelte.d.ts +0 -0
  222. /package/dist/{components/ui → ui/components/primitives}/accordion/accordion-trigger.svelte.d.ts +0 -0
  223. /package/dist/{components/ui → ui/components/primitives}/accordion/index.d.ts +0 -0
  224. /package/dist/{components/ui → ui/components/primitives}/accordion/index.js +0 -0
  225. /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-content.svelte.d.ts +0 -0
  226. /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-description.svelte.d.ts +0 -0
  227. /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-footer.svelte.d.ts +0 -0
  228. /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-header.svelte.d.ts +0 -0
  229. /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-overlay.svelte.d.ts +0 -0
  230. /package/dist/{components/ui → ui/components/primitives}/dialog/dialog-title.svelte.d.ts +0 -0
  231. /package/dist/{components/ui → ui/components/primitives}/dialog/index.d.ts +0 -0
  232. /package/dist/{components/ui → ui/components/primitives}/dialog/index.js +0 -0
  233. /package/dist/{components/ui → ui/components/primitives}/select/index.d.ts +0 -0
  234. /package/dist/{components/ui → ui/components/primitives}/select/index.js +0 -0
  235. /package/dist/{components/ui → ui/components/primitives}/select/select-content.svelte.d.ts +0 -0
  236. /package/dist/{components/ui → ui/components/primitives}/select/select-group-heading.svelte.d.ts +0 -0
  237. /package/dist/{components/ui → ui/components/primitives}/select/select-item.svelte.d.ts +0 -0
  238. /package/dist/{components/ui → ui/components/primitives}/select/select-scroll-down-button.svelte.d.ts +0 -0
  239. /package/dist/{components/ui → ui/components/primitives}/select/select-scroll-up-button.svelte.d.ts +0 -0
  240. /package/dist/{components/ui → ui/components/primitives}/select/select-separator.svelte.d.ts +0 -0
  241. /package/dist/{components/ui → ui/components/primitives}/select/select-trigger.svelte.d.ts +0 -0
  242. /package/dist/{components/ui → ui/components/primitives}/sheet/index.d.ts +0 -0
  243. /package/dist/{components/ui → ui/components/primitives}/sheet/index.js +0 -0
  244. /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-content.svelte.d.ts +0 -0
  245. /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-description.svelte.d.ts +0 -0
  246. /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-footer.svelte.d.ts +0 -0
  247. /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-header.svelte.d.ts +0 -0
  248. /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-overlay.svelte.d.ts +0 -0
  249. /package/dist/{components/ui → ui/components/primitives}/sheet/sheet-title.svelte.d.ts +0 -0
  250. /package/dist/{components/ui → ui/components/primitives}/table/index.d.ts +0 -0
  251. /package/dist/{components/ui → ui/components/primitives}/table/index.js +0 -0
  252. /package/dist/{components/ui → ui/components/primitives}/table/table-body.svelte.d.ts +0 -0
  253. /package/dist/{components/ui → ui/components/primitives}/table/table-caption.svelte.d.ts +0 -0
  254. /package/dist/{components/ui → ui/components/primitives}/table/table-cell.svelte.d.ts +0 -0
  255. /package/dist/{components/ui → ui/components/primitives}/table/table-footer.svelte.d.ts +0 -0
  256. /package/dist/{components/ui → ui/components/primitives}/table/table-head.svelte.d.ts +0 -0
  257. /package/dist/{components/ui → ui/components/primitives}/table/table-header.svelte.d.ts +0 -0
  258. /package/dist/{components/ui → ui/components/primitives}/table/table-row.svelte.d.ts +0 -0
  259. /package/dist/{components/ui → ui/components/primitives}/table/table.svelte.d.ts +0 -0
  260. /package/dist/{components/ui → ui/components/primitives}/tabs/index.d.ts +0 -0
  261. /package/dist/{components/ui → ui/components/primitives}/tabs/index.js +0 -0
  262. /package/dist/{components/ui → ui/components/primitives}/tabs/tabs-content.svelte.d.ts +0 -0
  263. /package/dist/{components/ui → ui/components/primitives}/tabs/tabs-list.svelte.d.ts +0 -0
  264. /package/dist/{components/ui → ui/components/primitives}/tabs/tabs-trigger.svelte.d.ts +0 -0
  265. /package/dist/{components → ui/components}/ui/Accordion.svelte.d.ts +0 -0
  266. /package/dist/{components → ui/components}/ui/Dialog.svelte.d.ts +0 -0
  267. /package/dist/{components → ui/components}/ui/Select.svelte.d.ts +0 -0
  268. /package/dist/{components → ui/components}/ui/Sheet.svelte.d.ts +0 -0
  269. /package/dist/{components → ui/components}/ui/Tabs.svelte.d.ts +0 -0
  270. /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;
@@ -4,7 +4,7 @@
4
4
  SelectContent,
5
5
  SelectItem,
6
6
  SelectTrigger
7
- } from "./select";
7
+ } from "../primitives/select";
8
8
  import type { Snippet } from "svelte";
9
9
 
10
10
  interface Option {
@@ -8,7 +8,7 @@
8
8
  SheetTitle,
9
9
  SheetDescription,
10
10
  SheetFooter
11
- } from "./sheet";
11
+ } from "../primitives/sheet";
12
12
  import type { Snippet } from "svelte";
13
13
 
14
14
  /**
@@ -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 "./table";
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 "./tabs";
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;
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { Toaster } from "svelte-sonner";
2
+ import { Toaster } from "sonner";
3
3
 
4
4
  interface Props {
5
5
  position?:
@@ -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';
@@ -3,7 +3,7 @@
3
3
  * Wraps sonner toast with consistent defaults and API
4
4
  *
5
5
  * @example
6
- * import { toast } from "./";
6
+ * import { toast } from "../../../components/ui";
7
7
  * toast.success("Profile updated!");
8
8
  *
9
9
  * @example
@@ -1,10 +1,10 @@
1
- import { toast as sonnerToast } from "svelte-sonner";
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';
@@ -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();