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
@@ -0,0 +1,81 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useMemo, useState } from "react";
4
+ import { motion } from "framer-motion";
5
+ import { Layout, Heading, Text, UiImage, Link } from "../../primitives/index.js";
6
+ import { posts } from "../../../data/posts.js";
7
+ import {
8
+ Sheet,
9
+ SheetContent,
10
+ SheetTitle
11
+ } from "../../primitives/sheet/sheet.js";
12
+ function MosaicPage() {
13
+ const [lightbox, setLightbox] = useState(null);
14
+ const items = useMemo(() => {
15
+ return posts.flatMap((post) => {
16
+ const images = post.gallery?.length ? post.gallery : [{ src: post.primaryImage, alt: post.title }];
17
+ return images.map((img) => ({
18
+ src: img.src,
19
+ alt: img.alt || post.title,
20
+ postSlug: post.slug,
21
+ postTitle: post.title
22
+ }));
23
+ });
24
+ }, []);
25
+ return /* @__PURE__ */ jsx(Layout, { type: "col", className: "sg:py-16", children: /* @__PURE__ */ jsxs(Layout.Col1, { hideDiv: true, children: [
26
+ /* @__PURE__ */ jsxs(
27
+ motion.div,
28
+ {
29
+ initial: { opacity: 0, y: 20 },
30
+ animate: { opacity: 1, y: 0 },
31
+ transition: { duration: 0.3 },
32
+ children: [
33
+ /* @__PURE__ */ jsx(Heading, { variant: "h1", className: "sg:mb-2", children: "Mosaic" }),
34
+ /* @__PURE__ */ jsx(Text, { foreground: "muted-foreground", className: "sg:mb-10", children: "A visual mosaic of images from our blog posts." }),
35
+ /* @__PURE__ */ jsx("div", { className: "sg:columns-2 md:sg:columns-3 lg:sg:columns-4 sg:gap-3 sg:space-y-3", children: items.map((item, i) => /* @__PURE__ */ jsx(
36
+ "button",
37
+ {
38
+ type: "button",
39
+ className: "sg:block sg:w-full sg:mb-3 sg:break-inside-avoid sg:rounded-lg sg:overflow-hidden sg:border-0 sg:p-0 sg:bg-transparent sg:cursor-pointer sg:group",
40
+ onClick: () => setLightbox(item),
41
+ children: /* @__PURE__ */ jsx(
42
+ UiImage,
43
+ {
44
+ src: item.src,
45
+ alt: item.alt,
46
+ className: "sg:w-full sg:object-cover sg:transition-transform sg:duration-300 sg:group-hover:scale-105",
47
+ loading: "lazy"
48
+ }
49
+ )
50
+ },
51
+ `${item.postSlug}-${i}`
52
+ )) })
53
+ ]
54
+ }
55
+ ),
56
+ /* @__PURE__ */ jsx(Sheet, { open: !!lightbox, onOpenChange: (open) => !open && setLightbox(null), children: /* @__PURE__ */ jsxs(SheetContent, { side: "bottom", className: "sg:max-h-[90vh] sg:p-4", children: [
57
+ /* @__PURE__ */ jsx(SheetTitle, { className: "sg:sr-only", children: "Image preview" }),
58
+ lightbox && /* @__PURE__ */ jsxs("div", { className: "sg:space-y-4 sg:mx-auto sg:max-w-4xl", children: [
59
+ /* @__PURE__ */ jsx(
60
+ UiImage,
61
+ {
62
+ src: lightbox.src,
63
+ alt: lightbox.alt,
64
+ className: "sg:w-full sg:max-h-[70vh] sg:object-contain sg:rounded-md"
65
+ }
66
+ ),
67
+ /* @__PURE__ */ jsxs("div", { className: "sg:flex sg:items-center sg:justify-between sg:gap-4", children: [
68
+ /* @__PURE__ */ jsxs(Text, { size: "sm", foreground: "muted-foreground", children: [
69
+ "From: ",
70
+ lightbox.postTitle
71
+ ] }),
72
+ /* @__PURE__ */ jsx(Link, { to: `/posts/${lightbox.postSlug}`, children: "View post" })
73
+ ] })
74
+ ] })
75
+ ] }) })
76
+ ] }) });
77
+ }
78
+ export {
79
+ MosaicPage
80
+ };
81
+ //# sourceMappingURL=mosaic-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/pages/mosaic/mosaic-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useMemo, useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { Layout, Heading, Text, UiImage, Link } from \"../../primitives/index\";\r\nimport { posts } from \"../../../data/posts\";\r\nimport {\r\n\tSheet,\r\n\tSheetContent,\r\n\tSheetTitle,\r\n} from \"../../primitives/sheet/sheet\";\r\n\r\ntype MosaicItem = {\r\n\tsrc: string;\r\n\talt: string;\r\n\tpostSlug: string;\r\n\tpostTitle: string;\r\n};\r\n\r\nexport function MosaicPage() {\r\n\tconst [lightbox, setLightbox] = useState<MosaicItem | null>(null);\r\n\r\n\tconst items = useMemo<MosaicItem[]>(() => {\r\n\t\treturn posts.flatMap((post) => {\r\n\t\t\tconst images = post.gallery?.length\r\n\t\t\t\t? post.gallery\r\n\t\t\t\t: [{ src: post.primaryImage, alt: post.title }];\r\n\t\t\treturn images.map((img) => ({\r\n\t\t\t\tsrc: img.src,\r\n\t\t\t\talt: img.alt || post.title,\r\n\t\t\t\tpostSlug: post.slug,\r\n\t\t\t\tpostTitle: post.title,\r\n\t\t\t}));\r\n\t\t});\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t<Layout.Col1 hideDiv>\r\n\t\t\t\t<motion.div\r\n\t\t\t\t\tinitial={{ opacity: 0, y: 20 }}\r\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\r\n\t\t\t\t\ttransition={{ duration: 0.3 }}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Heading variant=\"h1\" className=\"sg:mb-2\">\r\n\t\t\t\t\t\tMosaic\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Text foreground=\"muted-foreground\" className=\"sg:mb-10\">\r\n\t\t\t\t\t\tA visual mosaic of images from our blog posts.\r\n\t\t\t\t\t</Text>\r\n\r\n\t\t\t\t\t<div className=\"sg:columns-2 md:sg:columns-3 lg:sg:columns-4 sg:gap-3 sg:space-y-3\">\r\n\t\t\t\t\t\t{items.map((item, i) => (\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tkey={`${item.postSlug}-${i}`}\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"sg:block sg:w-full sg:mb-3 sg:break-inside-avoid sg:rounded-lg sg:overflow-hidden sg:border-0 sg:p-0 sg:bg-transparent sg:cursor-pointer sg:group\"\r\n\t\t\t\t\t\t\t\tonClick={() => setLightbox(item)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<UiImage\r\n\t\t\t\t\t\t\t\t\tsrc={item.src}\r\n\t\t\t\t\t\t\t\t\talt={item.alt}\r\n\t\t\t\t\t\t\t\t\tclassName=\"sg:w-full sg:object-cover sg:transition-transform sg:duration-300 sg:group-hover:scale-105\"\r\n\t\t\t\t\t\t\t\t\tloading=\"lazy\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</motion.div>\r\n\r\n\t\t\t\t<Sheet open={!!lightbox} onOpenChange={(open) => !open && setLightbox(null)}>\r\n\t\t\t\t\t<SheetContent side=\"bottom\" className=\"sg:max-h-[90vh] sg:p-4\">\r\n\t\t\t\t\t\t<SheetTitle className=\"sg:sr-only\">Image preview</SheetTitle>\r\n\t\t\t\t\t\t{lightbox && (\r\n\t\t\t\t\t\t\t<div className=\"sg:space-y-4 sg:mx-auto sg:max-w-4xl\">\r\n\t\t\t\t\t\t\t\t<UiImage\r\n\t\t\t\t\t\t\t\t\tsrc={lightbox.src}\r\n\t\t\t\t\t\t\t\t\talt={lightbox.alt}\r\n\t\t\t\t\t\t\t\t\tclassName=\"sg:w-full sg:max-h-[70vh] sg:object-contain sg:rounded-md\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<div className=\"sg:flex sg:items-center sg:justify-between sg:gap-4\">\r\n\t\t\t\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\">\r\n\t\t\t\t\t\t\t\t\t\tFrom: {lightbox.postTitle}\r\n\t\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t\t\t<Link to={`/posts/${lightbox.postSlug}`}>View post</Link>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</SheetContent>\r\n\t\t\t\t</Sheet>\r\n\t\t\t</Layout.Col1>\r\n\t\t</Layout>\r\n\t);\r\n}\r\n"],"mappings":";AAuCI,SAKC,KALD;AArCJ,SAAS,SAAS,gBAAgB;AAClC,SAAS,cAAc;AACvB,SAAS,QAAQ,SAAS,MAAM,SAAS,YAAY;AACrD,SAAS,aAAa;AACtB;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AASA,SAAS,aAAa;AAC5B,QAAM,CAAC,UAAU,WAAW,IAAI,SAA4B,IAAI;AAEhE,QAAM,QAAQ,QAAsB,MAAM;AACzC,WAAO,MAAM,QAAQ,CAAC,SAAS;AAC9B,YAAM,SAAS,KAAK,SAAS,SAC1B,KAAK,UACL,CAAC,EAAE,KAAK,KAAK,cAAc,KAAK,KAAK,MAAM,CAAC;AAC/C,aAAO,OAAO,IAAI,CAAC,SAAS;AAAA,QAC3B,KAAK,IAAI;AAAA,QACT,KAAK,IAAI,OAAO,KAAK;AAAA,QACrB,UAAU,KAAK;AAAA,QACf,WAAW,KAAK;AAAA,MACjB,EAAE;AAAA,IACH,CAAC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SACC,oBAAC,UAAO,MAAK,OAAM,WAAU,YAC5B,+BAAC,OAAO,MAAP,EAAY,SAAO,MACnB;AAAA;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QACA,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,QAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,QAC5B,YAAY,EAAE,UAAU,IAAI;AAAA,QAE5B;AAAA,8BAAC,WAAQ,SAAQ,MAAK,WAAU,WAAU,oBAE1C;AAAA,UACA,oBAAC,QAAK,YAAW,oBAAmB,WAAU,YAAW,4DAEzD;AAAA,UAEA,oBAAC,SAAI,WAAU,sEACb,gBAAM,IAAI,CAAC,MAAM,MACjB;AAAA,YAAC;AAAA;AAAA,cAEA,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS,MAAM,YAAY,IAAI;AAAA,cAE/B;AAAA,gBAAC;AAAA;AAAA,kBACA,KAAK,KAAK;AAAA,kBACV,KAAK,KAAK;AAAA,kBACV,WAAU;AAAA,kBACV,SAAQ;AAAA;AAAA,cACT;AAAA;AAAA,YAVK,GAAG,KAAK,QAAQ,IAAI,CAAC;AAAA,UAW3B,CACA,GACF;AAAA;AAAA;AAAA,IACD;AAAA,IAEA,oBAAC,SAAM,MAAM,CAAC,CAAC,UAAU,cAAc,CAAC,SAAS,CAAC,QAAQ,YAAY,IAAI,GACzE,+BAAC,gBAAa,MAAK,UAAS,WAAU,0BACrC;AAAA,0BAAC,cAAW,WAAU,cAAa,2BAAa;AAAA,MAC/C,YACA,qBAAC,SAAI,WAAU,wCACd;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,KAAK,SAAS;AAAA,YACd,KAAK,SAAS;AAAA,YACd,WAAU;AAAA;AAAA,QACX;AAAA,QACA,qBAAC,SAAI,WAAU,uDACd;AAAA,+BAAC,QAAK,MAAK,MAAK,YAAW,oBAAmB;AAAA;AAAA,YACtC,SAAS;AAAA,aACjB;AAAA,UACA,oBAAC,QAAK,IAAI,UAAU,SAAS,QAAQ,IAAI,uBAAS;AAAA,WACnD;AAAA,SACD;AAAA,OAEF,GACD;AAAA,KACD,GACD;AAEF;","names":[]}
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+
3
+ declare function NewsletterPage(): React.JSX.Element;
4
+
5
+ export { NewsletterPage };
@@ -0,0 +1,148 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { motion } from "framer-motion";
5
+ import {
6
+ Layout,
7
+ Heading,
8
+ Text,
9
+ Input,
10
+ Button,
11
+ Icon,
12
+ Separator
13
+ } from "../../primitives/index.js";
14
+ import { Label } from "../../primitives/label/label.js";
15
+ import { Card, CardContent } from "../../blocks/cards/card.js";
16
+ import {
17
+ Avatar,
18
+ AvatarFallback,
19
+ AvatarImage
20
+ } from "../../primitives/avatar/avatar.js";
21
+ import { useToast } from "../../primitives/sonner/use-toast.js";
22
+ import { authors } from "../../../data/authors.js";
23
+ const benefits = [
24
+ {
25
+ icon: "BookOpen",
26
+ title: "Curated Stories",
27
+ description: "Handpicked articles on slow living, design, and culture \u2014 delivered weekly."
28
+ },
29
+ {
30
+ icon: "Sparkles",
31
+ title: "Exclusive Content",
32
+ description: "Subscriber-only essays, interviews, and behind-the-scenes looks."
33
+ },
34
+ {
35
+ icon: "Clock",
36
+ title: "Early Access",
37
+ description: "Be the first to read new posts before they go live."
38
+ }
39
+ ];
40
+ function NewsletterPage() {
41
+ const { toast } = useToast();
42
+ const [email, setEmail] = useState("");
43
+ const [error, setError] = useState("");
44
+ const [submitting, setSubmitting] = useState(false);
45
+ const [subscribed, setSubscribed] = useState(false);
46
+ const handleSubmit = (e) => {
47
+ e.preventDefault();
48
+ if (!email.trim() || !email.includes("@")) {
49
+ setError("Please enter a valid email address");
50
+ return;
51
+ }
52
+ setError("");
53
+ setSubmitting(true);
54
+ setTimeout(() => {
55
+ setSubmitting(false);
56
+ setSubscribed(true);
57
+ toast.message("You're subscribed!", {
58
+ description: "Check your inbox for a welcome email."
59
+ });
60
+ }, 1200);
61
+ };
62
+ return /* @__PURE__ */ jsxs(
63
+ motion.div,
64
+ {
65
+ initial: { opacity: 0, y: 20 },
66
+ animate: { opacity: 1, y: 0 },
67
+ transition: { duration: 0.3 },
68
+ children: [
69
+ /* @__PURE__ */ jsx("section", { className: "sg:bg-primary/5 sg:border-b sg:border-border", children: /* @__PURE__ */ jsxs("div", { className: "sg:container sg:py-20 sg:max-w-3xl sg:mx-auto sg:text-center", children: [
70
+ /* @__PURE__ */ jsx(Icon, { icon: "Mail", className: "sg:h-12 sg:w-12 sg:text-primary sg:mx-auto sg:mb-5" }),
71
+ /* @__PURE__ */ jsx(Heading, { variant: "h1", className: "sg:mb-4", children: "Stories Worth Reading, Delivered Weekly" }),
72
+ /* @__PURE__ */ jsx(
73
+ Text,
74
+ {
75
+ size: "lg",
76
+ foreground: "muted-foreground",
77
+ className: "sg:max-w-xl sg:mx-auto sg:leading-relaxed",
78
+ children: "Join a growing community of thoughtful readers. Curated essays on slow living, intentional design, and creative culture \u2014 every Sunday."
79
+ }
80
+ ),
81
+ !subscribed ? /* @__PURE__ */ jsxs(
82
+ "form",
83
+ {
84
+ onSubmit: handleSubmit,
85
+ className: "sg:mt-8 sg:flex sg:flex-col sm:sg:flex-row sg:gap-3 sg:max-w-md sg:mx-auto",
86
+ children: [
87
+ /* @__PURE__ */ jsxs("div", { className: "sg:flex-1", children: [
88
+ /* @__PURE__ */ jsx(Label, { htmlFor: "newsletter-email", className: "sg:sr-only", children: "Email" }),
89
+ /* @__PURE__ */ jsx(
90
+ Input,
91
+ {
92
+ id: "newsletter-email",
93
+ type: "email",
94
+ placeholder: "you@example.com",
95
+ value: email,
96
+ onChange: (e) => {
97
+ setEmail(e.target.value);
98
+ if (error) setError("");
99
+ },
100
+ "aria-invalid": !!error
101
+ }
102
+ ),
103
+ error && /* @__PURE__ */ jsx(Text, { size: "sm", className: "sg:text-destructive sg:text-left sg:mt-1", children: error })
104
+ ] }),
105
+ /* @__PURE__ */ jsx(Button, { type: "submit", loading: submitting, iconStart: "Mail", children: "Subscribe" })
106
+ ]
107
+ }
108
+ ) : /* @__PURE__ */ jsxs("div", { className: "sg:mt-8 sg:inline-flex sg:items-center sg:gap-2 sg:bg-primary/10 sg:text-primary sg:rounded-full sg:px-5 sg:py-2.5 sg:font-medium", children: [
109
+ /* @__PURE__ */ jsx(Icon, { icon: "CircleCheck", className: "sg:h-5 sg:w-5" }),
110
+ "You're subscribed \u2014 welcome aboard!"
111
+ ] }),
112
+ /* @__PURE__ */ jsxs("div", { className: "sg:mt-6 sg:flex sg:items-center sg:justify-center sg:gap-2", children: [
113
+ /* @__PURE__ */ jsx("div", { className: "sg:flex sg:-space-x-2", children: authors.map((a) => /* @__PURE__ */ jsxs(
114
+ Avatar,
115
+ {
116
+ className: "sg:h-7 sg:w-7 sg:border-2 sg:border-background",
117
+ children: [
118
+ /* @__PURE__ */ jsx(AvatarImage, { src: a.avatar, alt: a.name }),
119
+ /* @__PURE__ */ jsx(AvatarFallback, { className: "sg:text-[10px]", children: a.name[0] })
120
+ ]
121
+ },
122
+ a.slug
123
+ )) }),
124
+ /* @__PURE__ */ jsxs(Text, { size: "sm", foreground: "muted-foreground", children: [
125
+ "Join ",
126
+ /* @__PURE__ */ jsx("span", { className: "sg:font-medium sg:text-foreground", children: "2,400+" }),
127
+ " readers"
128
+ ] })
129
+ ] })
130
+ ] }) }),
131
+ /* @__PURE__ */ jsx(Layout, { type: "col", className: "sg:py-16", children: /* @__PURE__ */ jsxs(Layout.Col1, { hideDiv: true, className: "sg:max-w-4xl", children: [
132
+ /* @__PURE__ */ jsx(Heading, { variant: "h2", className: "sg:text-center sg:mb-2", children: "What You'll Get" }),
133
+ /* @__PURE__ */ jsx(Text, { foreground: "muted-foreground", className: "sg:text-center sg:mb-10", children: "Every issue is crafted with the same care as our articles." }),
134
+ /* @__PURE__ */ jsx("div", { className: "sg:grid sg:gap-6 sm:sg:grid-cols-3", children: benefits.map((b) => /* @__PURE__ */ jsx(Card, { className: "sg:text-center", children: /* @__PURE__ */ jsxs(CardContent, { className: "sg:pt-6", children: [
135
+ /* @__PURE__ */ jsx("div", { className: "sg:rounded-full sg:bg-primary/10 sg:p-3 sg:inline-flex sg:mb-4", children: /* @__PURE__ */ jsx(Icon, { icon: b.icon, className: "sg:h-6 sg:w-6 sg:text-primary" }) }),
136
+ /* @__PURE__ */ jsx(Heading, { variant: "h5", className: "sg:mb-1", children: b.title }),
137
+ /* @__PURE__ */ jsx(Text, { size: "sm", foreground: "muted-foreground", className: "sg:leading-relaxed", children: b.description })
138
+ ] }) }, b.title)) })
139
+ ] }) }),
140
+ /* @__PURE__ */ jsx(Separator, { className: "sg:max-w-4xl sg:mx-auto" })
141
+ ]
142
+ }
143
+ );
144
+ }
145
+ export {
146
+ NewsletterPage
147
+ };
148
+ //# sourceMappingURL=newsletter-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/pages/newsletter/newsletter-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport {\r\n\tLayout,\r\n\tHeading,\r\n\tText,\r\n\tInput,\r\n\tButton,\r\n\tIcon,\r\n\tSeparator,\r\n} from \"../../primitives/index\";\r\nimport { Label } from \"../../primitives/label/label\";\r\nimport { Card, CardContent } from \"../../blocks/cards/card\";\r\nimport {\r\n\tAvatar,\r\n\tAvatarFallback,\r\n\tAvatarImage,\r\n} from \"../../primitives/avatar/avatar\";\r\nimport { useToast } from \"../../primitives/sonner/use-toast\";\r\nimport { authors } from \"../../../data/authors\";\r\n\r\nconst benefits = [\r\n\t{\r\n\t\ticon: \"BookOpen\" as const,\r\n\t\ttitle: \"Curated Stories\",\r\n\t\tdescription:\r\n\t\t\t\"Handpicked articles on slow living, design, and culture — delivered weekly.\",\r\n\t},\r\n\t{\r\n\t\ticon: \"Sparkles\" as const,\r\n\t\ttitle: \"Exclusive Content\",\r\n\t\tdescription:\r\n\t\t\t\"Subscriber-only essays, interviews, and behind-the-scenes looks.\",\r\n\t},\r\n\t{\r\n\t\ticon: \"Clock\" as const,\r\n\t\ttitle: \"Early Access\",\r\n\t\tdescription: \"Be the first to read new posts before they go live.\",\r\n\t},\r\n];\r\n\r\nexport function NewsletterPage() {\r\n\tconst { toast } = useToast();\r\n\tconst [email, setEmail] = useState(\"\");\r\n\tconst [error, setError] = useState(\"\");\r\n\tconst [submitting, setSubmitting] = useState(false);\r\n\tconst [subscribed, setSubscribed] = useState(false);\r\n\r\n\tconst handleSubmit = (e: React.FormEvent) => {\r\n\t\te.preventDefault();\r\n\t\tif (!email.trim() || !email.includes(\"@\")) {\r\n\t\t\tsetError(\"Please enter a valid email address\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetError(\"\");\r\n\t\tsetSubmitting(true);\r\n\t\tsetTimeout(() => {\r\n\t\t\tsetSubmitting(false);\r\n\t\t\tsetSubscribed(true);\r\n\t\t\ttoast.message(\"You're subscribed!\", {\r\n\t\t\t\tdescription: \"Check your inbox for a welcome email.\",\r\n\t\t\t});\r\n\t\t}, 1200);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<motion.div\r\n\t\t\tinitial={{ opacity: 0, y: 20 }}\r\n\t\t\tanimate={{ opacity: 1, y: 0 }}\r\n\t\t\ttransition={{ duration: 0.3 }}\r\n\t\t>\r\n\t\t\t<section className=\"sg:bg-primary/5 sg:border-b sg:border-border\">\r\n\t\t\t\t<div className=\"sg:container sg:py-20 sg:max-w-3xl sg:mx-auto sg:text-center\">\r\n\t\t\t\t\t<Icon icon=\"Mail\" className=\"sg:h-12 sg:w-12 sg:text-primary sg:mx-auto sg:mb-5\" />\r\n\t\t\t\t\t<Heading variant=\"h1\" className=\"sg:mb-4\">\r\n\t\t\t\t\t\tStories Worth Reading, Delivered Weekly\r\n\t\t\t\t\t</Heading>\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\tJoin a growing community of thoughtful readers. Curated essays on slow\r\n\t\t\t\t\t\tliving, intentional design, and creative culture — every Sunday.\r\n\t\t\t\t\t</Text>\r\n\r\n\t\t\t\t\t{!subscribed ? (\r\n\t\t\t\t\t\t<form\r\n\t\t\t\t\t\t\tonSubmit={handleSubmit}\r\n\t\t\t\t\t\t\tclassName=\"sg:mt-8 sg:flex sg:flex-col sm:sg:flex-row sg:gap-3 sg:max-w-md sg:mx-auto\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<div className=\"sg:flex-1\">\r\n\t\t\t\t\t\t\t\t<Label htmlFor=\"newsletter-email\" className=\"sg:sr-only\">\r\n\t\t\t\t\t\t\t\t\tEmail\r\n\t\t\t\t\t\t\t\t</Label>\r\n\t\t\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\t\t\tid=\"newsletter-email\"\r\n\t\t\t\t\t\t\t\t\ttype=\"email\"\r\n\t\t\t\t\t\t\t\t\tplaceholder=\"you@example.com\"\r\n\t\t\t\t\t\t\t\t\tvalue={email}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\t\tsetEmail(e.target.value);\r\n\t\t\t\t\t\t\t\t\t\tif (error) setError(\"\");\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\taria-invalid={!!error}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t{error && (\r\n\t\t\t\t\t\t\t\t\t<Text size=\"sm\" className=\"sg:text-destructive sg:text-left sg:mt-1\">\r\n\t\t\t\t\t\t\t\t\t\t{error}\r\n\t\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<Button type=\"submit\" loading={submitting} iconStart=\"Mail\">\r\n\t\t\t\t\t\t\t\tSubscribe\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<div className=\"sg:mt-8 sg:inline-flex sg:items-center sg:gap-2 sg:bg-primary/10 sg:text-primary sg:rounded-full sg:px-5 sg:py-2.5 sg:font-medium\">\r\n\t\t\t\t\t\t\t<Icon icon=\"CircleCheck\" className=\"sg:h-5 sg:w-5\" />\r\n\t\t\t\t\t\t\tYou&apos;re subscribed — welcome aboard!\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t<div className=\"sg:mt-6 sg:flex sg:items-center sg:justify-center sg:gap-2\">\r\n\t\t\t\t\t\t<div className=\"sg:flex sg:-space-x-2\">\r\n\t\t\t\t\t\t\t{authors.map((a) => (\r\n\t\t\t\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\t\t\t\tkey={a.slug}\r\n\t\t\t\t\t\t\t\t\tclassName=\"sg:h-7 sg:w-7 sg:border-2 sg:border-background\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<AvatarImage src={a.avatar} alt={a.name} />\r\n\t\t\t\t\t\t\t\t\t<AvatarFallback className=\"sg:text-[10px]\">\r\n\t\t\t\t\t\t\t\t\t\t{a.name[0]}\r\n\t\t\t\t\t\t\t\t\t</AvatarFallback>\r\n\t\t\t\t\t\t\t\t</Avatar>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\">\r\n\t\t\t\t\t\t\tJoin <span className=\"sg:font-medium sg:text-foreground\">2,400+</span> readers\r\n\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</section>\r\n\r\n\t\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t\t<Layout.Col1 hideDiv className=\"sg:max-w-4xl\">\r\n\t\t\t\t\t<Heading variant=\"h2\" className=\"sg:text-center sg:mb-2\">\r\n\t\t\t\t\t\tWhat You&apos;ll Get\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Text foreground=\"muted-foreground\" className=\"sg:text-center sg:mb-10\">\r\n\t\t\t\t\t\tEvery issue is crafted with the same care as our articles.\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t\t<div className=\"sg:grid sg:gap-6 sm:sg:grid-cols-3\">\r\n\t\t\t\t\t\t{benefits.map((b) => (\r\n\t\t\t\t\t\t\t<Card key={b.title} className=\"sg:text-center\">\r\n\t\t\t\t\t\t\t\t<CardContent className=\"sg:pt-6\">\r\n\t\t\t\t\t\t\t\t\t<div className=\"sg:rounded-full sg:bg-primary/10 sg:p-3 sg:inline-flex sg:mb-4\">\r\n\t\t\t\t\t\t\t\t\t\t<Icon icon={b.icon} className=\"sg:h-6 sg:w-6 sg:text-primary\" />\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<Heading variant=\"h5\" className=\"sg:mb-1\">\r\n\t\t\t\t\t\t\t\t\t\t{b.title}\r\n\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\" className=\"sg:leading-relaxed\">\r\n\t\t\t\t\t\t\t\t\t\t{b.description}\r\n\t\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t\t</CardContent>\r\n\t\t\t\t\t\t\t</Card>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</Layout.Col1>\r\n\t\t\t</Layout>\r\n\r\n\t\t\t<Separator className=\"sg:max-w-4xl sg:mx-auto\" />\r\n\t\t</motion.div>\r\n\t);\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1,10 +1,10 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as React from 'react';
2
2
 
3
3
  interface NotFoundProps {
4
4
  pathname?: string;
5
5
  homeHref?: string;
6
6
  onGoBack?: () => void;
7
7
  }
8
- declare const NotFound: ({ pathname, homeHref, onGoBack, }: NotFoundProps) => react_jsx_runtime.JSX.Element;
8
+ declare const NotFound: ({ pathname, homeHref, onGoBack, }: NotFoundProps) => React.JSX.Element;
9
9
 
10
10
  export { NotFound };
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as React from 'react';
2
2
 
3
3
  interface Section {
4
4
  title: string;
@@ -10,6 +10,6 @@ interface PrivacyPageProps {
10
10
  introText?: string;
11
11
  sections?: Section[];
12
12
  }
13
- declare const PrivacyPage: ({ title, effectiveDate, introText, sections, }: PrivacyPageProps) => react_jsx_runtime.JSX.Element;
13
+ declare const PrivacyPage: ({ title, effectiveDate, introText, sections, }: PrivacyPageProps) => React.JSX.Element;
14
14
 
15
15
  export { PrivacyPage };
@@ -0,0 +1,5 @@
1
+ import * as React from 'react';
2
+
3
+ declare function ResourcesPage(): React.JSX.Element;
4
+
5
+ export { ResourcesPage };
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { motion } from "framer-motion";
4
+ import { Layout, Heading, Text } from "../../primitives/index.js";
5
+ import { Card, CardContent } from "../../blocks/cards/card.js";
6
+ function ResourcesPage() {
7
+ return /* @__PURE__ */ jsx(Layout, { type: "col", className: "sg:py-16", children: /* @__PURE__ */ jsx(Layout.Col1, { hideDiv: true, className: "sg:max-w-3xl", children: /* @__PURE__ */ jsxs(
8
+ motion.div,
9
+ {
10
+ initial: { opacity: 0, y: 20 },
11
+ animate: { opacity: 1, y: 0 },
12
+ transition: { duration: 0.3 },
13
+ children: [
14
+ /* @__PURE__ */ jsx(Heading, { variant: "h1", className: "sg:mb-2", children: "Resources" }),
15
+ /* @__PURE__ */ jsx(Text, { foreground: "muted-foreground", className: "sg:mb-10", children: "Curated links, tools, and references for creators." }),
16
+ /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(CardContent, { className: "sg:py-8 sg:text-center", children: /* @__PURE__ */ jsx(Text, { foreground: "muted-foreground", children: "This is a placeholder page. Content coming soon." }) }) })
17
+ ]
18
+ }
19
+ ) }) });
20
+ }
21
+ export {
22
+ ResourcesPage
23
+ };
24
+ //# sourceMappingURL=resources-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/pages/resources/resources-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { Layout, Heading, Text } from \"../../primitives/index\";\r\nimport { Card, CardContent } from \"../../blocks/cards/card\";\r\n\r\nexport function ResourcesPage() {\r\n\treturn (\r\n\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t<Layout.Col1 hideDiv className=\"sg:max-w-3xl\">\r\n\t\t\t\t<motion.div\r\n\t\t\t\t\tinitial={{ opacity: 0, y: 20 }}\r\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\r\n\t\t\t\t\ttransition={{ duration: 0.3 }}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Heading variant=\"h1\" className=\"sg:mb-2\">\r\n\t\t\t\t\t\tResources\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Text foreground=\"muted-foreground\" className=\"sg:mb-10\">\r\n\t\t\t\t\t\tCurated links, tools, and references for creators.\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t\t<Card>\r\n\t\t\t\t\t\t<CardContent className=\"sg:py-8 sg:text-center\">\r\n\t\t\t\t\t\t\t<Text foreground=\"muted-foreground\">\r\n\t\t\t\t\t\t\t\tThis is a placeholder page. Content coming soon.\r\n\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t</CardContent>\r\n\t\t\t\t\t</Card>\r\n\t\t\t\t</motion.div>\r\n\t\t\t</Layout.Col1>\r\n\t\t</Layout>\r\n\t);\r\n}\r\n"],"mappings":";AAUI,SAKC,KALD;AARJ,SAAS,cAAc;AACvB,SAAS,QAAQ,SAAS,YAAY;AACtC,SAAS,MAAM,mBAAmB;AAE3B,SAAS,gBAAgB;AAC/B,SACC,oBAAC,UAAO,MAAK,OAAM,WAAU,YAC5B,8BAAC,OAAO,MAAP,EAAY,SAAO,MAAC,WAAU,gBAC9B;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACA,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,MAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,MAC5B,YAAY,EAAE,UAAU,IAAI;AAAA,MAE5B;AAAA,4BAAC,WAAQ,SAAQ,MAAK,WAAU,WAAU,uBAE1C;AAAA,QACA,oBAAC,QAAK,YAAW,oBAAmB,WAAU,YAAW,gEAEzD;AAAA,QACA,oBAAC,QACA,8BAAC,eAAY,WAAU,0BACtB,8BAAC,QAAK,YAAW,oBAAmB,8DAEpC,GACD,GACD;AAAA;AAAA;AAAA,EACD,GACD,GACD;AAEF;","names":[]}
@@ -1,5 +1,5 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as React from 'react';
2
2
 
3
- declare function SearchPage(): react_jsx_runtime.JSX.Element;
3
+ declare function SearchPage(): React.JSX.Element;
4
4
 
5
5
  export { SearchPage };
@@ -1,5 +1,5 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as React from 'react';
2
2
 
3
- declare function StartPage(): react_jsx_runtime.JSX.Element;
3
+ declare function StartPage(): React.JSX.Element;
4
4
 
5
5
  export { StartPage };
@@ -22,20 +22,22 @@ function StartPage() {
22
22
  /* @__PURE__ */ jsx(Layout, { as: "section", className: "sg:py-16", children: /* @__PURE__ */ jsxs(Layout.Col1, { hideDiv: true, children: [
23
23
  /* @__PURE__ */ jsxs("div", { className: "sg:flex sg:items-end sg:justify-between sg:flex-wrap sg:mb-10", children: [
24
24
  /* @__PURE__ */ jsxs("div", { children: [
25
- /* @__PURE__ */ jsx(Heading, { variant: "h2", children: "Latest Stories" }),
26
- /* @__PURE__ */ jsx(Text, { foreground: "muted-foreground", className: "sg:mt-2", children: "Exploring design, culture, and the quiet art of living." })
25
+ /* @__PURE__ */ jsx(Heading, { variant: "h2", children: "Featured" }),
26
+ /* @__PURE__ */ jsx(Text, { foreground: "muted-foreground", className: "sg:mt-2", children: "Hand-picked stories we love." })
27
27
  ] }),
28
28
  /* @__PURE__ */ jsx(Link, { to: "/posts", iconEnd: "ArrowRight", children: "View all" })
29
29
  ] }),
30
- /* @__PURE__ */ jsx("div", { className: "sg:grid sg:grid-cols-[repeat(auto-fit,minmax(min(230px,100%),1fr))] sg:gap-8", children: posts.slice(0, 3).map((post) => /* @__PURE__ */ jsx(
30
+ /* @__PURE__ */ jsx("div", { className: "sg:grid sg:grid-cols-[repeat(auto-fit,minmax(min(230px,100%),1fr))] sg:gap-8", children: posts.filter((p) => p.featured).map((post) => /* @__PURE__ */ jsx(
31
31
  BlogPostCard,
32
32
  {
33
33
  id: post.id,
34
+ slug: post.slug,
34
35
  image: post.primaryImage,
35
36
  categories: post.categories,
36
37
  date: post.date,
37
38
  title: post.title,
38
- excerpt: post.excerpt
39
+ excerpt: post.excerpt,
40
+ clickableCategories: true
39
41
  },
40
42
  post.id
41
43
  )) })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/pages/startpage/startpage.tsx"],"sourcesContent":["import { Container } from \"../../templates/container/container\";\nimport Hero from \"../../templates/hero/hero\";\nimport { Layout, Link, Heading, Text } from \"../../primitives/index\";\nimport BlogPostCard from \"../../blocks/cards/blogpost-card\";\nimport { posts } from \"../../../data/posts\";\nimport { Footer } from \"../../templates/footer/footer\";\n\nfunction StartPage() {\n return (\n <Container>\n <Container.Header />\n <Container.Content>\n <Hero\n title=\"Stories worth\"\n titleAccent=\"savoring\"\n description=\"A curated journal exploring design, culture, and the quiet art of living with intention.\"\n primaryCTA={{ label: \"Browse all posts\", href: \"#\" }}\n secondaryCTA={{ label: \"Our design system\", href: \"#\" }}\n />\n <Layout as=\"section\" className=\"sg:py-16\">\n <Layout.Col1 hideDiv>\n <div className=\"sg:flex sg:items-end sg:justify-between sg:flex-wrap sg:mb-10\">\n <div>\n <Heading variant=\"h2\">Latest Stories</Heading>\n <Text foreground=\"muted-foreground\" className=\"sg:mt-2\">\n Exploring design, culture, and the quiet art of living.\n </Text>\n </div>\n <Link to=\"/posts\" iconEnd=\"ArrowRight\">\n View all\n </Link>\n </div>\n <div className=\"sg:grid sg:grid-cols-[repeat(auto-fit,minmax(min(230px,100%),1fr))] sg:gap-8\">\n {posts.slice(0, 3).map((post) => (\n <BlogPostCard\n key={post.id}\n id={post.id}\n image={post.primaryImage}\n categories={post.categories}\n date={post.date}\n title={post.title}\n excerpt={post.excerpt}\n />\n ))}\n </div>\n </Layout.Col1>\n </Layout>\n </Container.Content>\n <Container.Footer>\n <Footer />\n </Container.Footer>\n </Container>\n );\n}\n\nexport { StartPage };\n"],"mappings":"AAUM,cAYQ,YAZR;AAVN,SAAS,iBAAiB;AAC1B,OAAO,UAAU;AACjB,SAAS,QAAQ,MAAM,SAAS,YAAY;AAC5C,OAAO,kBAAkB;AACzB,SAAS,aAAa;AACtB,SAAS,cAAc;AAEvB,SAAS,YAAY;AACnB,SACE,qBAAC,aACC;AAAA,wBAAC,UAAU,QAAV,EAAiB;AAAA,IAClB,qBAAC,UAAU,SAAV,EACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,aAAY;AAAA,UACZ,aAAY;AAAA,UACZ,YAAY,EAAE,OAAO,oBAAoB,MAAM,IAAI;AAAA,UACnD,cAAc,EAAE,OAAO,qBAAqB,MAAM,IAAI;AAAA;AAAA,MACxD;AAAA,MACA,oBAAC,UAAO,IAAG,WAAU,WAAU,YAC7B,+BAAC,OAAO,MAAP,EAAY,SAAO,MAClB;AAAA,6BAAC,SAAI,WAAU,iEACb;AAAA,+BAAC,SACC;AAAA,gCAAC,WAAQ,SAAQ,MAAK,4BAAc;AAAA,YACpC,oBAAC,QAAK,YAAW,oBAAmB,WAAU,WAAU,qEAExD;AAAA,aACF;AAAA,UACA,oBAAC,QAAK,IAAG,UAAS,SAAQ,cAAa,sBAEvC;AAAA,WACF;AAAA,QACA,oBAAC,SAAI,WAAU,gFACZ,gBAAM,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,SACtB;AAAA,UAAC;AAAA;AAAA,YAEC,IAAI,KAAK;AAAA,YACT,OAAO,KAAK;AAAA,YACZ,YAAY,KAAK;AAAA,YACjB,MAAM,KAAK;AAAA,YACX,OAAO,KAAK;AAAA,YACZ,SAAS,KAAK;AAAA;AAAA,UANT,KAAK;AAAA,QAOZ,CACD,GACH;AAAA,SACF,GACF;AAAA,OACF;AAAA,IACA,oBAAC,UAAU,QAAV,EACC,8BAAC,UAAO,GACV;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/pages/startpage/startpage.tsx"],"sourcesContent":["import { Container } from \"../../templates/container/container\";\nimport Hero from \"../../templates/hero/hero\";\nimport { Layout, Link, Heading, Text } from \"../../primitives/index\";\nimport BlogPostCard from \"../../blocks/cards/blogpost-card\";\nimport { posts } from \"../../../data/posts\";\nimport { Footer } from \"../../templates/footer/footer\";\n\nfunction StartPage() {\n return (\n <Container>\n <Container.Header />\n <Container.Content>\n <Hero\n title=\"Stories worth\"\n titleAccent=\"savoring\"\n description=\"A curated journal exploring design, culture, and the quiet art of living with intention.\"\n primaryCTA={{ label: \"Browse all posts\", href: \"#\" }}\n secondaryCTA={{ label: \"Our design system\", href: \"#\" }}\n />\n <Layout as=\"section\" className=\"sg:py-16\">\n <Layout.Col1 hideDiv>\n <div className=\"sg:flex sg:items-end sg:justify-between sg:flex-wrap sg:mb-10\">\n <div>\n <Heading variant=\"h2\">Featured</Heading>\n <Text foreground=\"muted-foreground\" className=\"sg:mt-2\">\n Hand-picked stories we love.\n </Text>\n </div>\n <Link to=\"/posts\" iconEnd=\"ArrowRight\">\n View all\n </Link>\n </div>\n <div className=\"sg:grid sg:grid-cols-[repeat(auto-fit,minmax(min(230px,100%),1fr))] sg:gap-8\">\n {posts.filter((p) => p.featured).map((post) => (\n <BlogPostCard\n key={post.id}\n id={post.id}\n slug={post.slug}\n image={post.primaryImage}\n categories={post.categories}\n date={post.date}\n title={post.title}\n excerpt={post.excerpt}\n clickableCategories\n />\n ))}\n </div>\n </Layout.Col1>\n </Layout>\n </Container.Content>\n <Container.Footer>\n <Footer />\n </Container.Footer>\n </Container>\n );\n}\n\nexport { StartPage };\n"],"mappings":"AAUM,cAYQ,YAZR;AAVN,SAAS,iBAAiB;AAC1B,OAAO,UAAU;AACjB,SAAS,QAAQ,MAAM,SAAS,YAAY;AAC5C,OAAO,kBAAkB;AACzB,SAAS,aAAa;AACtB,SAAS,cAAc;AAEvB,SAAS,YAAY;AACnB,SACE,qBAAC,aACC;AAAA,wBAAC,UAAU,QAAV,EAAiB;AAAA,IAClB,qBAAC,UAAU,SAAV,EACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,aAAY;AAAA,UACZ,aAAY;AAAA,UACZ,YAAY,EAAE,OAAO,oBAAoB,MAAM,IAAI;AAAA,UACnD,cAAc,EAAE,OAAO,qBAAqB,MAAM,IAAI;AAAA;AAAA,MACxD;AAAA,MACA,oBAAC,UAAO,IAAG,WAAU,WAAU,YAC7B,+BAAC,OAAO,MAAP,EAAY,SAAO,MAClB;AAAA,6BAAC,SAAI,WAAU,iEACb;AAAA,+BAAC,SACC;AAAA,gCAAC,WAAQ,SAAQ,MAAK,sBAAQ;AAAA,YAC9B,oBAAC,QAAK,YAAW,oBAAmB,WAAU,WAAU,0CAExD;AAAA,aACF;AAAA,UACA,oBAAC,QAAK,IAAG,UAAS,SAAQ,cAAa,sBAEvC;AAAA,WACF;AAAA,QACA,oBAAC,SAAI,WAAU,gFACZ,gBAAM,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,SACpC;AAAA,UAAC;AAAA;AAAA,YAEC,IAAI,KAAK;AAAA,YACT,MAAM,KAAK;AAAA,YACX,OAAO,KAAK;AAAA,YACZ,YAAY,KAAK;AAAA,YACjB,MAAM,KAAK;AAAA,YACX,OAAO,KAAK;AAAA,YACZ,SAAS,KAAK;AAAA,YACd,qBAAmB;AAAA;AAAA,UARd,KAAK;AAAA,QASZ,CACD,GACH;AAAA,SACF,GACF;AAAA,OACF;AAAA,IACA,oBAAC,UAAU,QAAV,EACC,8BAAC,UAAO,GACV;AAAA,KACF;AAEJ;","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
  interface Section {
4
4
  title: string;
@@ -10,6 +10,6 @@ interface TermsPageProps {
10
10
  introText?: string;
11
11
  sections?: Section[];
12
12
  }
13
- declare const TermsPage: ({ title, effectiveDate, introText, sections, }: TermsPageProps) => react_jsx_runtime.JSX.Element;
13
+ declare const TermsPage: ({ title, effectiveDate, introText, sections, }: TermsPageProps) => React.JSX.Element;
14
14
 
15
15
  export { TermsPage };
@@ -1,9 +1,9 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as React from 'react';
2
2
  import { Accordion as Accordion$1 } from '@base-ui/react/accordion';
3
3
 
4
- declare function Accordion({ className, ...props }: Accordion$1.Root.Props): react_jsx_runtime.JSX.Element;
5
- declare function AccordionItem({ className, ...props }: Accordion$1.Item.Props): react_jsx_runtime.JSX.Element;
6
- declare function AccordionTrigger({ className, children, ...props }: Accordion$1.Trigger.Props): react_jsx_runtime.JSX.Element;
7
- declare function AccordionContent({ className, children, ...props }: Accordion$1.Panel.Props): react_jsx_runtime.JSX.Element;
4
+ declare function Accordion({ className, ...props }: Accordion$1.Root.Props): React.JSX.Element;
5
+ declare function AccordionItem({ className, ...props }: Accordion$1.Item.Props): React.JSX.Element;
6
+ declare function AccordionTrigger({ className, children, ...props }: Accordion$1.Trigger.Props): React.JSX.Element;
7
+ declare function AccordionContent({ className, children, ...props }: Accordion$1.Panel.Props): React.JSX.Element;
8
8
 
9
9
  export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion";
4
- import { ChevronDownIcon, ChevronUpIcon } from "lucide-react";
5
4
  import { cn } from "../../../utils/index.js";
5
+ import { Icon } from "../icon/icon.js";
6
6
  function Accordion({ className, ...props }) {
7
7
  return /* @__PURE__ */ jsx(
8
8
  AccordionPrimitive.Root,
9
9
  {
10
10
  "data-slot": "accordion",
11
11
  className: cn(
12
- "sg:overflow-hidden sg:rounded-2xl sg:border sg:flex sg:w-full sg:flex-col",
12
+ "sg:flex sg:w-full sg:flex-col sg:rounded-lg sg:border sg:border-border sg:bg-card sg:text-card-foreground",
13
13
  className
14
14
  ),
15
15
  ...props
@@ -21,7 +21,10 @@ function AccordionItem({ className, ...props }) {
21
21
  AccordionPrimitive.Item,
22
22
  {
23
23
  "data-slot": "accordion-item",
24
- className: cn("sg:data-open:bg-muted/50 sg:not-last:border-b", className),
24
+ className: cn(
25
+ "sg:not-last:border-b sg:not-last:border-border sg:data-open:bg-muted/40",
26
+ className
27
+ ),
25
28
  ...props
26
29
  }
27
30
  );
@@ -31,29 +34,24 @@ function AccordionTrigger({
31
34
  children,
32
35
  ...props
33
36
  }) {
34
- return /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "sg:flex", children: /* @__PURE__ */ jsxs(
37
+ return /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "sg:m-0 sg:flex sg:w-full", children: /* @__PURE__ */ jsxs(
35
38
  AccordionPrimitive.Trigger,
36
39
  {
37
40
  "data-slot": "accordion-trigger",
38
41
  className: cn(
39
- "sg:**:data-[slot=accordion-trigger-icon]:text-muted-foreground sg:gap-6 sg:p-4 sg:text-start sg:text-sm sg:font-medium sg:hover:underline sg:**:data-[slot=accordion-trigger-icon]:ms-auto sg:**:data-[slot=accordion-trigger-icon]:size-4 sg:group/accordion-trigger sg:relative sg:flex sg:flex-1 sg:items-start sg:justify-between sg:border sg:border-transparent sg:transition-all sg:outline-none sg:disabled:pointer-events-none sg:disabled:opacity-50",
42
+ "sg:group sg:relative sg:flex sg:w-full sg:flex-1 sg:items-center sg:justify-between sg:gap-4 sg:rounded-sm sg:p-4 sg:text-start sg:text-sm sg:font-medium sg:select-none sg:transition-colors sg:hover:not-data-disabled:bg-accent/50 sg:focus-visible:z-10 sg:focus-visible:outline-none sg:focus-visible:ring-2 sg:focus-visible:ring-inset sg:focus-visible:ring-ring sg:focus-visible:ring-offset-0 sg:disabled:pointer-events-none sg:disabled:opacity-50",
40
43
  className
41
44
  ),
42
45
  ...props,
43
46
  children: [
44
47
  children,
45
48
  /* @__PURE__ */ jsx(
46
- ChevronDownIcon,
47
- {
48
- "data-slot": "accordion-trigger-icon",
49
- className: "sg:pointer-events-none sg:shrink-0 sg:group-aria-expanded/accordion-trigger:hidden"
50
- }
51
- ),
52
- /* @__PURE__ */ jsx(
53
- ChevronUpIcon,
49
+ Icon,
54
50
  {
51
+ icon: "ChevronDown",
52
+ size: "xs",
55
53
  "data-slot": "accordion-trigger-icon",
56
- className: "sg:pointer-events-none sg:hidden sg:shrink-0 sg:group-aria-expanded/accordion-trigger:inline"
54
+ className: "sg:pointer-events-none sg:shrink-0 sg:text-muted-foreground sg:transition-transform sg:duration-200 sg:ease-out sg:group-data-panel-open:rotate-180"
57
55
  }
58
56
  )
59
57
  ]
@@ -69,13 +67,13 @@ function AccordionContent({
69
67
  AccordionPrimitive.Panel,
70
68
  {
71
69
  "data-slot": "accordion-content",
72
- className: "sg:data-open:animate-accordion-down sg:data-closed:animate-accordion-up sg:px-4 sg:text-sm sg:overflow-hidden",
70
+ className: "sg:h-(--accordion-panel-height) sg:overflow-hidden sg:text-sm sg:transition-[height] sg:duration-150 sg:ease-out sg:data-ending-style:h-0 sg:data-starting-style:h-0",
73
71
  ...props,
74
72
  children: /* @__PURE__ */ jsx(
75
73
  "div",
76
74
  {
77
75
  className: cn(
78
- "sg:pt-0 sg:pb-4 sg:[&_a]:hover:text-foreground sg:h-(--accordion-panel-height) sg:data-ending-style:h-0 sg:data-starting-style:h-0 sg:[&_a]:underline sg:[&_a]:underline-offset-3 sg:[&_p:not(:last-child)]:mb-4",
76
+ "sg:px-4 sg:pb-4 sg:text-muted-foreground sg:[&_a]:underline sg:[&_a]:underline-offset-3 sg:[&_a]:hover:text-foreground sg:[&_p:not(:last-child)]:mb-4",
79
77
  className
80
78
  ),
81
79
  children
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/primitives/accordion/accordion.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\";\r\nimport { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\r\nimport { cn } from \"../../../utils/index\";\r\n\r\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\r\n return (\r\n <AccordionPrimitive.Root\r\n data-slot=\"accordion\"\r\n className={cn(\r\n \"sg:overflow-hidden sg:rounded-2xl sg:border sg:flex sg:w-full sg:flex-col\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\r\n return (\r\n <AccordionPrimitive.Item\r\n data-slot=\"accordion-item\"\r\n className={cn(\"sg:data-open:bg-muted/50 sg:not-last:border-b\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction AccordionTrigger({\r\n className,\r\n children,\r\n ...props\r\n}: AccordionPrimitive.Trigger.Props) {\r\n return (\r\n <AccordionPrimitive.Header className=\"sg:flex\">\r\n <AccordionPrimitive.Trigger\r\n data-slot=\"accordion-trigger\"\r\n className={cn(\r\n \"sg:**:data-[slot=accordion-trigger-icon]:text-muted-foreground sg:gap-6 sg:p-4 sg:text-start sg:text-sm sg:font-medium sg:hover:underline sg:**:data-[slot=accordion-trigger-icon]:ms-auto sg:**:data-[slot=accordion-trigger-icon]:size-4 sg:group/accordion-trigger sg:relative sg:flex sg:flex-1 sg:items-start sg:justify-between sg:border sg:border-transparent sg:transition-all sg:outline-none sg:disabled:pointer-events-none sg:disabled:opacity-50\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronDownIcon\r\n data-slot=\"accordion-trigger-icon\"\r\n className=\"sg:pointer-events-none sg:shrink-0 sg:group-aria-expanded/accordion-trigger:hidden\"\r\n />\r\n <ChevronUpIcon\r\n data-slot=\"accordion-trigger-icon\"\r\n className=\"sg:pointer-events-none sg:hidden sg:shrink-0 sg:group-aria-expanded/accordion-trigger:inline\"\r\n />\r\n </AccordionPrimitive.Trigger>\r\n </AccordionPrimitive.Header>\r\n );\r\n}\r\n\r\nfunction AccordionContent({\r\n className,\r\n children,\r\n ...props\r\n}: AccordionPrimitive.Panel.Props) {\r\n return (\r\n <AccordionPrimitive.Panel\r\n data-slot=\"accordion-content\"\r\n className=\"sg:data-open:animate-accordion-down sg:data-closed:animate-accordion-up sg:px-4 sg:text-sm sg:overflow-hidden\"\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n \"sg:pt-0 sg:pb-4 sg:[&_a]:hover:text-foreground sg:h-(--accordion-panel-height) sg:data-ending-style:h-0 sg:data-starting-style:h-0 sg:[&_a]:underline sg:[&_a]:underline-offset-3 sg:[&_p:not(:last-child)]:mb-4\",\r\n className,\r\n )}\r\n >\r\n {children}\r\n </div>\r\n </AccordionPrimitive.Panel>\r\n );\r\n}\r\n\r\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\r\n"],"mappings":";AAQI,cA4BE,YA5BF;AANJ,SAAS,aAAa,0BAA0B;AAChD,SAAS,iBAAiB,qBAAqB;AAC/C,SAAS,UAAU;AAEnB,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAAkC;AACzE,SACE;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc,EAAE,WAAW,GAAG,MAAM,GAAkC;AAC7E,SACE;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iDAAiD,SAAS;AAAA,MACvE,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAqC;AACnC,SACE,oBAAC,mBAAmB,QAAnB,EAA0B,WAAU,WACnC;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA;AAAA,QACZ;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,aAAU;AAAA,YACV,WAAU;AAAA;AAAA,QACZ;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAmC;AACjC,SACE;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MACT,GAAG;AAAA,MAEJ;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UAEC;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/primitives/accordion/accordion.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\";\r\nimport { cn } from \"../../../utils/index\";\r\nimport { Icon } from \"../icon/icon\";\r\n\r\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\r\n return (\r\n <AccordionPrimitive.Root\r\n data-slot=\"accordion\"\r\n className={cn(\r\n \"sg:flex sg:w-full sg:flex-col sg:rounded-lg sg:border sg:border-border sg:bg-card sg:text-card-foreground\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\r\n return (\r\n <AccordionPrimitive.Item\r\n data-slot=\"accordion-item\"\r\n className={cn(\r\n \"sg:not-last:border-b sg:not-last:border-border sg:data-open:bg-muted/40\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nfunction AccordionTrigger({\r\n className,\r\n children,\r\n ...props\r\n}: AccordionPrimitive.Trigger.Props) {\r\n return (\r\n <AccordionPrimitive.Header className=\"sg:m-0 sg:flex sg:w-full\">\r\n <AccordionPrimitive.Trigger\r\n data-slot=\"accordion-trigger\"\r\n className={cn(\r\n \"sg:group sg:relative sg:flex sg:w-full sg:flex-1 sg:items-center sg:justify-between sg:gap-4 sg:rounded-sm sg:p-4 sg:text-start sg:text-sm sg:font-medium sg:select-none sg:transition-colors sg:hover:not-data-disabled:bg-accent/50 sg:focus-visible:z-10 sg:focus-visible:outline-none sg:focus-visible:ring-2 sg:focus-visible:ring-inset sg:focus-visible:ring-ring sg:focus-visible:ring-offset-0 sg:disabled:pointer-events-none sg:disabled:opacity-50\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <Icon\r\n icon=\"ChevronDown\"\r\n size=\"xs\"\r\n data-slot=\"accordion-trigger-icon\"\r\n className=\"sg:pointer-events-none sg:shrink-0 sg:text-muted-foreground sg:transition-transform sg:duration-200 sg:ease-out sg:group-data-panel-open:rotate-180\"\r\n />\r\n </AccordionPrimitive.Trigger>\r\n </AccordionPrimitive.Header>\r\n );\r\n}\r\n\r\nfunction AccordionContent({\r\n className,\r\n children,\r\n ...props\r\n}: AccordionPrimitive.Panel.Props) {\r\n return (\r\n <AccordionPrimitive.Panel\r\n data-slot=\"accordion-content\"\r\n className=\"sg:h-(--accordion-panel-height) sg:overflow-hidden sg:text-sm sg:transition-[height] sg:duration-150 sg:ease-out sg:data-ending-style:h-0 sg:data-starting-style:h-0\"\r\n {...props}\r\n >\r\n <div\r\n className={cn(\r\n \"sg:px-4 sg:pb-4 sg:text-muted-foreground sg:[&_a]:underline sg:[&_a]:underline-offset-3 sg:[&_a]:hover:text-foreground sg:[&_p:not(:last-child)]:mb-4\",\r\n className,\r\n )}\r\n >\r\n {children}\r\n </div>\r\n </AccordionPrimitive.Panel>\r\n );\r\n}\r\n\r\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\r\n"],"mappings":";AAQI,cA+BE,YA/BF;AANJ,SAAS,aAAa,0BAA0B;AAChD,SAAS,UAAU;AACnB,SAAS,YAAY;AAErB,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAAkC;AACzE,SACE;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc,EAAE,WAAW,GAAG,MAAM,GAAkC;AAC7E,SACE;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAqC;AACnC,SACE,oBAAC,mBAAmB,QAAnB,EAA0B,WAAU,4BACnC;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,QACD;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,aAAU;AAAA,YACV,WAAU;AAAA;AAAA,QACZ;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAmC;AACjC,SACE;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MACT,GAAG;AAAA,MAEJ;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UAEC;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -1,4 +1,3 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import * as class_variance_authority_types from 'class-variance-authority/types';
3
2
  import * as React from 'react';
4
3
  import { VariantProps } from 'class-variance-authority';
@@ -12,9 +11,9 @@ declare const alertVariants: {
12
11
  declare const alertVariantsProps: (props?: ({
13
12
  variant?: "default" | "destructive" | null | undefined;
14
13
  } & class_variance_authority_types.ClassProp) | undefined) => string;
15
- declare function Alert({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof alertVariantsProps>): react_jsx_runtime.JSX.Element;
16
- declare function AlertTitle({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
17
- declare function AlertDescription({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
18
- declare function AlertAction({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
14
+ declare function Alert({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof alertVariantsProps>): React.JSX.Element;
15
+ declare function AlertTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
16
+ declare function AlertDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
17
+ declare function AlertAction({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
19
18
 
20
19
  export { Alert, AlertAction, AlertDescription, AlertTitle, alertVariants };
@@ -1,14 +1,13 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
1
  import * as React from 'react';
3
2
  import { Avatar as Avatar$1 } from '@base-ui/react';
4
3
 
5
4
  declare function Avatar({ className, size, ...props }: Avatar$1.Root.Props & {
6
5
  size?: "default" | "sm" | "lg";
7
- }): react_jsx_runtime.JSX.Element;
8
- declare function AvatarImage({ className, ...props }: Avatar$1.Image.Props): react_jsx_runtime.JSX.Element;
9
- declare function AvatarFallback({ className, ...props }: Avatar$1.Fallback.Props): react_jsx_runtime.JSX.Element;
10
- declare function AvatarBadge({ className, ...props }: React.ComponentProps<"span">): react_jsx_runtime.JSX.Element;
11
- declare function AvatarGroup({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
12
- declare function AvatarGroupCount({ className, ...props }: React.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
6
+ }): React.JSX.Element;
7
+ declare function AvatarImage({ className, ...props }: Avatar$1.Image.Props): React.JSX.Element;
8
+ declare function AvatarFallback({ className, ...props }: Avatar$1.Fallback.Props): React.JSX.Element;
9
+ declare function AvatarBadge({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
10
+ declare function AvatarGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
11
+ declare function AvatarGroupCount({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
13
12
 
14
13
  export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage };
@@ -11,7 +11,7 @@ const badgeVariants = {
11
11
  }
12
12
  };
13
13
  const badgeVariantsProps = cva(
14
- "sg:inline-flex sg:items-center sg:rounded-full sg:border sg:px-2.5 sg:py-0.5 sg:text-xs sg:font-semibold sg:transition-colors sg:focus:outline-none sg:focus:ring-2 sg:focus:ring-ring sg:focus:ring-offset-2",
14
+ "sg:inline-flex sg:items-center sg:rounded-full sg:border sg:px-2.5 sg:py-0.5 sg:text-xs sg:font-semibold sg:transition-colors sg:focus-visible:outline-none sg:focus-visible:ring-2 sg:focus-visible:ring-ring sg:focus-visible:ring-offset-2",
15
15
  {
16
16
  variants: badgeVariants,
17
17
  defaultVariants: {