singularity-components 0.1.194 → 0.1.196

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 (203) hide show
  1. package/dist/components/blocks/badges/category-badge.d.ts +11 -0
  2. package/dist/components/blocks/badges/category-badge.js +34 -0
  3. package/dist/components/blocks/badges/category-badge.js.map +1 -0
  4. package/dist/components/blocks/cards/blogpost-card.d.ts +4 -2
  5. package/dist/components/blocks/cards/blogpost-card.js +9 -4
  6. package/dist/components/blocks/cards/blogpost-card.js.map +1 -1
  7. package/dist/components/blocks/cards/card.d.ts +7 -8
  8. package/dist/components/blocks/directory/author-card.d.ts +10 -0
  9. package/dist/components/blocks/directory/author-card.js +50 -0
  10. package/dist/components/blocks/directory/author-card.js.map +1 -0
  11. package/dist/components/blocks/directory/category-card.d.ts +10 -0
  12. package/dist/components/blocks/directory/category-card.js +26 -0
  13. package/dist/components/blocks/directory/category-card.js.map +1 -0
  14. package/dist/components/blocks/empty-state/EmptyState.d.ts +2 -2
  15. package/dist/components/blocks/extras/extras-hub-card.d.ts +16 -0
  16. package/dist/components/blocks/extras/extras-hub-card.js +21 -0
  17. package/dist/components/blocks/extras/extras-hub-card.js.map +1 -0
  18. package/dist/components/blocks/gallery/image-gallery.d.ts +14 -0
  19. package/dist/components/blocks/gallery/image-gallery.js +211 -0
  20. package/dist/components/blocks/gallery/image-gallery.js.map +1 -0
  21. package/dist/components/blocks/index.d.ts +12 -1
  22. package/dist/components/blocks/index.js +11 -0
  23. package/dist/components/blocks/index.js.map +1 -1
  24. package/dist/components/blocks/loading/loading-skeletons.d.ts +15 -0
  25. package/dist/components/blocks/loading/loading-skeletons.js +78 -0
  26. package/dist/components/blocks/loading/loading-skeletons.js.map +1 -0
  27. package/dist/components/blocks/login/login.d.ts +78 -0
  28. package/dist/components/blocks/login/login.js +95 -0
  29. package/dist/components/blocks/login/login.js.map +1 -0
  30. package/dist/components/blocks/marketing/page-hero.d.ts +13 -0
  31. package/dist/components/blocks/marketing/page-hero.js +37 -0
  32. package/dist/components/blocks/marketing/page-hero.js.map +1 -0
  33. package/dist/components/blocks/marketing/stats-grid.d.ts +16 -0
  34. package/dist/components/blocks/marketing/stats-grid.js +30 -0
  35. package/dist/components/blocks/marketing/stats-grid.js.map +1 -0
  36. package/dist/components/blocks/marketing/timeline.d.ts +17 -0
  37. package/dist/components/blocks/marketing/timeline.js +45 -0
  38. package/dist/components/blocks/marketing/timeline.js.map +1 -0
  39. package/dist/components/blocks/marketing/values-grid.d.ts +16 -0
  40. package/dist/components/blocks/marketing/values-grid.js +29 -0
  41. package/dist/components/blocks/marketing/values-grid.js.map +1 -0
  42. package/dist/components/blocks/post-list/post-filters.d.ts +2 -2
  43. package/dist/components/blocks/post-list/post-list-with-filters.d.ts +2 -2
  44. package/dist/components/index.d.ts +30 -3
  45. package/dist/components/pages/about/about-page.d.ts +5 -0
  46. package/dist/components/pages/about/about-page.js +161 -0
  47. package/dist/components/pages/about/about-page.js.map +1 -0
  48. package/dist/components/pages/admin/admin-page.d.ts +2 -2
  49. package/dist/components/pages/admin/admin-page.js +4 -1
  50. package/dist/components/pages/admin/admin-page.js.map +1 -1
  51. package/dist/components/pages/author/author-page.d.ts +8 -0
  52. package/dist/components/pages/author/author-page.js +107 -0
  53. package/dist/components/pages/author/author-page.js.map +1 -0
  54. package/dist/components/pages/authors/authors-page.d.ts +5 -0
  55. package/dist/components/pages/authors/authors-page.js +25 -0
  56. package/dist/components/pages/authors/authors-page.js.map +1 -0
  57. package/dist/components/pages/blogpost/blogpost.d.ts +5 -2
  58. package/dist/components/pages/blogpost/blogpost.js +38 -18
  59. package/dist/components/pages/blogpost/blogpost.js.map +1 -1
  60. package/dist/components/pages/categories/categories-page.d.ts +5 -0
  61. package/dist/components/pages/categories/categories-page.js +33 -0
  62. package/dist/components/pages/categories/categories-page.js.map +1 -0
  63. package/dist/components/pages/category/category-page.d.ts +2 -2
  64. package/dist/components/pages/category/category-page.js +3 -1
  65. package/dist/components/pages/category/category-page.js.map +1 -1
  66. package/dist/components/pages/chat/chat-page.d.ts +2 -2
  67. package/dist/components/pages/contact/contact-page.d.ts +5 -0
  68. package/dist/components/pages/contact/contact-page.js +173 -0
  69. package/dist/components/pages/contact/contact-page.js.map +1 -0
  70. package/dist/components/pages/content-blocks/content-blocks-page.d.ts +5 -0
  71. package/dist/components/pages/content-blocks/content-blocks-page.js +86 -0
  72. package/dist/components/pages/content-blocks/content-blocks-page.js.map +1 -0
  73. package/dist/components/pages/extras/extras-hub-page.d.ts +10 -0
  74. package/dist/components/pages/extras/extras-hub-page.js +110 -0
  75. package/dist/components/pages/extras/extras-hub-page.js.map +1 -0
  76. package/dist/components/pages/index.d.ts +15 -1
  77. package/dist/components/pages/index.js +12 -0
  78. package/dist/components/pages/index.js.map +1 -1
  79. package/dist/components/pages/login/login-page.d.ts +2 -2
  80. package/dist/components/pages/login/login-page.js +19 -69
  81. package/dist/components/pages/login/login-page.js.map +1 -1
  82. package/dist/components/pages/maintenance/maintenance-page.d.ts +2 -2
  83. package/dist/components/pages/membership/membership-page.d.ts +5 -0
  84. package/dist/components/pages/membership/membership-page.js +131 -0
  85. package/dist/components/pages/membership/membership-page.js.map +1 -0
  86. package/dist/components/pages/mosaic/mosaic-page.d.ts +5 -0
  87. package/dist/components/pages/mosaic/mosaic-page.js +81 -0
  88. package/dist/components/pages/mosaic/mosaic-page.js.map +1 -0
  89. package/dist/components/pages/newsletter/newsletter-page.d.ts +5 -0
  90. package/dist/components/pages/newsletter/newsletter-page.js +148 -0
  91. package/dist/components/pages/newsletter/newsletter-page.js.map +1 -0
  92. package/dist/components/pages/not-found/not-found.d.ts +2 -2
  93. package/dist/components/pages/privacy/privacy-page.d.ts +2 -2
  94. package/dist/components/pages/resources/resources-page.d.ts +5 -0
  95. package/dist/components/pages/resources/resources-page.js +24 -0
  96. package/dist/components/pages/resources/resources-page.js.map +1 -0
  97. package/dist/components/pages/search/search-page.d.ts +2 -2
  98. package/dist/components/pages/startpage/startpage.d.ts +2 -2
  99. package/dist/components/pages/startpage/startpage.js +6 -4
  100. package/dist/components/pages/startpage/startpage.js.map +1 -1
  101. package/dist/components/pages/terms/terms-page.d.ts +2 -2
  102. package/dist/components/primitives/accordion/accordion.d.ts +5 -5
  103. package/dist/components/primitives/accordion/accordion.js +14 -16
  104. package/dist/components/primitives/accordion/accordion.js.map +1 -1
  105. package/dist/components/primitives/alert/alert.d.ts +4 -5
  106. package/dist/components/primitives/avatar/avatar.d.ts +6 -7
  107. package/dist/components/primitives/badge/badge.js +1 -1
  108. package/dist/components/primitives/badge/badge.js.map +1 -1
  109. package/dist/components/primitives/badge/badges.d.ts +1 -2
  110. package/dist/components/primitives/buttons/button.d.ts +4 -4
  111. package/dist/components/primitives/buttons/icon-button.d.ts +3 -3
  112. package/dist/components/primitives/buttons/link-button.d.ts +2 -3
  113. package/dist/components/primitives/collapsible/collapsible.d.ts +3 -4
  114. package/dist/components/primitives/collapsible/collapsible.js +4 -1
  115. package/dist/components/primitives/collapsible/collapsible.js.map +1 -1
  116. package/dist/components/primitives/dropdown-menu/dropdown-menu.d.ts +1 -2
  117. package/dist/components/primitives/dropdown-menu/dropdown-menu.js +6 -1
  118. package/dist/components/primitives/dropdown-menu/dropdown-menu.js.map +1 -1
  119. package/dist/components/primitives/forms/checkbox.d.ts +2 -2
  120. package/dist/components/primitives/forms/checkbox.js +1 -1
  121. package/dist/components/primitives/forms/checkbox.js.map +1 -1
  122. package/dist/components/primitives/forms/field.d.ts +14 -13
  123. package/dist/components/primitives/forms/field.js +4 -2
  124. package/dist/components/primitives/forms/field.js.map +1 -1
  125. package/dist/components/primitives/forms/form-control.d.ts +28 -0
  126. package/dist/components/primitives/forms/form-control.js +40 -0
  127. package/dist/components/primitives/forms/form-control.js.map +1 -0
  128. package/dist/components/primitives/forms/form.d.ts +12 -0
  129. package/dist/components/primitives/forms/form.js +30 -0
  130. package/dist/components/primitives/forms/form.js.map +1 -0
  131. package/dist/components/primitives/forms/input.d.ts +1 -2
  132. package/dist/components/primitives/forms/select.d.ts +7 -8
  133. package/dist/components/primitives/forms/select.js +12 -12
  134. package/dist/components/primitives/forms/select.js.map +1 -1
  135. package/dist/components/primitives/forms/textarea.d.ts +1 -2
  136. package/dist/components/primitives/icon/icon.d.ts +4 -4
  137. package/dist/components/primitives/icon/icon.js +2 -1
  138. package/dist/components/primitives/icon/icon.js.map +1 -1
  139. package/dist/components/primitives/index.d.ts +6 -3
  140. package/dist/components/primitives/index.js +3 -0
  141. package/dist/components/primitives/index.js.map +1 -1
  142. package/dist/components/primitives/label/label.d.ts +1 -2
  143. package/dist/components/primitives/layout/layout.d.ts +5 -4
  144. package/dist/components/primitives/layout/layout.js.map +1 -1
  145. package/dist/components/primitives/link/link.d.ts +4 -5
  146. package/dist/components/primitives/separator/separator.d.ts +2 -2
  147. package/dist/components/primitives/sheet/sheet.d.ts +2 -3
  148. package/dist/components/primitives/sheet/sheet.js +1 -1
  149. package/dist/components/primitives/sheet/sheet.js.map +1 -1
  150. package/dist/components/primitives/skeleton/skeleton.d.ts +2 -2
  151. package/dist/components/primitives/sonner/sonner.d.ts +2 -2
  152. package/dist/components/primitives/spinner/spinner.d.ts +2 -2
  153. package/dist/components/primitives/stack/stack.d.ts +47 -3
  154. package/dist/components/primitives/stack/stack.js +44 -42
  155. package/dist/components/primitives/stack/stack.js.map +1 -1
  156. package/dist/components/primitives/text/heading.d.ts +2 -3
  157. package/dist/components/primitives/text/internal/text-element.d.ts +9 -4
  158. package/dist/components/primitives/text/internal/text-element.js +3 -0
  159. package/dist/components/primitives/text/internal/text-element.js.map +1 -1
  160. package/dist/components/primitives/text/text-code.d.ts +3 -3
  161. package/dist/components/primitives/text/text-div.d.ts +2 -3
  162. package/dist/components/primitives/text/text-span.d.ts +2 -3
  163. package/dist/components/primitives/text/text-time.d.ts +2 -3
  164. package/dist/components/primitives/text/text.d.ts +2 -3
  165. package/dist/components/primitives/ui-image/ui-image.d.ts +2 -3
  166. package/dist/components/primitives/ui-link/ui-link.d.ts +2 -3
  167. package/dist/components/providers/SingularityContext.d.ts +0 -1
  168. package/dist/components/providers/auth-provider.d.ts +2 -2
  169. package/dist/components/providers/index.d.ts +0 -1
  170. package/dist/components/providers/theme-provider.d.ts +1 -2
  171. package/dist/components/templates/container/container.d.ts +4 -5
  172. package/dist/components/templates/footer/footer.d.ts +2 -2
  173. package/dist/components/templates/form/form.d.ts +2 -2
  174. package/dist/components/templates/hero/hero.d.ts +2 -2
  175. package/dist/components/templates/index.d.ts +1 -1
  176. package/dist/components/templates/index.js +1 -0
  177. package/dist/components/templates/index.js.map +1 -1
  178. package/dist/components/templates/loading-screen/loading-screen.d.ts +10 -0
  179. package/dist/components/templates/loading-screen/loading-screen.js +39 -0
  180. package/dist/components/templates/loading-screen/loading-screen.js.map +1 -0
  181. package/dist/components/templates/navigation/header.d.ts +1 -2
  182. package/dist/components/templates/navigation/index.d.ts +0 -1
  183. package/dist/css/variables.css +2 -0
  184. package/dist/css/variables.css.map +1 -1
  185. package/dist/data/posts.d.ts +5 -0
  186. package/dist/data/posts.js +37 -4
  187. package/dist/data/posts.js.map +1 -1
  188. package/dist/index.d.ts +30 -3
  189. package/dist/lib/forms/field-props.d.ts +60 -0
  190. package/dist/lib/forms/field-props.js +60 -0
  191. package/dist/lib/forms/field-props.js.map +1 -0
  192. package/dist/lib/forms/index.d.ts +11 -0
  193. package/dist/lib/forms/index.js +3 -0
  194. package/dist/lib/forms/index.js.map +1 -0
  195. package/dist/lib/forms/tanstack-field.d.ts +56 -0
  196. package/dist/lib/forms/tanstack-field.js +114 -0
  197. package/dist/lib/forms/tanstack-field.js.map +1 -0
  198. package/dist/lib/index.d.ts +11 -0
  199. package/dist/lib/index.js +1 -0
  200. package/dist/lib/index.js.map +1 -1
  201. package/dist/main.css +442 -117
  202. package/dist/main.css.map +1 -1
  203. package/package.json +64 -39
@@ -1,5 +1,16 @@
1
+ export * from "./badges/category-badge.js";
1
2
  export * from "./cards/blogpost-card.js";
2
3
  export * from "./cards/card.js";
4
+ export * from "./directory/author-card.js";
5
+ export * from "./directory/category-card.js";
3
6
  export * from "./empty-state/EmptyState.js";
7
+ export * from "./extras/extras-hub-card.js";
8
+ export * from "./gallery/image-gallery.js";
9
+ export * from "./loading/loading-skeletons.js";
10
+ export * from "./login/login.js";
11
+ export * from "./marketing/page-hero.js";
12
+ export * from "./marketing/stats-grid.js";
13
+ export * from "./marketing/timeline.js";
14
+ export * from "./marketing/values-grid.js";
4
15
  export * from "./post-list/post-list-with-filters.js";
5
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/blocks/index.ts"],"sourcesContent":["/**\n * Blocks index\n *\n * Please keep exports sorted alphabetically by path!\n */\n\nexport * from \"./cards/blogpost-card\";\nexport * from \"./cards/card\";\nexport * from \"./empty-state/EmptyState\";\nexport * from \"./post-list/post-list-with-filters\";\n"],"mappings":"AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/blocks/index.ts"],"sourcesContent":["/**\n * Blocks index\n *\n * Please keep exports sorted alphabetically by path!\n */\n\nexport * from \"./badges/category-badge\";\nexport * from \"./cards/blogpost-card\";\nexport * from \"./cards/card\";\nexport * from \"./directory/author-card\";\nexport * from \"./directory/category-card\";\nexport * from \"./empty-state/EmptyState\";\nexport * from \"./extras/extras-hub-card\";\nexport * from \"./gallery/image-gallery\";\nexport * from \"./loading/loading-skeletons\";\nexport * from \"./login/login\";\nexport * from \"./marketing/page-hero\";\nexport * from \"./marketing/stats-grid\";\nexport * from \"./marketing/timeline\";\nexport * from \"./marketing/values-grid\";\nexport * from \"./post-list/post-list-with-filters\";\n"],"mappings":"AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,15 @@
1
+ import * as React from 'react';
2
+
3
+ declare function PostCardSkeleton(): React.JSX.Element;
4
+ declare function PostListSkeleton({ count }: {
5
+ count?: number;
6
+ }): React.JSX.Element;
7
+ declare function PostListRowSkeleton({ count }: {
8
+ count?: number;
9
+ }): React.JSX.Element;
10
+ declare function CommentSkeleton({ count }: {
11
+ count?: number;
12
+ }): React.JSX.Element;
13
+ declare function SinglePostSkeleton(): React.JSX.Element;
14
+
15
+ export { CommentSkeleton, PostCardSkeleton, PostListRowSkeleton, PostListSkeleton, SinglePostSkeleton };
@@ -0,0 +1,78 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Skeleton } from "../../primitives/skeleton/skeleton.js";
3
+ function PostCardSkeleton() {
4
+ return /* @__PURE__ */ jsxs("div", { className: "sg:rounded-lg sg:border sg:bg-card sg:overflow-hidden", children: [
5
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:w-full sg:h-48" }),
6
+ /* @__PURE__ */ jsxs("div", { className: "sg:p-5 sg:space-y-3", children: [
7
+ /* @__PURE__ */ jsxs("div", { className: "sg:flex sg:gap-2", children: [
8
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-5 sg:w-16 sg:rounded-full" }),
9
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-5 sg:w-20 sg:rounded-full" })
10
+ ] }),
11
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-6 sg:w-3/4" }),
12
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-4 sg:w-full" }),
13
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-4 sg:w-2/3" }),
14
+ /* @__PURE__ */ jsxs("div", { className: "sg:flex sg:items-center sg:gap-2 sg:pt-2", children: [
15
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-4 sg:w-4 sg:rounded-full" }),
16
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-4 sg:w-24" })
17
+ ] })
18
+ ] })
19
+ ] });
20
+ }
21
+ function PostListSkeleton({ count = 6 }) {
22
+ return /* @__PURE__ */ jsx("div", { className: "sg:grid sg:grid-cols-1 sm:sg:grid-cols-2 lg:sg:grid-cols-3 sg:gap-6", children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsx(PostCardSkeleton, {}, i)) });
23
+ }
24
+ function PostListRowSkeleton({ count = 4 }) {
25
+ return /* @__PURE__ */ jsx("div", { className: "sg:flex sg:flex-col sg:gap-4", children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsxs(
26
+ "div",
27
+ {
28
+ className: "sg:flex sg:gap-4 sg:rounded-lg sg:border sg:bg-card sg:p-4",
29
+ children: [
30
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:w-24 sg:h-24 sg:rounded-md sg:shrink-0" }),
31
+ /* @__PURE__ */ jsxs("div", { className: "sg:flex-1 sg:space-y-2 sg:py-1", children: [
32
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-5 sg:w-3/4" }),
33
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-4 sg:w-full" }),
34
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-3 sg:w-1/3" })
35
+ ] })
36
+ ]
37
+ },
38
+ i
39
+ )) });
40
+ }
41
+ function CommentSkeleton({ count = 3 }) {
42
+ return /* @__PURE__ */ jsx("div", { className: "sg:space-y-4", children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "sg:rounded-lg sg:bg-accent sg:p-4 sg:space-y-2", children: [
43
+ /* @__PURE__ */ jsxs("div", { className: "sg:flex sg:items-center sg:gap-2", children: [
44
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-4 sg:w-20" }),
45
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-3 sg:w-16" })
46
+ ] }),
47
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-4 sg:w-full" }),
48
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-4 sg:w-2/3" })
49
+ ] }, i)) });
50
+ }
51
+ function SinglePostSkeleton() {
52
+ return /* @__PURE__ */ jsxs("div", { children: [
53
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:w-full sg:h-64 md:sg:h-96" }),
54
+ /* @__PURE__ */ jsxs("div", { className: "sg:container sg:max-w-3xl sg:py-12 sg:space-y-4", children: [
55
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-4 sg:w-32" }),
56
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-3 sg:w-48" }),
57
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-10 sg:w-3/4" }),
58
+ /* @__PURE__ */ jsxs("div", { className: "sg:flex sg:gap-2", children: [
59
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-6 sg:w-20 sg:rounded-full" }),
60
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-6 sg:w-24 sg:rounded-full" })
61
+ ] }),
62
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-5 sg:w-full" }),
63
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-5 sg:w-5/6" }),
64
+ /* @__PURE__ */ jsxs("div", { className: "sg:space-y-3 sg:pt-8", children: [
65
+ Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-4 sg:w-full" }, i)),
66
+ /* @__PURE__ */ jsx(Skeleton, { className: "sg:h-4 sg:w-2/3" })
67
+ ] })
68
+ ] })
69
+ ] });
70
+ }
71
+ export {
72
+ CommentSkeleton,
73
+ PostCardSkeleton,
74
+ PostListRowSkeleton,
75
+ PostListSkeleton,
76
+ SinglePostSkeleton
77
+ };
78
+ //# sourceMappingURL=loading-skeletons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/blocks/loading/loading-skeletons.tsx"],"sourcesContent":["import { Skeleton } from \"../../primitives/skeleton/skeleton\";\r\n\r\nexport function PostCardSkeleton() {\r\n\treturn (\r\n\t\t<div className=\"sg:rounded-lg sg:border sg:bg-card sg:overflow-hidden\">\r\n\t\t\t<Skeleton className=\"sg:w-full sg:h-48\" />\r\n\t\t\t<div className=\"sg:p-5 sg:space-y-3\">\r\n\t\t\t\t<div className=\"sg:flex sg:gap-2\">\r\n\t\t\t\t\t<Skeleton className=\"sg:h-5 sg:w-16 sg:rounded-full\" />\r\n\t\t\t\t\t<Skeleton className=\"sg:h-5 sg:w-20 sg:rounded-full\" />\r\n\t\t\t\t</div>\r\n\t\t\t\t<Skeleton className=\"sg:h-6 sg:w-3/4\" />\r\n\t\t\t\t<Skeleton className=\"sg:h-4 sg:w-full\" />\r\n\t\t\t\t<Skeleton className=\"sg:h-4 sg:w-2/3\" />\r\n\t\t\t\t<div className=\"sg:flex sg:items-center sg:gap-2 sg:pt-2\">\r\n\t\t\t\t\t<Skeleton className=\"sg:h-4 sg:w-4 sg:rounded-full\" />\r\n\t\t\t\t\t<Skeleton className=\"sg:h-4 sg:w-24\" />\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport function PostListSkeleton({ count = 6 }: { count?: number }) {\r\n\treturn (\r\n\t\t<div className=\"sg:grid sg:grid-cols-1 sm:sg:grid-cols-2 lg:sg:grid-cols-3 sg:gap-6\">\r\n\t\t\t{Array.from({ length: count }).map((_, i) => (\r\n\t\t\t\t<PostCardSkeleton key={i} />\r\n\t\t\t))}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport function PostListRowSkeleton({ count = 4 }: { count?: number }) {\r\n\treturn (\r\n\t\t<div className=\"sg:flex sg:flex-col sg:gap-4\">\r\n\t\t\t{Array.from({ length: count }).map((_, i) => (\r\n\t\t\t\t<div\r\n\t\t\t\t\tkey={i}\r\n\t\t\t\t\tclassName=\"sg:flex sg:gap-4 sg:rounded-lg sg:border sg:bg-card sg:p-4\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<Skeleton className=\"sg:w-24 sg:h-24 sg:rounded-md sg:shrink-0\" />\r\n\t\t\t\t\t<div className=\"sg:flex-1 sg:space-y-2 sg:py-1\">\r\n\t\t\t\t\t\t<Skeleton className=\"sg:h-5 sg:w-3/4\" />\r\n\t\t\t\t\t\t<Skeleton className=\"sg:h-4 sg:w-full\" />\r\n\t\t\t\t\t\t<Skeleton className=\"sg:h-3 sg:w-1/3\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t))}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport function CommentSkeleton({ count = 3 }: { count?: number }) {\r\n\treturn (\r\n\t\t<div className=\"sg:space-y-4\">\r\n\t\t\t{Array.from({ length: count }).map((_, i) => (\r\n\t\t\t\t<div key={i} className=\"sg:rounded-lg sg:bg-accent sg:p-4 sg:space-y-2\">\r\n\t\t\t\t\t<div className=\"sg:flex sg:items-center sg:gap-2\">\r\n\t\t\t\t\t\t<Skeleton className=\"sg:h-4 sg:w-20\" />\r\n\t\t\t\t\t\t<Skeleton className=\"sg:h-3 sg:w-16\" />\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<Skeleton className=\"sg:h-4 sg:w-full\" />\r\n\t\t\t\t\t<Skeleton className=\"sg:h-4 sg:w-2/3\" />\r\n\t\t\t\t</div>\r\n\t\t\t))}\r\n\t\t</div>\r\n\t);\r\n}\r\n\r\nexport function SinglePostSkeleton() {\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<Skeleton className=\"sg:w-full sg:h-64 md:sg:h-96\" />\r\n\t\t\t<div className=\"sg:container sg:max-w-3xl sg:py-12 sg:space-y-4\">\r\n\t\t\t\t<Skeleton className=\"sg:h-4 sg:w-32\" />\r\n\t\t\t\t<Skeleton className=\"sg:h-3 sg:w-48\" />\r\n\t\t\t\t<Skeleton className=\"sg:h-10 sg:w-3/4\" />\r\n\t\t\t\t<div className=\"sg:flex sg:gap-2\">\r\n\t\t\t\t\t<Skeleton className=\"sg:h-6 sg:w-20 sg:rounded-full\" />\r\n\t\t\t\t\t<Skeleton className=\"sg:h-6 sg:w-24 sg:rounded-full\" />\r\n\t\t\t\t</div>\r\n\t\t\t\t<Skeleton className=\"sg:h-5 sg:w-full\" />\r\n\t\t\t\t<Skeleton className=\"sg:h-5 sg:w-5/6\" />\r\n\t\t\t\t<div className=\"sg:space-y-3 sg:pt-8\">\r\n\t\t\t\t\t{Array.from({ length: 6 }).map((_, i) => (\r\n\t\t\t\t\t\t<Skeleton key={i} className=\"sg:h-4 sg:w-full\" />\r\n\t\t\t\t\t))}\r\n\t\t\t\t\t<Skeleton className=\"sg:h-4 sg:w-2/3\" />\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n"],"mappings":"AAKG,cAEC,YAFD;AALH,SAAS,gBAAgB;AAElB,SAAS,mBAAmB;AAClC,SACC,qBAAC,SAAI,WAAU,yDACd;AAAA,wBAAC,YAAS,WAAU,qBAAoB;AAAA,IACxC,qBAAC,SAAI,WAAU,uBACd;AAAA,2BAAC,SAAI,WAAU,oBACd;AAAA,4BAAC,YAAS,WAAU,kCAAiC;AAAA,QACrD,oBAAC,YAAS,WAAU,kCAAiC;AAAA,SACtD;AAAA,MACA,oBAAC,YAAS,WAAU,mBAAkB;AAAA,MACtC,oBAAC,YAAS,WAAU,oBAAmB;AAAA,MACvC,oBAAC,YAAS,WAAU,mBAAkB;AAAA,MACtC,qBAAC,SAAI,WAAU,4CACd;AAAA,4BAAC,YAAS,WAAU,iCAAgC;AAAA,QACpD,oBAAC,YAAS,WAAU,kBAAiB;AAAA,SACtC;AAAA,OACD;AAAA,KACD;AAEF;AAEO,SAAS,iBAAiB,EAAE,QAAQ,EAAE,GAAuB;AACnE,SACC,oBAAC,SAAI,WAAU,uEACb,gBAAM,KAAK,EAAE,QAAQ,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,MACtC,oBAAC,sBAAsB,CAAG,CAC1B,GACF;AAEF;AAEO,SAAS,oBAAoB,EAAE,QAAQ,EAAE,GAAuB;AACtE,SACC,oBAAC,SAAI,WAAU,gCACb,gBAAM,KAAK,EAAE,QAAQ,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,MACtC;AAAA,IAAC;AAAA;AAAA,MAEA,WAAU;AAAA,MAEV;AAAA,4BAAC,YAAS,WAAU,6CAA4C;AAAA,QAChE,qBAAC,SAAI,WAAU,kCACd;AAAA,8BAAC,YAAS,WAAU,mBAAkB;AAAA,UACtC,oBAAC,YAAS,WAAU,oBAAmB;AAAA,UACvC,oBAAC,YAAS,WAAU,mBAAkB;AAAA,WACvC;AAAA;AAAA;AAAA,IARK;AAAA,EASN,CACA,GACF;AAEF;AAEO,SAAS,gBAAgB,EAAE,QAAQ,EAAE,GAAuB;AAClE,SACC,oBAAC,SAAI,WAAU,gBACb,gBAAM,KAAK,EAAE,QAAQ,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,MACtC,qBAAC,SAAY,WAAU,kDACtB;AAAA,yBAAC,SAAI,WAAU,oCACd;AAAA,0BAAC,YAAS,WAAU,kBAAiB;AAAA,MACrC,oBAAC,YAAS,WAAU,kBAAiB;AAAA,OACtC;AAAA,IACA,oBAAC,YAAS,WAAU,oBAAmB;AAAA,IACvC,oBAAC,YAAS,WAAU,mBAAkB;AAAA,OAN7B,CAOV,CACA,GACF;AAEF;AAEO,SAAS,qBAAqB;AACpC,SACC,qBAAC,SACA;AAAA,wBAAC,YAAS,WAAU,gCAA+B;AAAA,IACnD,qBAAC,SAAI,WAAU,mDACd;AAAA,0BAAC,YAAS,WAAU,kBAAiB;AAAA,MACrC,oBAAC,YAAS,WAAU,kBAAiB;AAAA,MACrC,oBAAC,YAAS,WAAU,oBAAmB;AAAA,MACvC,qBAAC,SAAI,WAAU,oBACd;AAAA,4BAAC,YAAS,WAAU,kCAAiC;AAAA,QACrD,oBAAC,YAAS,WAAU,kCAAiC;AAAA,SACtD;AAAA,MACA,oBAAC,YAAS,WAAU,oBAAmB;AAAA,MACvC,oBAAC,YAAS,WAAU,mBAAkB;AAAA,MACtC,qBAAC,SAAI,WAAU,wBACb;AAAA,cAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAClC,oBAAC,YAAiB,WAAU,sBAAb,CAAgC,CAC/C;AAAA,QACD,oBAAC,YAAS,WAAU,mBAAkB;AAAA,SACvC;AAAA,OACD;AAAA,KACD;AAEF;","names":[]}
@@ -0,0 +1,78 @@
1
+ import * as React from 'react';
2
+
3
+ type LoginCredentials = {
4
+ username: string;
5
+ password: string;
6
+ };
7
+ type LoginProps = {
8
+ /**
9
+ * Form heading text.
10
+ */
11
+ title?: string;
12
+ /**
13
+ * Supporting text shown below the heading.
14
+ */
15
+ description?: string;
16
+ /**
17
+ * Label for the username or email field.
18
+ */
19
+ usernameLabel?: string;
20
+ /**
21
+ * Input type for the identifier field.
22
+ */
23
+ usernameType?: "text" | "email";
24
+ /**
25
+ * Placeholder for the identifier field.
26
+ */
27
+ usernamePlaceholder?: string;
28
+ /**
29
+ * Label for the password field.
30
+ */
31
+ passwordLabel?: string;
32
+ /**
33
+ * Placeholder for the password field.
34
+ */
35
+ passwordPlaceholder?: string;
36
+ /**
37
+ * Submit button label when not loading.
38
+ */
39
+ submitLabel?: string;
40
+ /**
41
+ * Submit button label while loading.
42
+ */
43
+ loadingLabel?: string;
44
+ /**
45
+ * Disables the form and shows the loading label on submit.
46
+ */
47
+ loading?: boolean;
48
+ /**
49
+ * Label for the optional sign-up link.
50
+ */
51
+ signUpLabel?: string;
52
+ /**
53
+ * Destination for the optional sign-up link.
54
+ */
55
+ signUpHref?: string;
56
+ /**
57
+ * Heading level for the title.
58
+ */
59
+ titleVariant?: "h1" | "h2" | "h3" | "h4";
60
+ /**
61
+ * Called when the form is submitted with valid credentials.
62
+ */
63
+ onSubmit?: (credentials: LoginCredentials) => void | Promise<void>;
64
+ /**
65
+ * Additional classes for the root wrapper.
66
+ */
67
+ className?: string;
68
+ /**
69
+ * Focuses the identifier field on mount.
70
+ */
71
+ autoFocus?: boolean;
72
+ };
73
+ /**
74
+ * Reusable login form with username/email and password fields.
75
+ */
76
+ declare function Login({ title, description, usernameLabel, usernameType, usernamePlaceholder, passwordLabel, passwordPlaceholder, submitLabel, loadingLabel, loading, signUpLabel, signUpHref, titleVariant, onSubmit, className, autoFocus, }: LoginProps): React.JSX.Element;
77
+
78
+ export { Login, type LoginCredentials, type LoginProps };
@@ -0,0 +1,95 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useId, useState } from "react";
4
+ import { Button } from "../../primitives/buttons/button.js";
5
+ import { Input } from "../../primitives/forms/input.js";
6
+ import { Label } from "../../primitives/label/label.js";
7
+ import { Heading, Link, Text } from "../../primitives/index.js";
8
+ import { cn } from "../../../utils/index.js";
9
+ function Login({
10
+ title = "Log in",
11
+ description,
12
+ usernameLabel = "Username",
13
+ usernameType = "text",
14
+ usernamePlaceholder = "johndoe",
15
+ passwordLabel = "Password",
16
+ passwordPlaceholder = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",
17
+ submitLabel = "Log in",
18
+ loadingLabel = "Logging in...",
19
+ loading = false,
20
+ signUpLabel,
21
+ signUpHref,
22
+ titleVariant = "h1",
23
+ onSubmit,
24
+ className,
25
+ autoFocus = false
26
+ }) {
27
+ const id = useId();
28
+ const usernameId = `${id}-username`;
29
+ const passwordId = `${id}-password`;
30
+ const titleId = `${id}-title`;
31
+ const [username, setUsername] = useState("");
32
+ const [password, setPassword] = useState("");
33
+ const handleSubmit = async (event) => {
34
+ event.preventDefault();
35
+ await onSubmit?.({ username, password });
36
+ };
37
+ return /* @__PURE__ */ jsxs("div", { className: cn("sg:w-full sg:max-w-sm sg:space-y-6", className), children: [
38
+ /* @__PURE__ */ jsxs("div", { className: "sg:text-center", children: [
39
+ /* @__PURE__ */ jsx(Heading, { variant: titleVariant, id: titleId, children: title }),
40
+ description && /* @__PURE__ */ jsx(Text, { className: "sg:mt-2", foreground: "muted-foreground", children: description })
41
+ ] }),
42
+ /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "sg:space-y-4", "aria-labelledby": titleId, children: [
43
+ /* @__PURE__ */ jsxs("div", { className: "sg:space-y-2", children: [
44
+ /* @__PURE__ */ jsx(Label, { htmlFor: usernameId, children: usernameLabel }),
45
+ /* @__PURE__ */ jsx(
46
+ Input,
47
+ {
48
+ id: usernameId,
49
+ type: usernameType,
50
+ placeholder: usernamePlaceholder,
51
+ value: username,
52
+ onChange: (event) => setUsername(event.target.value),
53
+ required: true,
54
+ autoFocus,
55
+ disabled: loading,
56
+ autoComplete: "username"
57
+ }
58
+ )
59
+ ] }),
60
+ /* @__PURE__ */ jsxs("div", { className: "sg:space-y-2", children: [
61
+ /* @__PURE__ */ jsx(Label, { htmlFor: passwordId, children: passwordLabel }),
62
+ /* @__PURE__ */ jsx(
63
+ Input,
64
+ {
65
+ id: passwordId,
66
+ type: "password",
67
+ placeholder: passwordPlaceholder,
68
+ value: password,
69
+ onChange: (event) => setPassword(event.target.value),
70
+ required: true,
71
+ disabled: loading,
72
+ autoComplete: "current-password"
73
+ }
74
+ )
75
+ ] }),
76
+ /* @__PURE__ */ jsx(Button, { type: "submit", className: "sg:w-full", disabled: loading, children: loading ? loadingLabel : submitLabel })
77
+ ] }),
78
+ signUpLabel && signUpHref && /* @__PURE__ */ jsxs(
79
+ Text,
80
+ {
81
+ size: "sm",
82
+ foreground: "muted-foreground",
83
+ className: "sg:text-center",
84
+ children: [
85
+ "Don't have an account? ",
86
+ /* @__PURE__ */ jsx(Link, { to: signUpHref, children: signUpLabel })
87
+ ]
88
+ }
89
+ )
90
+ ] });
91
+ }
92
+ export {
93
+ Login
94
+ };
95
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/blocks/login/login.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useId, useState } from \"react\";\r\nimport { Button } from \"../../primitives/buttons/button\";\r\nimport { Input } from \"../../primitives/forms/input\";\r\nimport { Label } from \"../../primitives/label/label\";\r\nimport { Heading, Link, Text } from \"../../primitives/index\";\r\nimport { cn } from \"../../../utils/index\";\r\n\r\nexport type LoginCredentials = {\r\n username: string;\r\n password: string;\r\n};\r\n\r\nexport type LoginProps = {\r\n /**\r\n * Form heading text.\r\n */\r\n title?: string;\r\n /**\r\n * Supporting text shown below the heading.\r\n */\r\n description?: string;\r\n /**\r\n * Label for the username or email field.\r\n */\r\n usernameLabel?: string;\r\n /**\r\n * Input type for the identifier field.\r\n */\r\n usernameType?: \"text\" | \"email\";\r\n /**\r\n * Placeholder for the identifier field.\r\n */\r\n usernamePlaceholder?: string;\r\n /**\r\n * Label for the password field.\r\n */\r\n passwordLabel?: string;\r\n /**\r\n * Placeholder for the password field.\r\n */\r\n passwordPlaceholder?: string;\r\n /**\r\n * Submit button label when not loading.\r\n */\r\n submitLabel?: string;\r\n /**\r\n * Submit button label while loading.\r\n */\r\n loadingLabel?: string;\r\n /**\r\n * Disables the form and shows the loading label on submit.\r\n */\r\n loading?: boolean;\r\n /**\r\n * Label for the optional sign-up link.\r\n */\r\n signUpLabel?: string;\r\n /**\r\n * Destination for the optional sign-up link.\r\n */\r\n signUpHref?: string;\r\n /**\r\n * Heading level for the title.\r\n */\r\n titleVariant?: \"h1\" | \"h2\" | \"h3\" | \"h4\";\r\n /**\r\n * Called when the form is submitted with valid credentials.\r\n */\r\n onSubmit?: (credentials: LoginCredentials) => void | Promise<void>;\r\n /**\r\n * Additional classes for the root wrapper.\r\n */\r\n className?: string;\r\n /**\r\n * Focuses the identifier field on mount.\r\n */\r\n autoFocus?: boolean;\r\n};\r\n\r\n/**\r\n * Reusable login form with username/email and password fields.\r\n */\r\nexport function Login({\r\n title = \"Log in\",\r\n description,\r\n usernameLabel = \"Username\",\r\n usernameType = \"text\",\r\n usernamePlaceholder = \"johndoe\",\r\n passwordLabel = \"Password\",\r\n passwordPlaceholder = \"••••••••\",\r\n submitLabel = \"Log in\",\r\n loadingLabel = \"Logging in...\",\r\n loading = false,\r\n signUpLabel,\r\n signUpHref,\r\n titleVariant = \"h1\",\r\n onSubmit,\r\n className,\r\n autoFocus = false,\r\n}: LoginProps) {\r\n const id = useId();\r\n const usernameId = `${id}-username`;\r\n const passwordId = `${id}-password`;\r\n const titleId = `${id}-title`;\r\n const [username, setUsername] = useState(\"\");\r\n const [password, setPassword] = useState(\"\");\r\n\r\n const handleSubmit = async (event: React.FormEvent) => {\r\n event.preventDefault();\r\n await onSubmit?.({ username, password });\r\n };\r\n\r\n return (\r\n <div className={cn(\"sg:w-full sg:max-w-sm sg:space-y-6\", className)}>\r\n <div className=\"sg:text-center\">\r\n <Heading variant={titleVariant} id={titleId}>\r\n {title}\r\n </Heading>\r\n {description && (\r\n <Text className=\"sg:mt-2\" foreground=\"muted-foreground\">\r\n {description}\r\n </Text>\r\n )}\r\n </div>\r\n\r\n <form onSubmit={handleSubmit} className=\"sg:space-y-4\" aria-labelledby={titleId}>\r\n <div className=\"sg:space-y-2\">\r\n <Label htmlFor={usernameId}>{usernameLabel}</Label>\r\n <Input\r\n id={usernameId}\r\n type={usernameType}\r\n placeholder={usernamePlaceholder}\r\n value={username}\r\n onChange={(event) => setUsername(event.target.value)}\r\n required\r\n autoFocus={autoFocus}\r\n disabled={loading}\r\n autoComplete=\"username\"\r\n />\r\n </div>\r\n <div className=\"sg:space-y-2\">\r\n <Label htmlFor={passwordId}>{passwordLabel}</Label>\r\n <Input\r\n id={passwordId}\r\n type=\"password\"\r\n placeholder={passwordPlaceholder}\r\n value={password}\r\n onChange={(event) => setPassword(event.target.value)}\r\n required\r\n disabled={loading}\r\n autoComplete=\"current-password\"\r\n />\r\n </div>\r\n <Button type=\"submit\" className=\"sg:w-full\" disabled={loading}>\r\n {loading ? loadingLabel : submitLabel}\r\n </Button>\r\n </form>\r\n\r\n {signUpLabel && signUpHref && (\r\n <Text\r\n size=\"sm\"\r\n foreground=\"muted-foreground\"\r\n className=\"sg:text-center\"\r\n >\r\n Don&apos;t have an account? <Link to={signUpHref}>{signUpLabel}</Link>\r\n </Text>\r\n )}\r\n </div>\r\n );\r\n}\r\n"],"mappings":";AAoHM,SACE,KADF;AAlHN,SAAS,OAAO,gBAAgB;AAChC,SAAS,cAAc;AACvB,SAAS,aAAa;AACtB,SAAS,aAAa;AACtB,SAAS,SAAS,MAAM,YAAY;AACpC,SAAS,UAAU;AA6EZ,SAAS,MAAM;AAAA,EACpB,QAAQ;AAAA,EACR;AAAA,EACA,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,YAAY;AACd,GAAe;AACb,QAAM,KAAK,MAAM;AACjB,QAAM,aAAa,GAAG,EAAE;AACxB,QAAM,aAAa,GAAG,EAAE;AACxB,QAAM,UAAU,GAAG,EAAE;AACrB,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,EAAE;AAC3C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,EAAE;AAE3C,QAAM,eAAe,OAAO,UAA2B;AACrD,UAAM,eAAe;AACrB,UAAM,WAAW,EAAE,UAAU,SAAS,CAAC;AAAA,EACzC;AAEA,SACE,qBAAC,SAAI,WAAW,GAAG,sCAAsC,SAAS,GAChE;AAAA,yBAAC,SAAI,WAAU,kBACb;AAAA,0BAAC,WAAQ,SAAS,cAAc,IAAI,SACjC,iBACH;AAAA,MACC,eACC,oBAAC,QAAK,WAAU,WAAU,YAAW,oBAClC,uBACH;AAAA,OAEJ;AAAA,IAEA,qBAAC,UAAK,UAAU,cAAc,WAAU,gBAAe,mBAAiB,SACtE;AAAA,2BAAC,SAAI,WAAU,gBACb;AAAA,4BAAC,SAAM,SAAS,YAAa,yBAAc;AAAA,QAC3C;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,aAAa;AAAA,YACb,OAAO;AAAA,YACP,UAAU,CAAC,UAAU,YAAY,MAAM,OAAO,KAAK;AAAA,YACnD,UAAQ;AAAA,YACR;AAAA,YACA,UAAU;AAAA,YACV,cAAa;AAAA;AAAA,QACf;AAAA,SACF;AAAA,MACA,qBAAC,SAAI,WAAU,gBACb;AAAA,4BAAC,SAAM,SAAS,YAAa,yBAAc;AAAA,QAC3C;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,MAAK;AAAA,YACL,aAAa;AAAA,YACb,OAAO;AAAA,YACP,UAAU,CAAC,UAAU,YAAY,MAAM,OAAO,KAAK;AAAA,YACnD,UAAQ;AAAA,YACR,UAAU;AAAA,YACV,cAAa;AAAA;AAAA,QACf;AAAA,SACF;AAAA,MACA,oBAAC,UAAO,MAAK,UAAS,WAAU,aAAY,UAAU,SACnD,oBAAU,eAAe,aAC5B;AAAA,OACF;AAAA,IAEC,eAAe,cACd;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,YAAW;AAAA,QACX,WAAU;AAAA,QACX;AAAA;AAAA,UAC6B,oBAAC,QAAK,IAAI,YAAa,uBAAY;AAAA;AAAA;AAAA,IACjE;AAAA,KAEJ;AAEJ;","names":[]}
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import { icons } from 'lucide-react';
3
+
4
+ type Props = {
5
+ icon?: keyof typeof icons;
6
+ title: string;
7
+ description?: string;
8
+ className?: string;
9
+ };
10
+ /** Centered hero strip with icon, title, and optional description. */
11
+ declare function PageHero({ icon, title, description, className }: Props): React.JSX.Element;
12
+
13
+ export { PageHero };
@@ -0,0 +1,37 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Icon, Heading, Text } from "../../primitives/index.js";
3
+ import { cn } from "../../../utils/index.js";
4
+ function PageHero({ icon, title, description, className }) {
5
+ return /* @__PURE__ */ jsx(
6
+ "section",
7
+ {
8
+ className: cn(
9
+ "sg:bg-primary/5 sg:border-b sg:border-border",
10
+ className
11
+ ),
12
+ children: /* @__PURE__ */ jsxs("div", { className: "sg:container sg:py-16 md:sg:py-20 sg:max-w-3xl sg:mx-auto sg:text-center", children: [
13
+ icon && /* @__PURE__ */ jsx(
14
+ Icon,
15
+ {
16
+ icon,
17
+ className: "sg:h-10 sg:w-10 sg:text-primary sg:mx-auto sg:mb-4"
18
+ }
19
+ ),
20
+ /* @__PURE__ */ jsx(Heading, { variant: "h1", className: "sg:mb-3", children: title }),
21
+ description && /* @__PURE__ */ jsx(
22
+ Text,
23
+ {
24
+ size: "lg",
25
+ foreground: "muted-foreground",
26
+ className: "sg:max-w-xl sg:mx-auto sg:leading-relaxed",
27
+ children: description
28
+ }
29
+ )
30
+ ] })
31
+ }
32
+ );
33
+ }
34
+ export {
35
+ PageHero
36
+ };
37
+ //# sourceMappingURL=page-hero.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/blocks/marketing/page-hero.tsx"],"sourcesContent":["import type { icons } from \"lucide-react\";\r\nimport { Icon, Heading, Text } from \"../../primitives/index\";\r\nimport { cn } from \"../../../utils/index\";\r\n\r\ntype Props = {\r\n\ticon?: keyof typeof icons;\r\n\ttitle: string;\r\n\tdescription?: string;\r\n\tclassName?: string;\r\n};\r\n\r\n/** Centered hero strip with icon, title, and optional description. */\r\nexport function PageHero({ icon, title, description, className }: Props) {\r\n\treturn (\r\n\t\t<section\r\n\t\t\tclassName={cn(\r\n\t\t\t\t\"sg:bg-primary/5 sg:border-b sg:border-border\",\r\n\t\t\t\tclassName,\r\n\t\t\t)}\r\n\t\t>\r\n\t\t\t<div className=\"sg:container sg:py-16 md:sg:py-20 sg:max-w-3xl sg:mx-auto sg:text-center\">\r\n\t\t\t\t{icon && (\r\n\t\t\t\t\t<Icon\r\n\t\t\t\t\t\ticon={icon}\r\n\t\t\t\t\t\tclassName=\"sg:h-10 sg:w-10 sg:text-primary sg:mx-auto sg:mb-4\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\t\t\t\t<Heading variant=\"h1\" className=\"sg:mb-3\">\r\n\t\t\t\t\t{title}\r\n\t\t\t\t</Heading>\r\n\t\t\t\t{description && (\r\n\t\t\t\t\t<Text\r\n\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\tforeground=\"muted-foreground\"\r\n\t\t\t\t\t\tclassName=\"sg:max-w-xl sg:mx-auto sg:leading-relaxed\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{description}\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t</section>\r\n\t);\r\n}\r\n"],"mappings":"AAoBG,SAEE,KAFF;AAnBH,SAAS,MAAM,SAAS,YAAY;AACpC,SAAS,UAAU;AAUZ,SAAS,SAAS,EAAE,MAAM,OAAO,aAAa,UAAU,GAAU;AACxE,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAW;AAAA,QACV;AAAA,QACA;AAAA,MACD;AAAA,MAEA,+BAAC,SAAI,WAAU,4EACb;AAAA,gBACA;AAAA,UAAC;AAAA;AAAA,YACA;AAAA,YACA,WAAU;AAAA;AAAA,QACX;AAAA,QAED,oBAAC,WAAQ,SAAQ,MAAK,WAAU,WAC9B,iBACF;AAAA,QACC,eACA;AAAA,UAAC;AAAA;AAAA,YACA,MAAK;AAAA,YACL,YAAW;AAAA,YACX,WAAU;AAAA,YAET;AAAA;AAAA,QACF;AAAA,SAEF;AAAA;AAAA,EACD;AAEF;","names":[]}
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ import { icons } from 'lucide-react';
3
+
4
+ type StatItem = {
5
+ label: string;
6
+ value: string;
7
+ icon?: keyof typeof icons;
8
+ };
9
+ type Props = {
10
+ items: StatItem[];
11
+ className?: string;
12
+ };
13
+ /** Grid of stat cards with icon, value, and label. */
14
+ declare function StatsGrid({ items, className }: Props): React.JSX.Element;
15
+
16
+ export { type StatItem, StatsGrid };
@@ -0,0 +1,30 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Card, CardContent } from "../cards/card.js";
3
+ import { Icon, Heading, Text } from "../../primitives/index.js";
4
+ import { cn } from "../../../utils/index.js";
5
+ function StatsGrid({ items, className }) {
6
+ return /* @__PURE__ */ jsx(
7
+ "div",
8
+ {
9
+ className: cn(
10
+ "sg:grid sg:grid-cols-2 md:sg:grid-cols-4 sg:gap-4",
11
+ className
12
+ ),
13
+ children: items.map((stat) => /* @__PURE__ */ jsx(Card, { className: "sg:text-center", children: /* @__PURE__ */ jsxs(CardContent, { className: "sg:pt-6 sg:pb-4", children: [
14
+ stat.icon && /* @__PURE__ */ jsx(
15
+ Icon,
16
+ {
17
+ icon: stat.icon,
18
+ className: "sg:h-6 sg:w-6 sg:text-primary sg:mx-auto sg:mb-2"
19
+ }
20
+ ),
21
+ /* @__PURE__ */ jsx(Heading, { variant: "h3", className: "sg:text-3xl", children: stat.value }),
22
+ /* @__PURE__ */ jsx(Text, { size: "sm", foreground: "muted-foreground", className: "sg:mt-1", children: stat.label })
23
+ ] }) }, stat.label))
24
+ }
25
+ );
26
+ }
27
+ export {
28
+ StatsGrid
29
+ };
30
+ //# sourceMappingURL=stats-grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/blocks/marketing/stats-grid.tsx"],"sourcesContent":["import type { icons } from \"lucide-react\";\r\nimport { Card, CardContent } from \"../cards/card\";\r\nimport { Icon, Heading, Text } from \"../../primitives/index\";\r\nimport { cn } from \"../../../utils/index\";\r\n\r\nexport type StatItem = {\r\n\tlabel: string;\r\n\tvalue: string;\r\n\ticon?: keyof typeof icons;\r\n};\r\n\r\ntype Props = {\r\n\titems: StatItem[];\r\n\tclassName?: string;\r\n};\r\n\r\n/** Grid of stat cards with icon, value, and label. */\r\nexport function StatsGrid({ items, className }: Props) {\r\n\treturn (\r\n\t\t<div\r\n\t\t\tclassName={cn(\r\n\t\t\t\t\"sg:grid sg:grid-cols-2 md:sg:grid-cols-4 sg:gap-4\",\r\n\t\t\t\tclassName,\r\n\t\t\t)}\r\n\t\t>\r\n\t\t\t{items.map((stat) => (\r\n\t\t\t\t<Card key={stat.label} className=\"sg:text-center\">\r\n\t\t\t\t\t<CardContent className=\"sg:pt-6 sg:pb-4\">\r\n\t\t\t\t\t\t{stat.icon && (\r\n\t\t\t\t\t\t\t<Icon\r\n\t\t\t\t\t\t\t\ticon={stat.icon}\r\n\t\t\t\t\t\t\t\tclassName=\"sg:h-6 sg:w-6 sg:text-primary sg:mx-auto sg:mb-2\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t<Heading variant=\"h3\" className=\"sg:text-3xl\">\r\n\t\t\t\t\t\t\t{stat.value}\r\n\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\" className=\"sg:mt-1\">\r\n\t\t\t\t\t\t\t{stat.label}\r\n\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t</CardContent>\r\n\t\t\t\t</Card>\r\n\t\t\t))}\r\n\t\t</div>\r\n\t);\r\n}\r\n"],"mappings":"AA2BK,SAEE,KAFF;AA1BL,SAAS,MAAM,mBAAmB;AAClC,SAAS,MAAM,SAAS,YAAY;AACpC,SAAS,UAAU;AAcZ,SAAS,UAAU,EAAE,OAAO,UAAU,GAAU;AACtD,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAW;AAAA,QACV;AAAA,QACA;AAAA,MACD;AAAA,MAEC,gBAAM,IAAI,CAAC,SACX,oBAAC,QAAsB,WAAU,kBAChC,+BAAC,eAAY,WAAU,mBACrB;AAAA,aAAK,QACL;AAAA,UAAC;AAAA;AAAA,YACA,MAAM,KAAK;AAAA,YACX,WAAU;AAAA;AAAA,QACX;AAAA,QAED,oBAAC,WAAQ,SAAQ,MAAK,WAAU,eAC9B,eAAK,OACP;AAAA,QACA,oBAAC,QAAK,MAAK,MAAK,YAAW,oBAAmB,WAAU,WACtD,eAAK,OACP;AAAA,SACD,KAdU,KAAK,KAehB,CACA;AAAA;AAAA,EACF;AAEF;","names":[]}
@@ -0,0 +1,17 @@
1
+ import * as React from 'react';
2
+
3
+ type TimelineItem = {
4
+ year: string;
5
+ title: string;
6
+ description: string;
7
+ };
8
+ type Props = {
9
+ items: TimelineItem[];
10
+ title?: string;
11
+ description?: string;
12
+ className?: string;
13
+ };
14
+ /** Vertical timeline with year, title, and description entries. */
15
+ declare function Timeline({ items, title, description, className, }: Props): React.JSX.Element;
16
+
17
+ export { Timeline, type TimelineItem };
@@ -0,0 +1,45 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Heading, Text } from "../../primitives/index.js";
3
+ function Timeline({
4
+ items,
5
+ title = "Our Journey",
6
+ description,
7
+ className
8
+ }) {
9
+ return /* @__PURE__ */ jsxs("div", { className, children: [
10
+ /* @__PURE__ */ jsx(Heading, { variant: "h2", className: "sg:mb-2", children: title }),
11
+ description && /* @__PURE__ */ jsx(Text, { foreground: "muted-foreground", className: "sg:mb-10", children: description }),
12
+ /* @__PURE__ */ jsxs("div", { className: "sg:relative", children: [
13
+ /* @__PURE__ */ jsx(
14
+ "div",
15
+ {
16
+ className: "sg:absolute sg:left-4 md:sg:left-6 sg:top-0 sg:bottom-0 sg:w-px sg:bg-border",
17
+ "aria-hidden": "true"
18
+ }
19
+ ),
20
+ /* @__PURE__ */ jsx("div", { className: "sg:space-y-10", children: items.map((item, i) => /* @__PURE__ */ jsxs("div", { className: "sg:relative sg:pl-12 md:sg:pl-16", children: [
21
+ /* @__PURE__ */ jsx(
22
+ "div",
23
+ {
24
+ className: "sg:absolute sg:left-2.5 md:sg:left-4.5 sg:top-1 sg:h-3 sg:w-3 sg:rounded-full sg:bg-primary sg:ring-4 sg:ring-background",
25
+ "aria-hidden": "true"
26
+ }
27
+ ),
28
+ /* @__PURE__ */ jsx(
29
+ Text,
30
+ {
31
+ size: "xs",
32
+ className: "sg:font-mono sg:text-primary/70 sg:uppercase sg:tracking-wider",
33
+ children: item.year
34
+ }
35
+ ),
36
+ /* @__PURE__ */ jsx(Heading, { variant: "h4", className: "sg:mt-0.5", children: item.title }),
37
+ /* @__PURE__ */ jsx(Text, { size: "sm", foreground: "muted-foreground", className: "sg:mt-1", children: item.description })
38
+ ] }, i)) })
39
+ ] })
40
+ ] });
41
+ }
42
+ export {
43
+ Timeline
44
+ };
45
+ //# sourceMappingURL=timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/blocks/marketing/timeline.tsx"],"sourcesContent":["import { Heading, Text } from \"../../primitives/index\";\r\n\r\nexport type TimelineItem = {\r\n\tyear: string;\r\n\ttitle: string;\r\n\tdescription: string;\r\n};\r\n\r\ntype Props = {\r\n\titems: TimelineItem[];\r\n\ttitle?: string;\r\n\tdescription?: string;\r\n\tclassName?: string;\r\n};\r\n\r\n/** Vertical timeline with year, title, and description entries. */\r\nexport function Timeline({\r\n\titems,\r\n\ttitle = \"Our Journey\",\r\n\tdescription,\r\n\tclassName,\r\n}: Props) {\r\n\treturn (\r\n\t\t<div className={className}>\r\n\t\t\t<Heading variant=\"h2\" className=\"sg:mb-2\">\r\n\t\t\t\t{title}\r\n\t\t\t</Heading>\r\n\t\t\t{description && (\r\n\t\t\t\t<Text foreground=\"muted-foreground\" className=\"sg:mb-10\">\r\n\t\t\t\t\t{description}\r\n\t\t\t\t</Text>\r\n\t\t\t)}\r\n\t\t\t<div className=\"sg:relative\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tclassName=\"sg:absolute sg:left-4 md:sg:left-6 sg:top-0 sg:bottom-0 sg:w-px sg:bg-border\"\r\n\t\t\t\t\taria-hidden=\"true\"\r\n\t\t\t\t/>\r\n\t\t\t\t<div className=\"sg:space-y-10\">\r\n\t\t\t\t\t{items.map((item, i) => (\r\n\t\t\t\t\t\t<div key={i} className=\"sg:relative sg:pl-12 md:sg:pl-16\">\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName=\"sg:absolute sg:left-2.5 md:sg:left-4.5 sg:top-1 sg:h-3 sg:w-3 sg:rounded-full sg:bg-primary sg:ring-4 sg:ring-background\"\r\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<Text\r\n\t\t\t\t\t\t\t\tsize=\"xs\"\r\n\t\t\t\t\t\t\t\tclassName=\"sg:font-mono sg:text-primary/70 sg:uppercase sg:tracking-wider\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{item.year}\r\n\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t<Heading variant=\"h4\" className=\"sg:mt-0.5\">\r\n\t\t\t\t\t\t\t\t{item.title}\r\n\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\" className=\"sg:mt-1\">\r\n\t\t\t\t\t\t\t\t{item.description}\r\n\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n"],"mappings":"AAwBG,cAeG,YAfH;AAxBH,SAAS,SAAS,YAAY;AAgBvB,SAAS,SAAS;AAAA,EACxB;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AACD,GAAU;AACT,SACC,qBAAC,SAAI,WACJ;AAAA,wBAAC,WAAQ,SAAQ,MAAK,WAAU,WAC9B,iBACF;AAAA,IACC,eACA,oBAAC,QAAK,YAAW,oBAAmB,WAAU,YAC5C,uBACF;AAAA,IAED,qBAAC,SAAI,WAAU,eACd;AAAA;AAAA,QAAC;AAAA;AAAA,UACA,WAAU;AAAA,UACV,eAAY;AAAA;AAAA,MACb;AAAA,MACA,oBAAC,SAAI,WAAU,iBACb,gBAAM,IAAI,CAAC,MAAM,MACjB,qBAAC,SAAY,WAAU,oCACtB;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,WAAU;AAAA,YACV,eAAY;AAAA;AAAA,QACb;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACA,MAAK;AAAA,YACL,WAAU;AAAA,YAET,eAAK;AAAA;AAAA,QACP;AAAA,QACA,oBAAC,WAAQ,SAAQ,MAAK,WAAU,aAC9B,eAAK,OACP;AAAA,QACA,oBAAC,QAAK,MAAK,MAAK,YAAW,oBAAmB,WAAU,WACtD,eAAK,aACP;AAAA,WAhBS,CAiBV,CACA,GACF;AAAA,OACD;AAAA,KACD;AAEF;","names":[]}
@@ -0,0 +1,16 @@
1
+ import * as React$1 from 'react';
2
+
3
+ type ValueItem = {
4
+ title: string;
5
+ description: string;
6
+ };
7
+ type Props = {
8
+ items: ValueItem[];
9
+ title?: string;
10
+ icon?: React.ReactNode;
11
+ className?: string;
12
+ };
13
+ /** Grid of value cards with title and description. */
14
+ declare function ValuesGrid({ items, title, icon, className, }: Props): React$1.JSX.Element;
15
+
16
+ export { type ValueItem, ValuesGrid };
@@ -0,0 +1,29 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Heading, Text } from "../../primitives/index.js";
3
+ import { cn } from "../../../utils/index.js";
4
+ function ValuesGrid({
5
+ items,
6
+ title = "What We Value",
7
+ icon,
8
+ className
9
+ }) {
10
+ return /* @__PURE__ */ jsxs("div", { className: cn("sg:text-center", className), children: [
11
+ icon,
12
+ /* @__PURE__ */ jsx(Heading, { variant: "h2", className: "sg:mb-4", children: title }),
13
+ /* @__PURE__ */ jsx("div", { className: "sg:grid sg:gap-4 sm:sg:grid-cols-3 sg:text-left sg:mt-8", children: items.map((value) => /* @__PURE__ */ jsxs(
14
+ "div",
15
+ {
16
+ className: "sg:p-4 sg:rounded-lg sg:bg-background sg:border sg:border-border",
17
+ children: [
18
+ /* @__PURE__ */ jsx(Heading, { variant: "h6", className: "sg:mb-1", children: value.title }),
19
+ /* @__PURE__ */ jsx(Text, { size: "sm", foreground: "muted-foreground", children: value.description })
20
+ ]
21
+ },
22
+ value.title
23
+ )) })
24
+ ] });
25
+ }
26
+ export {
27
+ ValuesGrid
28
+ };
29
+ //# sourceMappingURL=values-grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/blocks/marketing/values-grid.tsx"],"sourcesContent":["import { Heading, Text } from \"../../primitives/index\";\r\nimport { cn } from \"../../../utils/index\";\r\n\r\nexport type ValueItem = {\r\n\ttitle: string;\r\n\tdescription: string;\r\n};\r\n\r\ntype Props = {\r\n\titems: ValueItem[];\r\n\ttitle?: string;\r\n\ticon?: React.ReactNode;\r\n\tclassName?: string;\r\n};\r\n\r\n/** Grid of value cards with title and description. */\r\nexport function ValuesGrid({\r\n\titems,\r\n\ttitle = \"What We Value\",\r\n\ticon,\r\n\tclassName,\r\n}: Props) {\r\n\treturn (\r\n\t\t<div className={cn(\"sg:text-center\", className)}>\r\n\t\t\t{icon}\r\n\t\t\t<Heading variant=\"h2\" className=\"sg:mb-4\">\r\n\t\t\t\t{title}\r\n\t\t\t</Heading>\r\n\t\t\t<div className=\"sg:grid sg:gap-4 sm:sg:grid-cols-3 sg:text-left sg:mt-8\">\r\n\t\t\t\t{items.map((value) => (\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tkey={value.title}\r\n\t\t\t\t\t\tclassName=\"sg:p-4 sg:rounded-lg sg:bg-background sg:border sg:border-border\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<Heading variant=\"h6\" className=\"sg:mb-1\">\r\n\t\t\t\t\t\t\t{value.title}\r\n\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\">\r\n\t\t\t\t\t\t\t{value.description}\r\n\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t))}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n}\r\n"],"mappings":"AAyBG,cAKE,YALF;AAzBH,SAAS,SAAS,YAAY;AAC9B,SAAS,UAAU;AAeZ,SAAS,WAAW;AAAA,EAC1B;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AACD,GAAU;AACT,SACC,qBAAC,SAAI,WAAW,GAAG,kBAAkB,SAAS,GAC5C;AAAA;AAAA,IACD,oBAAC,WAAQ,SAAQ,MAAK,WAAU,WAC9B,iBACF;AAAA,IACA,oBAAC,SAAI,WAAU,2DACb,gBAAM,IAAI,CAAC,UACX;AAAA,MAAC;AAAA;AAAA,QAEA,WAAU;AAAA,QAEV;AAAA,8BAAC,WAAQ,SAAQ,MAAK,WAAU,WAC9B,gBAAM,OACR;AAAA,UACA,oBAAC,QAAK,MAAK,MAAK,YAAW,oBACzB,gBAAM,aACR;AAAA;AAAA;AAAA,MARK,MAAM;AAAA,IASZ,CACA,GACF;AAAA,KACD;AAEF;","names":[]}
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as React from 'react';
2
2
 
3
3
  type SortOption = "newest" | "oldest" | "a-z" | "z-a";
4
4
  interface FilterControlsProps {
@@ -14,6 +14,6 @@ interface FilterControlsProps {
14
14
  setSortBy: (s: SortOption) => void;
15
15
  hideAuthorFilter?: boolean;
16
16
  }
17
- declare function FilterControls({ categories, authors, selectedCategories, selectedAuthors, toggleCategory, toggleAuthor, clearFilters, activeCount, sortBy, setSortBy, hideAuthorFilter, }: FilterControlsProps): react_jsx_runtime.JSX.Element;
17
+ declare function FilterControls({ categories, authors, selectedCategories, selectedAuthors, toggleCategory, toggleAuthor, clearFilters, activeCount, sortBy, setSortBy, hideAuthorFilter, }: FilterControlsProps): React.JSX.Element;
18
18
 
19
19
  export { FilterControls };
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as React from 'react';
2
2
  import { BlogPost } from '../../../data/posts.js';
3
3
 
4
4
  type LoadMode = "pagination" | "load-more";
@@ -14,6 +14,6 @@ interface PostListWithFiltersProps {
14
14
  /** Default load mode. "load-more" (default) or "pagination". User can still toggle. */
15
15
  defaultLoadMode?: LoadMode;
16
16
  }
17
- declare function PostListWithFilters({ posts: sourcePosts, hideSearch, hideAuthorFilter, filterMode, defaultLoadMode, }: PostListWithFiltersProps): react_jsx_runtime.JSX.Element;
17
+ declare function PostListWithFilters({ posts: sourcePosts, hideSearch, hideAuthorFilter, filterMode, defaultLoadMode, }: PostListWithFiltersProps): React.JSX.Element;
18
18
 
19
19
  export { PostListWithFilters };