singularity-components 0.1.151 → 0.1.193

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 (244) hide show
  1. package/README.md +29 -12
  2. package/dist/components/blocks/cards/blogpost-card.d.ts +9 -4
  3. package/dist/components/blocks/cards/blogpost-card.js +37 -23
  4. package/dist/components/blocks/cards/blogpost-card.js.map +1 -1
  5. package/dist/components/blocks/cards/card.js +1 -1
  6. package/dist/components/blocks/cards/card.js.map +1 -1
  7. package/dist/components/blocks/empty-state/EmptyState.d.ts +15 -0
  8. package/dist/components/blocks/empty-state/EmptyState.js +36 -0
  9. package/dist/components/blocks/empty-state/EmptyState.js.map +1 -0
  10. package/dist/components/blocks/index.d.ts +2 -0
  11. package/dist/components/blocks/index.js +4 -2
  12. package/dist/components/blocks/index.js.map +1 -1
  13. package/dist/components/blocks/post-list/post-filters.d.ts +19 -0
  14. package/dist/components/blocks/post-list/post-filters.js +99 -0
  15. package/dist/components/blocks/post-list/post-filters.js.map +1 -0
  16. package/dist/components/blocks/post-list/post-list-with-filters.d.ts +19 -0
  17. package/dist/components/blocks/post-list/post-list-with-filters.js +439 -0
  18. package/dist/components/blocks/post-list/post-list-with-filters.js.map +1 -0
  19. package/dist/components/index.d.ts +42 -12
  20. package/dist/components/index.js +5 -6
  21. package/dist/components/index.js.map +1 -1
  22. package/dist/components/pages/admin/admin-page.d.ts +8 -0
  23. package/dist/components/pages/admin/admin-page.js +299 -0
  24. package/dist/components/pages/admin/admin-page.js.map +1 -0
  25. package/dist/components/pages/blogpost/blogpost.js +440 -0
  26. package/dist/components/pages/blogpost/blogpost.js.map +1 -0
  27. package/dist/components/pages/category/category-page.d.ts +8 -0
  28. package/dist/components/pages/category/category-page.js +69 -0
  29. package/dist/components/pages/category/category-page.js.map +1 -0
  30. package/dist/components/pages/chat/chat-page.d.ts +5 -0
  31. package/dist/components/pages/chat/chat-page.js +209 -0
  32. package/dist/components/pages/chat/chat-page.js.map +1 -0
  33. package/dist/components/pages/index.d.ts +11 -0
  34. package/dist/components/pages/index.js +11 -0
  35. package/dist/components/pages/index.js.map +1 -0
  36. package/dist/components/pages/login/login-page.d.ts +19 -0
  37. package/dist/components/pages/login/login-page.js +108 -0
  38. package/dist/components/pages/login/login-page.js.map +1 -0
  39. package/dist/components/pages/maintenance/maintenance-page.d.ts +5 -0
  40. package/dist/components/pages/maintenance/maintenance-page.js +50 -0
  41. package/dist/components/pages/maintenance/maintenance-page.js.map +1 -0
  42. package/dist/components/pages/not-found/not-found.d.ts +10 -0
  43. package/dist/components/pages/not-found/not-found.js +64 -0
  44. package/dist/components/pages/not-found/not-found.js.map +1 -0
  45. package/dist/components/pages/privacy/privacy-page.d.ts +15 -0
  46. package/dist/components/pages/privacy/privacy-page.js +98 -0
  47. package/dist/components/pages/privacy/privacy-page.js.map +1 -0
  48. package/dist/components/pages/search/search-page.d.ts +5 -0
  49. package/dist/components/pages/search/search-page.js +18 -0
  50. package/dist/components/pages/search/search-page.js.map +1 -0
  51. package/dist/components/pages/startpage/startpage.js +50 -0
  52. package/dist/components/pages/startpage/startpage.js.map +1 -0
  53. package/dist/components/pages/terms/terms-page.d.ts +15 -0
  54. package/dist/components/pages/terms/terms-page.js +98 -0
  55. package/dist/components/pages/terms/terms-page.js.map +1 -0
  56. package/dist/components/primitives/accordion/accordion.js +1 -1
  57. package/dist/components/primitives/accordion/accordion.js.map +1 -1
  58. package/dist/components/primitives/alert/alert.js +1 -1
  59. package/dist/components/primitives/alert/alert.js.map +1 -1
  60. package/dist/components/primitives/avatar/avatar.d.ts +14 -0
  61. package/dist/components/primitives/avatar/avatar.js +103 -0
  62. package/dist/components/primitives/avatar/avatar.js.map +1 -0
  63. package/dist/components/primitives/badge/badge.d.ts +1 -1
  64. package/dist/components/primitives/badge/badge.js +5 -5
  65. package/dist/components/primitives/badge/badge.js.map +1 -1
  66. package/dist/components/primitives/badge/badges.js +1 -1
  67. package/dist/components/primitives/badge/badges.js.map +1 -1
  68. package/dist/components/primitives/{button → buttons}/button.d.ts +8 -7
  69. package/dist/components/primitives/{button → buttons}/button.js +19 -14
  70. package/dist/components/primitives/buttons/button.js.map +1 -0
  71. package/dist/components/primitives/buttons/icon-button.d.ts +33 -0
  72. package/dist/components/primitives/buttons/icon-button.js +61 -0
  73. package/dist/components/primitives/buttons/icon-button.js.map +1 -0
  74. package/dist/components/primitives/{link → buttons}/link-button.d.ts +7 -4
  75. package/dist/components/primitives/buttons/link-button.js +35 -0
  76. package/dist/components/primitives/buttons/link-button.js.map +1 -0
  77. package/dist/components/primitives/collapsible/collapsible.d.ts +9 -0
  78. package/dist/components/primitives/collapsible/collapsible.js +53 -0
  79. package/dist/components/primitives/collapsible/collapsible.js.map +1 -0
  80. package/dist/components/primitives/dropdown-menu/dropdown-menu.d.ts +30 -0
  81. package/dist/components/primitives/dropdown-menu/dropdown-menu.js +164 -0
  82. package/dist/components/primitives/dropdown-menu/dropdown-menu.js.map +1 -0
  83. package/dist/components/primitives/forms/checkbox.d.ts +6 -0
  84. package/dist/components/primitives/forms/checkbox.js +30 -0
  85. package/dist/components/primitives/forms/checkbox.js.map +1 -0
  86. package/dist/components/primitives/forms/field.d.ts +29 -0
  87. package/dist/components/primitives/forms/field.js +218 -0
  88. package/dist/components/primitives/forms/field.js.map +1 -0
  89. package/dist/components/primitives/forms/input.d.ts +6 -0
  90. package/dist/components/primitives/forms/input.js +22 -0
  91. package/dist/components/primitives/forms/input.js.map +1 -0
  92. package/dist/components/primitives/forms/select.d.ts +22 -0
  93. package/dist/components/primitives/forms/select.js +169 -0
  94. package/dist/components/primitives/forms/select.js.map +1 -0
  95. package/dist/components/primitives/forms/textarea.d.ts +6 -0
  96. package/dist/components/primitives/forms/textarea.js +20 -0
  97. package/dist/components/primitives/forms/textarea.js.map +1 -0
  98. package/dist/components/primitives/icon/icon.d.ts +9 -2
  99. package/dist/components/primitives/icon/icon.js +10 -3
  100. package/dist/components/primitives/icon/icon.js.map +1 -1
  101. package/dist/components/primitives/index.d.ts +23 -7
  102. package/dist/components/primitives/index.js +31 -20
  103. package/dist/components/primitives/index.js.map +1 -1
  104. package/dist/components/primitives/label/label.d.ts +6 -0
  105. package/dist/components/primitives/label/label.js +22 -0
  106. package/dist/components/primitives/label/label.js.map +1 -0
  107. package/dist/components/primitives/layout/layout.d.ts +6 -3
  108. package/dist/components/primitives/layout/layout.js +28 -11
  109. package/dist/components/primitives/layout/layout.js.map +1 -1
  110. package/dist/components/primitives/link/link.d.ts +11 -5
  111. package/dist/components/primitives/link/link.js +38 -11
  112. package/dist/components/primitives/link/link.js.map +1 -1
  113. package/dist/components/primitives/separator/separator.js +1 -1
  114. package/dist/components/primitives/separator/separator.js.map +1 -1
  115. package/dist/components/primitives/sheet/sheet.d.ts +29 -0
  116. package/dist/components/primitives/sheet/sheet.js +117 -0
  117. package/dist/components/primitives/sheet/sheet.js.map +1 -0
  118. package/dist/components/primitives/skeleton/skeleton.js +1 -1
  119. package/dist/components/primitives/skeleton/skeleton.js.map +1 -1
  120. package/dist/components/primitives/sonner/sonner.d.ts +7 -0
  121. package/dist/components/primitives/sonner/sonner.js +42 -0
  122. package/dist/components/primitives/sonner/sonner.js.map +1 -0
  123. package/dist/components/primitives/sonner/use-toast.d.ts +24 -0
  124. package/dist/components/primitives/sonner/use-toast.js +21 -0
  125. package/dist/components/primitives/sonner/use-toast.js.map +1 -0
  126. package/dist/components/primitives/spinner/spinner.js +1 -1
  127. package/dist/components/primitives/spinner/spinner.js.map +1 -1
  128. package/dist/components/primitives/stack/stack.d.ts +3 -0
  129. package/dist/components/primitives/stack/stack.js +34 -4
  130. package/dist/components/primitives/stack/stack.js.map +1 -1
  131. package/dist/components/primitives/text/{text-heading.d.ts → heading.d.ts} +5 -5
  132. package/dist/components/primitives/text/{text-heading.js → heading.js} +11 -11
  133. package/dist/components/primitives/text/heading.js.map +1 -0
  134. package/dist/components/primitives/text/internal/text-element.d.ts +7 -3
  135. package/dist/components/primitives/text/internal/text-element.js +4 -2
  136. package/dist/components/primitives/text/internal/text-element.js.map +1 -1
  137. package/dist/components/primitives/text/text-code.d.ts +26 -0
  138. package/dist/components/primitives/text/text-code.js +44 -0
  139. package/dist/components/primitives/text/text-code.js.map +1 -0
  140. package/dist/components/primitives/text/text-div.js +2 -2
  141. package/dist/components/primitives/text/text-div.js.map +1 -1
  142. package/dist/components/primitives/text/text-span.js +2 -2
  143. package/dist/components/primitives/text/text-span.js.map +1 -1
  144. package/dist/components/primitives/text/text-time.js +2 -2
  145. package/dist/components/primitives/text/text-time.js.map +1 -1
  146. package/dist/components/primitives/text/{text-paragraph.d.ts → text.d.ts} +4 -4
  147. package/dist/components/primitives/text/{text-paragraph.js → text.js} +11 -11
  148. package/dist/components/primitives/text/text.js.map +1 -0
  149. package/dist/components/primitives/{ui-image.d.ts → ui-image/ui-image.d.ts} +1 -1
  150. package/dist/components/primitives/{ui-image.js → ui-image/ui-image.js} +3 -3
  151. package/dist/components/primitives/ui-image/ui-image.js.map +1 -0
  152. package/dist/components/primitives/ui-link/ui-link.d.ts +8 -0
  153. package/dist/components/primitives/ui-link/ui-link.js +19 -0
  154. package/dist/components/primitives/ui-link/ui-link.js.map +1 -0
  155. package/dist/components/providers/LinkContext.d.ts +1 -1
  156. package/dist/components/providers/LinkContext.js +1 -1
  157. package/dist/components/providers/LinkContext.js.map +1 -1
  158. package/dist/components/providers/SingularityContext.d.ts +4 -1
  159. package/dist/components/providers/SingularityContext.js +7 -3
  160. package/dist/components/providers/SingularityContext.js.map +1 -1
  161. package/dist/components/providers/auth-provider.d.ts +15 -0
  162. package/dist/components/providers/auth-provider.js +30 -0
  163. package/dist/components/providers/auth-provider.js.map +1 -0
  164. package/dist/components/providers/index.d.ts +3 -0
  165. package/dist/components/providers/index.js +5 -3
  166. package/dist/components/providers/index.js.map +1 -1
  167. package/dist/components/providers/theme-provider.d.ts +27 -0
  168. package/dist/components/providers/theme-provider.js +75 -0
  169. package/dist/components/providers/theme-provider.js.map +1 -0
  170. package/dist/components/templates/container/container.d.ts +20 -0
  171. package/dist/components/templates/container/container.js +58 -0
  172. package/dist/components/templates/container/container.js.map +1 -0
  173. package/dist/components/templates/footer/footer.d.ts +5 -0
  174. package/dist/components/templates/footer/footer.js +12 -0
  175. package/dist/components/templates/footer/footer.js.map +1 -0
  176. package/dist/components/templates/form/form.d.ts +5 -0
  177. package/dist/components/templates/form/form.js +141 -0
  178. package/dist/components/templates/form/form.js.map +1 -0
  179. package/dist/components/templates/hero/hero.d.ts +18 -0
  180. package/dist/components/{sections → templates}/hero/hero.js +52 -22
  181. package/dist/components/templates/hero/hero.js.map +1 -0
  182. package/dist/components/templates/index.d.ts +4 -2
  183. package/dist/components/templates/index.js +4 -2
  184. package/dist/components/templates/index.js.map +1 -1
  185. package/dist/components/templates/navigation/header.d.ts +19 -0
  186. package/dist/components/templates/navigation/header.js +222 -0
  187. package/dist/components/templates/navigation/header.js.map +1 -0
  188. package/dist/components/templates/navigation/index.d.ts +3 -0
  189. package/dist/components/templates/navigation/index.js +2 -0
  190. package/dist/components/templates/navigation/index.js.map +1 -0
  191. package/dist/css/variables.css +2 -2
  192. package/dist/css/variables.css.map +1 -1
  193. package/dist/data/authors.d.ts +12 -0
  194. package/dist/data/authors.js +33 -0
  195. package/dist/data/authors.js.map +1 -0
  196. package/dist/data/posts.d.ts +5 -3
  197. package/dist/data/posts.js +66 -47
  198. package/dist/data/posts.js.map +1 -1
  199. package/dist/index.d.ts +42 -12
  200. package/dist/index.js +1 -1
  201. package/dist/index.js.map +1 -1
  202. package/dist/lib/helpers/index.js +1 -1
  203. package/dist/lib/helpers/index.js.map +1 -1
  204. package/dist/lib/index.js +2 -2
  205. package/dist/lib/index.js.map +1 -1
  206. package/dist/lib/types.d.ts +4 -8
  207. package/dist/main.css +1528 -85
  208. package/dist/main.css.map +1 -1
  209. package/dist/{utils.js → utils/index.js} +1 -1
  210. package/dist/utils/index.js.map +1 -0
  211. package/dist/utils/index.test.js +37 -0
  212. package/dist/utils/index.test.js.map +1 -0
  213. package/package.json +69 -44
  214. package/dist/components/primitives/button/button.js.map +0 -1
  215. package/dist/components/primitives/link/link-button.js +0 -21
  216. package/dist/components/primitives/link/link-button.js.map +0 -1
  217. package/dist/components/primitives/text/text-heading.js.map +0 -1
  218. package/dist/components/primitives/text/text-paragraph.js.map +0 -1
  219. package/dist/components/primitives/ui-image.js.map +0 -1
  220. package/dist/components/primitives/ui-link.d.ts +0 -8
  221. package/dist/components/primitives/ui-link.js +0 -16
  222. package/dist/components/primitives/ui-link.js.map +0 -1
  223. package/dist/components/sections/body/body.d.ts +0 -19
  224. package/dist/components/sections/body/body.js +0 -49
  225. package/dist/components/sections/body/body.js.map +0 -1
  226. package/dist/components/sections/footer/footer.d.ts +0 -12
  227. package/dist/components/sections/footer/footer.js +0 -59
  228. package/dist/components/sections/footer/footer.js.map +0 -1
  229. package/dist/components/sections/hero/hero.d.ts +0 -6
  230. package/dist/components/sections/hero/hero.js.map +0 -1
  231. package/dist/components/sections/index.d.ts +0 -3
  232. package/dist/components/sections/index.js +0 -4
  233. package/dist/components/sections/index.js.map +0 -1
  234. package/dist/components/templates/blogpost/blogpost.js +0 -173
  235. package/dist/components/templates/blogpost/blogpost.js.map +0 -1
  236. package/dist/components/templates/startpage/startpage.js +0 -48
  237. package/dist/components/templates/startpage/startpage.js.map +0 -1
  238. package/dist/components/units/index.js +0 -1
  239. package/dist/components/units/index.js.map +0 -1
  240. package/dist/utils.js.map +0 -1
  241. /package/dist/components/{templates → pages}/blogpost/blogpost.d.ts +0 -0
  242. /package/dist/components/{templates → pages}/startpage/startpage.d.ts +0 -0
  243. /package/dist/{utils.d.ts → utils/index.d.ts} +0 -0
  244. /package/dist/{components/units/index.d.ts → utils/index.test.d.ts} +0 -0
@@ -0,0 +1,37 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { cn } from "./index.js";
3
+ describe("cn utility", () => {
4
+ it("should merge basic tailwind classes", () => {
5
+ expect(cn("bg-red-500", "bg-blue-500")).toBe("bg-blue-500");
6
+ });
7
+ it("should merge basic sg: prefixed tailwind classes", () => {
8
+ expect(cn("sg:bg-red-500", "sg:bg-blue-500")).toBe("sg:bg-blue-500");
9
+ });
10
+ it("should merge a mix of unprefixed and prefixed tailwind classes", () => {
11
+ expect(cn("sg:bg-red-500", "bg-blue-500")).toBe("bg-blue-500");
12
+ });
13
+ it("should handle custom tailwind prefixes correctly", () => {
14
+ expect(cn("sg:px-2", "sg:-px-2")).toBe("sg:-px-2");
15
+ expect(cn("sg:p-4 sg:p-2")).toBe("sg:p-2");
16
+ expect(cn("sg:w-full", "sg:w-1/2")).toBe("sg:w-1/2");
17
+ expect(cn("sg:text-sm sg:text-lg sg:leading-6")).toBe(
18
+ "sg:text-lg sg:leading-6"
19
+ );
20
+ });
21
+ it("should preserve standard non-conflicting styles with prefix", () => {
22
+ expect(cn("sg:text-red-500", "sg:bg-blue-500")).toBe(
23
+ "sg:text-red-500 sg:bg-blue-500"
24
+ );
25
+ });
26
+ it("should ignore empty, null, undefined, false inputs", () => {
27
+ expect(
28
+ cn("sg:bg-red-500", null, void 0, false, "", "sg:text-white")
29
+ ).toBe("sg:bg-red-500 sg:text-white");
30
+ });
31
+ it("should combine correctly when passing objects or arrays", () => {
32
+ expect(
33
+ cn(["sg:bg-red-500"], { "sg:text-white": true, "sg:text-black": false })
34
+ ).toBe("sg:bg-red-500 sg:text-white");
35
+ });
36
+ });
37
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/index.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { cn } from \"./index\";\n\ndescribe(\"cn utility\", () => {\n it(\"should merge basic tailwind classes\", () => {\n expect(cn(\"bg-red-500\", \"bg-blue-500\")).toBe(\"bg-blue-500\");\n });\n\n it(\"should merge basic sg: prefixed tailwind classes\", () => {\n expect(cn(\"sg:bg-red-500\", \"sg:bg-blue-500\")).toBe(\"sg:bg-blue-500\");\n });\n\n it(\"should merge a mix of unprefixed and prefixed tailwind classes\", () => {\n // If someone passes sg:bg-red-500 and then an unprefixed bg-blue-500,\n // the unprefixed one should win because in the original `cn` logic it looks at unprefixed.\n expect(cn(\"sg:bg-red-500\", \"bg-blue-500\")).toBe(\"bg-blue-500\");\n });\n\n it(\"should handle custom tailwind prefixes correctly\", () => {\n expect(cn(\"sg:px-2\", \"sg:-px-2\")).toBe(\"sg:-px-2\");\n expect(cn(\"sg:p-4 sg:p-2\")).toBe(\"sg:p-2\");\n expect(cn(\"sg:w-full\", \"sg:w-1/2\")).toBe(\"sg:w-1/2\");\n expect(cn(\"sg:text-sm sg:text-lg sg:leading-6\")).toBe(\n \"sg:text-lg sg:leading-6\",\n );\n });\n\n it(\"should preserve standard non-conflicting styles with prefix\", () => {\n expect(cn(\"sg:text-red-500\", \"sg:bg-blue-500\")).toBe(\n \"sg:text-red-500 sg:bg-blue-500\",\n );\n });\n\n it(\"should ignore empty, null, undefined, false inputs\", () => {\n expect(\n cn(\"sg:bg-red-500\", null, undefined, false, \"\", \"sg:text-white\"),\n ).toBe(\"sg:bg-red-500 sg:text-white\");\n });\n\n it(\"should combine correctly when passing objects or arrays\", () => {\n expect(\n cn([\"sg:bg-red-500\"], { \"sg:text-white\": true, \"sg:text-black\": false }),\n ).toBe(\"sg:bg-red-500 sg:text-white\");\n });\n});\n"],"mappings":"AAAA,SAAS,UAAU,IAAI,cAAc;AACrC,SAAS,UAAU;AAEnB,SAAS,cAAc,MAAM;AAC3B,KAAG,uCAAuC,MAAM;AAC9C,WAAO,GAAG,cAAc,aAAa,CAAC,EAAE,KAAK,aAAa;AAAA,EAC5D,CAAC;AAED,KAAG,oDAAoD,MAAM;AAC3D,WAAO,GAAG,iBAAiB,gBAAgB,CAAC,EAAE,KAAK,gBAAgB;AAAA,EACrE,CAAC;AAED,KAAG,kEAAkE,MAAM;AAGzE,WAAO,GAAG,iBAAiB,aAAa,CAAC,EAAE,KAAK,aAAa;AAAA,EAC/D,CAAC;AAED,KAAG,oDAAoD,MAAM;AAC3D,WAAO,GAAG,WAAW,UAAU,CAAC,EAAE,KAAK,UAAU;AACjD,WAAO,GAAG,eAAe,CAAC,EAAE,KAAK,QAAQ;AACzC,WAAO,GAAG,aAAa,UAAU,CAAC,EAAE,KAAK,UAAU;AACnD,WAAO,GAAG,oCAAoC,CAAC,EAAE;AAAA,MAC/C;AAAA,IACF;AAAA,EACF,CAAC;AAED,KAAG,+DAA+D,MAAM;AACtE,WAAO,GAAG,mBAAmB,gBAAgB,CAAC,EAAE;AAAA,MAC9C;AAAA,IACF;AAAA,EACF,CAAC;AAED,KAAG,sDAAsD,MAAM;AAC7D;AAAA,MACE,GAAG,iBAAiB,MAAM,QAAW,OAAO,IAAI,eAAe;AAAA,IACjE,EAAE,KAAK,6BAA6B;AAAA,EACtC,CAAC;AAED,KAAG,2DAA2D,MAAM;AAClE;AAAA,MACE,GAAG,CAAC,eAAe,GAAG,EAAE,iBAAiB,MAAM,iBAAiB,MAAM,CAAC;AAAA,IACzE,EAAE,KAAK,6BAA6B;AAAA,EACtC,CAAC;AACH,CAAC;","names":[]}
package/package.json CHANGED
@@ -1,21 +1,24 @@
1
1
  {
2
2
  "name": "singularity-components",
3
- "version": "0.1.151",
3
+ "version": "0.1.193",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
7
7
  ],
8
8
  "main": "./dist/index.js",
9
9
  "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "sideEffects": [
12
+ "**/*.css"
13
+ ],
10
14
  "exports": {
11
- "./package.json": "./package.json",
12
15
  ".": {
13
16
  "types": "./dist/index.d.ts",
14
17
  "import": "./dist/index.js"
15
18
  },
16
- "./*": {
17
- "types": "./dist/*.d.ts",
18
- "import": "./dist/*.js"
19
+ "./components": {
20
+ "types": "./dist/components/index.d.ts",
21
+ "import": "./dist/components/index.js"
19
22
  },
20
23
  "./components/*": {
21
24
  "types": "./dist/components/*.d.ts",
@@ -25,76 +28,98 @@
25
28
  "types": "./dist/components/providers/*.d.ts",
26
29
  "import": "./dist/components/providers/*.js"
27
30
  },
31
+ "./lib": {
32
+ "types": "./dist/lib/index.d.ts",
33
+ "import": "./dist/lib/index.js"
34
+ },
28
35
  "./lib/*": {
29
36
  "types": "./dist/lib/*.d.ts",
30
37
  "import": "./dist/lib/*.js"
31
38
  },
32
39
  "./utils": {
33
- "types": "./dist/utils.d.ts",
34
- "import": "./dist/utils.js"
40
+ "types": "./dist/utils/index.d.ts",
41
+ "import": "./dist/utils/index.js"
35
42
  }
36
43
  },
37
- "scripts": {
38
- "build": "tsup",
39
- "storybook": "storybook dev -p 6006 --no-open",
40
- "storybook:build": "storybook build",
41
- "storybook:test": "vitest --project=storybook",
42
- "droplet-down": "docker-compose --context remote -f .\\docker-compose-droplet.yml down",
43
- "droplet-up": "powershell -ExecutionPolicy Bypass -File droplet-update-containers.ps1",
44
- "react-doctor": "npx -y react-doctor@latest . --verbose"
45
- },
46
44
  "keywords": [
47
- "test"
45
+ "ui",
46
+ "components",
47
+ "react",
48
+ "typescript",
49
+ "tailwindcss",
50
+ "headless",
51
+ "design-system"
48
52
  ],
49
53
  "author": "Filip",
50
54
  "license": "MIT",
51
55
  "description": "",
52
56
  "dependencies": {
53
- "@base-ui/react": "^1.2.0",
57
+ "@base-ui/react": "^1.4.1",
58
+ "@radix-ui/react-collapsible": "^1.1.12",
59
+ "@radix-ui/react-dialog": "^1.1.15",
60
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
54
61
  "@radix-ui/react-slot": "^1.2.4",
55
- "@tailwindcss/postcss": "^4.2.1",
62
+ "@tailwindcss/postcss": "^4.2.4",
56
63
  "class-variance-authority": "^0.7.1",
57
64
  "clsx": "^2.1.1",
58
- "lucide-react": "^0.575.0",
59
- "postcss": "^8.5.6",
60
- "react": "^19.2.4",
61
- "react-dom": "^19.2.4",
65
+ "framer-motion": "^12.38.0",
66
+ "isomorphic-dompurify": "^3.10.0",
67
+ "postcss": "^8.5.10",
62
68
  "react-spinners": "^0.17.0",
69
+ "sonner": "^2.0.7",
63
70
  "tailwind-merge": "^3.5.0",
64
- "tailwindcss": "^4.2.1",
71
+ "tailwindcss": "^4.2.4",
65
72
  "tailwindcss-animate": "^1.0.7"
66
73
  },
67
74
  "devDependencies": {
68
- "@storybook/addon-a11y": "^10.2.12",
69
- "@storybook/addon-docs": "^10.2.12",
70
- "@storybook/addon-links": "^10.2.12",
71
- "@storybook/addon-themes": "^10.2.12",
72
- "@storybook/addon-vitest": "^10.2.12",
73
- "@storybook/react-vite": "^10.2.12",
74
- "@types/node": "^25.3.0",
75
+ "@storybook/addon-a11y": "^10.3.5",
76
+ "@storybook/addon-docs": "^10.3.5",
77
+ "@storybook/addon-links": "^10.3.5",
78
+ "@storybook/addon-themes": "^10.3.5",
79
+ "@storybook/addon-vitest": "^10.3.5",
80
+ "@storybook/react-vite": "^10.3.5",
81
+ "@types/node": "^25.6.0",
75
82
  "@types/react": "^19.2.14",
76
83
  "@types/react-dom": "^19.2.3",
77
- "@typescript-eslint/eslint-plugin": "^8.56.1",
78
- "@typescript-eslint/parser": "^8.56.1",
79
- "@vitejs/plugin-react": "^5.1.4",
84
+ "@typescript-eslint/eslint-plugin": "^8.59.0",
85
+ "@typescript-eslint/parser": "^8.59.0",
86
+ "@vitejs/plugin-react": "^5.2.0",
80
87
  "@vitest/browser-playwright": "^4.0.18",
81
88
  "@vitest/coverage-v8": "^4.0.18",
82
- "eslint": "^9.39.3",
83
- "eslint-plugin-react-hooks": "^7.0.1",
89
+ "cross-env": "^10.1.0",
90
+ "eslint": "^9.39.4",
91
+ "eslint-plugin-import": "^2.32.0",
92
+ "eslint-plugin-react-hooks": "^7.1.1",
84
93
  "eslint-plugin-react-refresh": "^0.5.2",
85
- "eslint-plugin-storybook": "10.2.12",
86
- "playwright": "^1.58.2",
87
- "storybook": "^10.2.12",
94
+ "eslint-plugin-storybook": "10.3.5",
95
+ "lucide-react": "^1.8.0",
96
+ "playwright": "^1.59.1",
97
+ "react": "^19.2.5",
98
+ "react-dom": "^19.2.5",
99
+ "storybook": "^10.3.5",
88
100
  "tsup": "^8.5.1",
89
101
  "typescript": "^5.9.3",
90
- "vite": "^7.3.1",
102
+ "vite": "^8.0.9",
91
103
  "vite-plugin-dts": "^4.5.4",
92
104
  "vite-tsconfig-paths": "^6.1.1",
93
105
  "vitest": "^4.0.18"
94
106
  },
95
107
  "peerDependencies": {
96
- "lucide-react": "^0.575.0",
97
- "react": "^19.2.4",
98
- "react-dom": "^19.2.4"
108
+ "lucide-react": "^1.8.0",
109
+ "react": "^19.2.5",
110
+ "react-dom": "^19.2.5"
111
+ },
112
+ "scripts": {
113
+ "build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 tsup && node postbuild.mjs",
114
+ "test": "vitest",
115
+ "test:watch": "vitest",
116
+ "storybook": "storybook dev -p 6006 --no-open",
117
+ "storybook:build": "storybook build",
118
+ "storybook:test": "vitest --project=storybook",
119
+ "droplet-down": "docker-compose --context remote -f .\\docker-compose-droplet.yml down",
120
+ "droplet-up": "powershell -ExecutionPolicy Bypass -File droplet-update-containers.ps1",
121
+ "react-doctor": "npx -y react-doctor@latest . --verbose",
122
+ "openapi-types": "npx openapi-typescript https://api.filion.se/swagger/v1/swagger.json -o ./src/lib/api/v1.d.ts --alphabetize --default-non-nullable --root-types --root-types-no-schema-prefix",
123
+ "openapi-dev-types": "npx openapi-typescript http://localhost:5268/swagger/v1/swagger.json -o ./src/lib/api/v1.d.ts --alphabetize --default-non-nullable --root-types --root-types-no-schema-prefix"
99
124
  }
100
- }
125
+ }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/primitives/button/button.tsx"],"sourcesContent":["\"use client\";\r\nimport { cn } from \"../../../utils\";\r\nimport { Button as ButtonPrimitive } from \"@base-ui/react/button\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { icons } from \"lucide-react\";\r\n\r\nconst buttonVariants = {\r\n variant: {\r\n default: \"sg:bg-primary sg:text-primary-foreground sg:hover:brightness-110\",\r\n destructive:\r\n \"sg:bg-destructive sg:text-destructive-foreground sg:hover:brightness-110\",\r\n outline:\r\n \"sg:border sg:border-input sg:bg-background sg:hover:bg-muted sg:hover:text-foreground\",\r\n secondary:\r\n \"sg:bg-secondary sg:text-secondary-foreground sg:hover:brightness-90\",\r\n ghost: \"sg:hover:bg-muted sg:hover:text-foreground\",\r\n link: \"sg:text-primary sg:underline-offset-4 sg:hover:underline\",\r\n },\r\n size: {\r\n sm: \"sg:h-8 sg:gap-1 sg:px-3 sg:has-data-[icon=inline-end]:pr-2 sg:has-data-[icon=inline-start]:pl-2\",\r\n default:\r\n \"sg:h-9 sg:gap-1.5 sg:px-3 sg:has-data-[icon=inline-end]:pr-2.5 sg:has-data-[icon=inline-start]:pl-2.5\",\r\n lg: \"sg:h-10 sg:gap-1.5 sg:px-4 sg:has-data-[icon=inline-end]:pr-3 sg:has-data-[icon=inline-start]:pl-3\",\r\n \"icon-sm\": \"sg:size-8\",\r\n \"icon-md\": \"sg:size-9\",\r\n \"icon-lg\": \"sg:size-10\",\r\n },\r\n};\r\n\r\nconst buttonVariantsProps = cva(\r\n \"sg:inline-flex sg:items-center sg:justify-center sg:gap-2 sg:whitespace-nowrap sg:rounded-md sg:text-sm sg:font-medium sg:ring-offset-background sg:transition-colors sg:focus-visible:outline-none sg:focus-visible:ring-2 sg:focus-visible:ring-ring sg:focus-visible:ring-offset-2 sg:disabled:pointer-events-none sg:disabled:opacity-50 sg:[&_svg]:pointer-events-none sg:[&_svg]:size-4 sg:[&_svg]:shrink-0\",\r\n {\r\n variants: buttonVariants,\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n },\r\n);\r\n\r\ntype Props = ButtonPrimitive.Props &\r\n VariantProps<typeof buttonVariantsProps> & {\r\n iconStart?: keyof typeof icons;\r\n iconStartAnimate?: boolean;\r\n iconEnd?: keyof typeof icons;\r\n iconEndAnimate?: boolean;\r\n };\r\n\r\nfunction Button({\r\n className,\r\n variant = \"default\",\r\n size = \"default\",\r\n iconStart,\r\n iconStartAnimate,\r\n iconEnd,\r\n iconEndAnimate,\r\n ...props\r\n}: Props) {\r\n const iconAnimateCss = \"sg:animate-spin\";\r\n\r\n const LucideIconStart = iconStart && icons[iconStart];\r\n const LucideIconEnd = iconEnd && icons[iconEnd];\r\n\r\n return (\r\n <ButtonPrimitive\r\n data-slot=\"button\"\r\n className={cn(buttonVariantsProps({ variant, size, className }))}\r\n {...props}\r\n >\r\n {LucideIconStart && (\r\n <LucideIconStart\r\n className={cn(\r\n \"sg:size-4\",\r\n iconStartAnimate && iconAnimateCss,\r\n props.disabled && \"sg:opacity-50\",\r\n )}\r\n data-icon=\"inline-start\"\r\n />\r\n )}\r\n {props.children}\r\n {LucideIconEnd && (\r\n <LucideIconEnd\r\n className={cn(\r\n \"sg:size-4\",\r\n iconEndAnimate && iconAnimateCss,\r\n props.disabled && \"sg:opacity-50\",\r\n )}\r\n data-icon=\"inline-end\"\r\n />\r\n )}\r\n </ButtonPrimitive>\r\n );\r\n}\r\n\r\nexport { Button, buttonVariantsProps, buttonVariants };\r\n"],"mappings":";AAgEI,SAMI,KANJ;AA/DJ,SAAS,UAAU;AACnB,SAAS,UAAU,uBAAuB;AAC1C,SAAS,WAA8B;AACvC,SAAS,aAAa;AAEtB,MAAM,iBAAiB;AAAA,EACrB,SAAS;AAAA,IACP,SAAS;AAAA,IACT,aACE;AAAA,IACF,SACE;AAAA,IACF,WACE;AAAA,IACF,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,SACE;AAAA,IACF,IAAI;AAAA,IACJ,WAAW;AAAA,IACX,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AACF;AAEA,MAAM,sBAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAUA,SAAS,OAAO;AAAA,EACd;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAU;AACR,QAAM,iBAAiB;AAEvB,QAAM,kBAAkB,aAAa,MAAM,SAAS;AACpD,QAAM,gBAAgB,WAAW,MAAM,OAAO;AAE9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,oBAAoB,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,MAC9D,GAAG;AAAA,MAEH;AAAA,2BACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,oBAAoB;AAAA,cACpB,MAAM,YAAY;AAAA,YACpB;AAAA,YACA,aAAU;AAAA;AAAA,QACZ;AAAA,QAED,MAAM;AAAA,QACN,iBACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,kBAAkB;AAAA,cAClB,MAAM,YAAY;AAAA,YACpB;AAAA,YACA,aAAU;AAAA;AAAA,QACZ;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
@@ -1,21 +0,0 @@
1
- "use client";
2
- import { jsx } from "react/jsx-runtime";
3
- import {} from "../../providers/LinkContext";
4
- import {} from "class-variance-authority";
5
- import { buttonVariantsProps } from "../button/button";
6
- import { UiLink } from "../ui-link";
7
- import { cn } from "../../../utils";
8
- const LinkButton = ({ className, variant, size, ...props }) => {
9
- return /* @__PURE__ */ jsx(
10
- UiLink,
11
- {
12
- className: cn(buttonVariantsProps({ variant, size }), className),
13
- ...props,
14
- children: props.children
15
- }
16
- );
17
- };
18
- export {
19
- LinkButton
20
- };
21
- //# sourceMappingURL=link-button.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/primitives/link/link-button.tsx"],"sourcesContent":["\"use client\";\r\nimport { type BaseLinkProps } from \"../../providers/LinkContext\";\r\nimport { type VariantProps } from \"class-variance-authority\";\r\nimport { buttonVariantsProps } from \"../button/button\";\r\nimport { UiLink } from \"../ui-link\";\r\nimport { cn } from \"../../../utils\";\r\n\r\ntype Props = BaseLinkProps & VariantProps<typeof buttonVariantsProps>;\r\n\r\nexport const LinkButton = ({ className, variant, size, ...props }: Props) => {\r\n return (\r\n <UiLink\r\n className={cn(buttonVariantsProps({ variant, size }), className)}\r\n {...props}\r\n >\r\n {props.children}\r\n </UiLink>\r\n );\r\n};\r\n"],"mappings":";AAWI;AAVJ,eAAmC;AACnC,eAAkC;AAClC,SAAS,2BAA2B;AACpC,SAAS,cAAc;AACvB,SAAS,UAAU;AAIZ,MAAM,aAAa,CAAC,EAAE,WAAW,SAAS,MAAM,GAAG,MAAM,MAAa;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,oBAAoB,EAAE,SAAS,KAAK,CAAC,GAAG,SAAS;AAAA,MAC9D,GAAG;AAAA,MAEH,gBAAM;AAAA;AAAA,EACT;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/primitives/text/text-heading.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { textElementVariantsProps } from \"./internal/text-element\";\r\nimport { cn } from \"../../../utils\";\r\n\r\nexport const textHeadingVariants = {\r\n variant: {\r\n h1: \"sg:text-4xl sg:md:text-5xl sg:font-bold sg:tracking-tight sg:leading-tight\",\r\n h2: \"sg:text-3xl sg:md:text-4xl sg:font-semibold sg:tracking-tight sg:leading-snug\",\r\n h3: \"sg:text-2xl sg:md:text-3xl sg:font-semibold sg:leading-snug\",\r\n h4: \"sg:text-xl sg:md:text-2xl sg:font-medium sg:leading-normal\",\r\n h5: \"sg:text-lg sg:md:text-xl sg:font-medium sg:leading-normal\",\r\n h6: \"sg:text-md sg:md:text-lg sg:font-medium sg:leading-normal\",\r\n },\r\n};\r\n\r\nexport const textHeadingVariantsProps = cva(\"sg:font-display\", {\r\n variants: textHeadingVariants,\r\n defaultVariants: {\r\n variant: \"h2\",\r\n },\r\n});\r\n\r\nexport interface TextHeadingProps\r\n extends\r\n React.HTMLAttributes<HTMLHeadingElement>,\r\n VariantProps<typeof textHeadingVariantsProps> {\r\n as?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\r\n foreground?: VariantProps<typeof textElementVariantsProps>[\"foreground\"];\r\n}\r\n\r\nexport const TextHeading = ({\r\n children,\r\n as,\r\n variant,\r\n foreground,\r\n className,\r\n ...props\r\n}: TextHeadingProps) => {\r\n if (!as && variant) {\r\n as = variant;\r\n } else if (!as) {\r\n as = \"h2\";\r\n }\r\n const Component = as;\r\n\r\n return (\r\n <Component\r\n className={cn(\r\n textElementVariantsProps({ foreground }),\r\n textHeadingVariantsProps({ variant }),\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </Component>\r\n );\r\n};\r\n"],"mappings":"AA8CI;AA9CJ,SAAS,WAA8B;AACvC,SAAS,gCAAgC;AACzC,SAAS,UAAU;AAEZ,MAAM,sBAAsB;AAAA,EACjC,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AACF;AAEO,MAAM,2BAA2B,IAAI,mBAAmB;AAAA,EAC7D,UAAU;AAAA,EACV,iBAAiB;AAAA,IACf,SAAS;AAAA,EACX;AACF,CAAC;AAUM,MAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAwB;AACtB,MAAI,CAAC,MAAM,SAAS;AAClB,SAAK;AAAA,EACP,WAAW,CAAC,IAAI;AACd,SAAK;AAAA,EACP;AACA,QAAM,YAAY;AAElB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT,yBAAyB,EAAE,WAAW,CAAC;AAAA,QACvC,yBAAyB,EAAE,QAAQ,CAAC;AAAA,QACpC;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/primitives/text/text-paragraph.tsx"],"sourcesContent":["import type { OmitClassProperty } from \"../../../lib/types\";\nimport { cn } from \"../../../utils\";\nimport {\n type TextElementProps,\n TextElement,\n textElementVariantsProps,\n} from \"./internal/text-element\";\nimport { cva } from \"class-variance-authority\";\n\nexport const textParagraphVariants = {\n variant: {},\n};\n\nexport const textParagraphVariantsProps = cva(\"sg:leading-relaxed\", {\n variants: textParagraphVariants,\n defaultVariants: {},\n});\n\nexport const TextParagraph = ({\n children,\n size,\n foreground,\n fontweight,\n className,\n ...props\n}: OmitClassProperty<TextElementProps, \"as\">) => {\n return (\n <TextElement\n as=\"p\"\n className={cn(\n textElementVariantsProps({\n size,\n foreground,\n fontweight,\n }),\n textParagraphVariantsProps({}),\n className,\n )}\n {...props}\n >\n {children}\n </TextElement>\n );\n};\n"],"mappings":"AA2BI;AA1BJ,SAAS,UAAU;AACnB;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AACP,SAAS,WAAW;AAEb,MAAM,wBAAwB;AAAA,EACnC,SAAS,CAAC;AACZ;AAEO,MAAM,6BAA6B,IAAI,sBAAsB;AAAA,EAClE,UAAU;AAAA,EACV,iBAAiB,CAAC;AACpB,CAAC;AAEM,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAiD;AAC/C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,IAAG;AAAA,MACH,WAAW;AAAA,QACT,yBAAyB;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD,2BAA2B,CAAC,CAAC;AAAA,QAC7B;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/components/primitives/ui-image.tsx"],"sourcesContent":["\"use client\";\r\nimport { useIsClient } from \"../../lib\";\r\nimport {\r\n DefaultImage,\r\n useImage,\r\n type BaseImageProps,\r\n} from \"../providers/ImageContext\";\r\nimport { Skeleton } from \"./skeleton/skeleton\";\r\n\r\ntype Props = {\r\n showServerSideDefaultImageComponent?: boolean;\r\n} & BaseImageProps;\r\n\r\nexport function UiImage({\r\n showServerSideDefaultImageComponent,\r\n ...props\r\n}: Props) {\r\n const isClient = useIsClient();\r\n\r\n const ImageComponent = useImage();\r\n\r\n if (!isClient) {\r\n if (showServerSideDefaultImageComponent) {\r\n return (\r\n <DefaultImage\r\n src={props.src}\r\n alt={props.alt}\r\n className={props.className}\r\n />\r\n );\r\n } else {\r\n return <Skeleton />;\r\n }\r\n }\r\n\r\n return <ImageComponent {...props} />;\r\n}\r\n"],"mappings":";AAwBQ;AAvBR,SAAS,mBAAmB;AAC5B;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAS,gBAAgB;AAMlB,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA,GAAG;AACL,GAAU;AACR,QAAM,WAAW,YAAY;AAE7B,QAAM,iBAAiB,SAAS;AAEhC,MAAI,CAAC,UAAU;AACb,QAAI,qCAAqC;AACvC,aACE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,MAAM;AAAA,UACX,KAAK,MAAM;AAAA,UACX,WAAW,MAAM;AAAA;AAAA,MACnB;AAAA,IAEJ,OAAO;AACL,aAAO,oBAAC,YAAS;AAAA,IACnB;AAAA,EACF;AAEA,SAAO,oBAAC,kBAAgB,GAAG,OAAO;AACpC;","names":[]}
@@ -1,8 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { BaseLinkProps } from '../providers/LinkContext.js';
3
- import 'react';
4
-
5
- type Props = BaseLinkProps;
6
- declare const UiLink: ({ variant, textSize, buttonSize, ...props }: Props) => react_jsx_runtime.JSX.Element;
7
-
8
- export { UiLink };
@@ -1,16 +0,0 @@
1
- "use client";
2
- import { jsx } from "react/jsx-runtime";
3
- import { useIsClient } from "../../lib";
4
- import { useLink, DefaultLink } from "../providers";
5
- const UiLink = ({ variant, textSize, buttonSize, ...props }) => {
6
- const isClient = useIsClient();
7
- const LinkComponent = useLink();
8
- if (!isClient) {
9
- return /* @__PURE__ */ jsx(DefaultLink, { href: props.href, className: props.className, children: props.children });
10
- }
11
- return /* @__PURE__ */ jsx(LinkComponent, { className: props.className, ...props, children: props.children });
12
- };
13
- export {
14
- UiLink
15
- };
16
- //# sourceMappingURL=ui-link.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/components/primitives/ui-link.tsx"],"sourcesContent":["\"use client\";\r\nimport { useIsClient } from \"../../lib\";\r\nimport { type BaseLinkProps, useLink, DefaultLink } from \"../providers\";\r\n\r\ntype Props = BaseLinkProps;\r\n\r\nexport const UiLink = ({ variant, textSize, buttonSize, ...props }: Props) => {\r\n const isClient = useIsClient();\r\n const LinkComponent = useLink();\r\n\r\n if (!isClient) {\r\n return (\r\n <DefaultLink href={props.href} className={props.className}>\r\n {props.children}\r\n </DefaultLink>\r\n );\r\n }\r\n\r\n return (\r\n <LinkComponent className={props.className} {...props}>\r\n {props.children}\r\n </LinkComponent>\r\n );\r\n};\r\n"],"mappings":";AAYM;AAXN,SAAS,mBAAmB;AAC5B,SAA6B,SAAS,mBAAmB;AAIlD,MAAM,SAAS,CAAC,EAAE,SAAS,UAAU,YAAY,GAAG,MAAM,MAAa;AAC5E,QAAM,WAAW,YAAY;AAC7B,QAAM,gBAAgB,QAAQ;AAE9B,MAAI,CAAC,UAAU;AACb,WACE,oBAAC,eAAY,MAAM,MAAM,MAAM,WAAW,MAAM,WAC7C,gBAAM,UACT;AAAA,EAEJ;AAEA,SACE,oBAAC,iBAAc,WAAW,MAAM,WAAY,GAAG,OAC5C,gBAAM,UACT;AAEJ;","names":[]}
@@ -1,19 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import * as React from 'react';
3
- import { PropsWithChildren } from 'react';
4
-
5
- type Prop = {
6
- children?: React.ReactNode;
7
- as?: "body" | "div";
8
- } & React.HTMLAttributes<HTMLElement>;
9
- declare function Body({ children, as: Component, className, ...rest }: PropsWithChildren<Prop>): react_jsx_runtime.JSX.Element;
10
- declare namespace Body {
11
- var Header: ({ children, ...props }: ChildProp) => react_jsx_runtime.JSX.Element;
12
- var Content: ({ children, ...props }: ChildProp) => react_jsx_runtime.JSX.Element;
13
- var Footer: ({ children, ...props }: ChildProp) => react_jsx_runtime.JSX.Element;
14
- }
15
- type ChildProp = {
16
- children?: React.ReactNode;
17
- } & React.HTMLAttributes<HTMLElement>;
18
-
19
- export { Body };
@@ -1,49 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import * as React from "react";
3
- import { cn } from "../../../utils";
4
- function Body({
5
- children,
6
- as: Component = "body",
7
- className,
8
- ...rest
9
- }) {
10
- const childArray = React.Children.toArray(children);
11
- const header = childArray.find(
12
- (child) => React.isValidElement(child) && child.type === Header
13
- );
14
- const content = childArray.find(
15
- (child) => React.isValidElement(child) && child.type === Content
16
- );
17
- const footer = childArray.find(
18
- (child) => React.isValidElement(child) && child.type === Footer
19
- );
20
- const gridRows = cn(
21
- "sg:grid",
22
- header && footer && "sg:grid-rows-[auto_1fr_auto]",
23
- header && !footer && "sg:grid-rows-[auto_1fr]",
24
- !header && footer && "sg:grid-rows-[1fr_auto]",
25
- !header && !footer && "sg:grid-rows-[1fr]",
26
- className
27
- );
28
- return /* @__PURE__ */ jsxs(Component, { className: gridRows, ...rest, children: [
29
- header,
30
- content,
31
- footer
32
- ] });
33
- }
34
- function Header({ children, ...props }) {
35
- return /* @__PURE__ */ jsx("div", { ...props, children });
36
- }
37
- function Content({ children, ...props }) {
38
- return /* @__PURE__ */ jsx("div", { ...props, children });
39
- }
40
- function Footer({ children, ...props }) {
41
- return /* @__PURE__ */ jsx("div", { ...props, children });
42
- }
43
- Body.Header = Header;
44
- Body.Content = Content;
45
- Body.Footer = Footer;
46
- export {
47
- Body
48
- };
49
- //# sourceMappingURL=body.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/sections/body/body.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../../../utils\";\nimport type { PropsWithChildren } from \"react\";\n\ntype Prop = {\n children?: React.ReactNode;\n as?: \"body\" | \"div\";\n} & React.HTMLAttributes<HTMLElement>;\n\nfunction Body({\n children,\n as: Component = \"body\",\n className,\n ...rest\n}: PropsWithChildren<Prop>) {\n const childArray = React.Children.toArray(children);\n\n const header = childArray.find(\n (child) => React.isValidElement(child) && child.type === Header,\n );\n const content = childArray.find(\n (child) => React.isValidElement(child) && child.type === Content,\n );\n const footer = childArray.find(\n (child) => React.isValidElement(child) && child.type === Footer,\n );\n\n const gridRows = cn(\n \"sg:grid\",\n header && footer && \"sg:grid-rows-[auto_1fr_auto]\",\n header && !footer && \"sg:grid-rows-[auto_1fr]\",\n !header && footer && \"sg:grid-rows-[1fr_auto]\",\n !header && !footer && \"sg:grid-rows-[1fr]\",\n className,\n );\n\n return (\n <Component className={gridRows} {...rest}>\n {header}\n {content}\n {footer}\n </Component>\n );\n}\n\ntype ChildProp = {\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLElement>;\n\nfunction Header({ children, ...props }: ChildProp) {\n return <div {...props}>{children}</div>;\n}\n\nfunction Content({ children, ...props }: ChildProp) {\n return <div {...props}>{children}</div>;\n}\n\nfunction Footer({ children, ...props }: ChildProp) {\n return <div {...props}>{children}</div>;\n}\n\nBody.Header = Header;\nBody.Content = Content;\nBody.Footer = Footer;\n\nexport { Body };\n"],"mappings":"AAqCI,SAaK,KAbL;AArCJ,YAAY,WAAW;AACvB,SAAS,UAAU;AAQnB,SAAS,KAAK;AAAA,EACZ;AAAA,EACA,IAAI,YAAY;AAAA,EAChB;AAAA,EACA,GAAG;AACL,GAA4B;AAC1B,QAAM,aAAa,MAAM,SAAS,QAAQ,QAAQ;AAElD,QAAM,SAAS,WAAW;AAAA,IACxB,CAAC,UAAU,MAAM,eAAe,KAAK,KAAK,MAAM,SAAS;AAAA,EAC3D;AACA,QAAM,UAAU,WAAW;AAAA,IACzB,CAAC,UAAU,MAAM,eAAe,KAAK,KAAK,MAAM,SAAS;AAAA,EAC3D;AACA,QAAM,SAAS,WAAW;AAAA,IACxB,CAAC,UAAU,MAAM,eAAe,KAAK,KAAK,MAAM,SAAS;AAAA,EAC3D;AAEA,QAAM,WAAW;AAAA,IACf;AAAA,IACA,UAAU,UAAU;AAAA,IACpB,UAAU,CAAC,UAAU;AAAA,IACrB,CAAC,UAAU,UAAU;AAAA,IACrB,CAAC,UAAU,CAAC,UAAU;AAAA,IACtB;AAAA,EACF;AAEA,SACE,qBAAC,aAAU,WAAW,UAAW,GAAG,MACjC;AAAA;AAAA,IACA;AAAA,IACA;AAAA,KACH;AAEJ;AAMA,SAAS,OAAO,EAAE,UAAU,GAAG,MAAM,GAAc;AACjD,SAAO,oBAAC,SAAK,GAAG,OAAQ,UAAS;AACnC;AAEA,SAAS,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAc;AAClD,SAAO,oBAAC,SAAK,GAAG,OAAQ,UAAS;AACnC;AAEA,SAAS,OAAO,EAAE,UAAU,GAAG,MAAM,GAAc;AACjD,SAAO,oBAAC,SAAK,GAAG,OAAQ,UAAS;AACnC;AAEA,KAAK,SAAS;AACd,KAAK,UAAU;AACf,KAAK,SAAS;","names":[]}
@@ -1,12 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
-
3
- type FooterLink = {
4
- label: string;
5
- to: string;
6
- };
7
- type Props = {
8
- links?: FooterLink[];
9
- };
10
- declare function Footer({ links }: Props): react_jsx_runtime.JSX.Element;
11
-
12
- export { Footer as default };
@@ -1,59 +0,0 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import {
3
- Layout,
4
- Link,
5
- Stack,
6
- TextDiv,
7
- TextHeading,
8
- TextParagraph,
9
- TextSpan
10
- } from "../../primitives";
11
- function Footer({ links }) {
12
- return /* @__PURE__ */ jsx(Layout, { as: "footer", className: "sg:border-t sg:mt-auto sg:py-12", children: /* @__PURE__ */ jsxs(Layout.Col1, { hideDiv: true, children: [
13
- /* @__PURE__ */ jsxs("div", { className: "sg:grid sg:grid-cols-1 sg:md:grid-cols-3 sg:gap-8", children: [
14
- /* @__PURE__ */ jsxs(Stack, { gap: 3, children: [
15
- /* @__PURE__ */ jsxs(TextSpan, { size: "xl", fontweight: "bold", foreground: "primary", children: [
16
- "filion",
17
- /* @__PURE__ */ jsx(TextSpan, { size: "xl", fontweight: "bold", foreground: "secondary", children: "." })
18
- ] }),
19
- /* @__PURE__ */ jsx(
20
- TextParagraph,
21
- {
22
- foreground: "muted-foreground",
23
- size: "sm",
24
- className: "max-w-xs",
25
- children: "A curated space for thoughtful writing about design, culture, and the art of living well."
26
- }
27
- )
28
- ] }),
29
- /* @__PURE__ */ jsxs("div", { children: [
30
- /* @__PURE__ */ jsx(TextHeading, { variant: "h4", children: "Navigate" }),
31
- links && /* @__PURE__ */ jsx(
32
- "nav",
33
- {
34
- className: "sg:flex sg:flex-col sg:gap-2",
35
- "aria-label": "Footer navigation",
36
- children: links.map((link) => /* @__PURE__ */ jsx(Link, { href: link.to, variant: "footer", size: "sm", children: link.label }, link.to))
37
- }
38
- )
39
- ] }),
40
- /* @__PURE__ */ jsxs("div", { children: [
41
- /* @__PURE__ */ jsx(TextHeading, { variant: "h4", children: "About" }),
42
- /* @__PURE__ */ jsx(TextParagraph, { foreground: "muted-foreground", size: "sm", children: "Built with React, Tailwind CSS, and shadcn/ui. This blog uses a warm, editorial design system with terracotta and gold accents." })
43
- ] })
44
- ] }),
45
- /* @__PURE__ */ jsx(
46
- TextDiv,
47
- {
48
- className: "sg:mt-8 sg:pt-6 sg:border-t sg:text-center",
49
- foreground: "muted-foreground",
50
- size: "xs",
51
- children: "filion."
52
- }
53
- )
54
- ] }) });
55
- }
56
- export {
57
- Footer as default
58
- };
59
- //# sourceMappingURL=footer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/sections/footer/footer.tsx"],"sourcesContent":["import {\r\n Layout,\r\n Link,\r\n Stack,\r\n TextDiv,\r\n TextHeading,\r\n TextParagraph,\r\n TextSpan,\r\n} from \"../../primitives\";\r\n\r\ntype FooterLink = {\r\n label: string;\r\n to: string;\r\n};\r\n\r\ntype Props = {\r\n links?: FooterLink[];\r\n};\r\n\r\nexport default function Footer({ links }: Props) {\r\n return (\r\n <Layout as=\"footer\" className=\"sg:border-t sg:mt-auto sg:py-12\">\r\n <Layout.Col1 hideDiv>\r\n <div className=\"sg:grid sg:grid-cols-1 sg:md:grid-cols-3 sg:gap-8\">\r\n {/* Brand */}\r\n <Stack gap={3}>\r\n <TextSpan size=\"xl\" fontweight=\"bold\" foreground=\"primary\">\r\n filion\r\n <TextSpan size=\"xl\" fontweight=\"bold\" foreground=\"secondary\">\r\n .\r\n </TextSpan>\r\n </TextSpan>\r\n <TextParagraph\r\n foreground=\"muted-foreground\"\r\n size=\"sm\"\r\n className=\"max-w-xs\"\r\n >\r\n A curated space for thoughtful writing about design, culture, and\r\n the art of living well.\r\n </TextParagraph>\r\n </Stack>\r\n\r\n {/* Links */}\r\n <div>\r\n <TextHeading variant=\"h4\">Navigate</TextHeading>\r\n\r\n {links && (\r\n <nav\r\n className=\"sg:flex sg:flex-col sg:gap-2\"\r\n aria-label=\"Footer navigation\"\r\n >\r\n {links.map((link) => (\r\n <Link key={link.to} href={link.to} variant=\"footer\" size=\"sm\">\r\n {link.label}\r\n </Link>\r\n ))}\r\n </nav>\r\n )}\r\n </div>\r\n\r\n {/* Info */}\r\n <div>\r\n <TextHeading variant=\"h4\">About</TextHeading>\r\n <TextParagraph foreground=\"muted-foreground\" size=\"sm\">\r\n Built with React, Tailwind CSS, and shadcn/ui. This blog uses a\r\n warm, editorial design system with terracotta and gold accents.\r\n </TextParagraph>\r\n </div>\r\n </div>\r\n <TextDiv\r\n className=\"sg:mt-8 sg:pt-6 sg:border-t sg:text-center\"\r\n foreground=\"muted-foreground\"\r\n size=\"xs\"\r\n >\r\n filion.\r\n </TextDiv>\r\n </Layout.Col1>\r\n </Layout>\r\n );\r\n}\r\n"],"mappings":"AA0BY,SAEE,KAFF;AA1BZ;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAWQ,SAAR,OAAwB,EAAE,MAAM,GAAU;AAC/C,SACE,oBAAC,UAAO,IAAG,UAAS,WAAU,mCAC5B,+BAAC,OAAO,MAAP,EAAY,SAAO,MAClB;AAAA,yBAAC,SAAI,WAAU,qDAEb;AAAA,2BAAC,SAAM,KAAK,GACV;AAAA,6BAAC,YAAS,MAAK,MAAK,YAAW,QAAO,YAAW,WAAU;AAAA;AAAA,UAEzD,oBAAC,YAAS,MAAK,MAAK,YAAW,QAAO,YAAW,aAAY,eAE7D;AAAA,WACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,YAAW;AAAA,YACX,MAAK;AAAA,YACL,WAAU;AAAA,YACX;AAAA;AAAA,QAGD;AAAA,SACF;AAAA,MAGA,qBAAC,SACC;AAAA,4BAAC,eAAY,SAAQ,MAAK,sBAAQ;AAAA,QAEjC,SACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,cAAW;AAAA,YAEV,gBAAM,IAAI,CAAC,SACV,oBAAC,QAAmB,MAAM,KAAK,IAAI,SAAQ,UAAS,MAAK,MACtD,eAAK,SADG,KAAK,EAEhB,CACD;AAAA;AAAA,QACH;AAAA,SAEJ;AAAA,MAGA,qBAAC,SACC;AAAA,4BAAC,eAAY,SAAQ,MAAK,mBAAK;AAAA,QAC/B,oBAAC,iBAAc,YAAW,oBAAmB,MAAK,MAAK,6IAGvD;AAAA,SACF;AAAA,OACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,YAAW;AAAA,QACX,MAAK;AAAA,QACN;AAAA;AAAA,IAED;AAAA,KACF,GACF;AAEJ;","names":[]}
@@ -1,6 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
-
3
- type Props = {};
4
- declare function Hero({}: Props): react_jsx_runtime.JSX.Element;
5
-
6
- export { Hero as default };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/sections/hero/hero.tsx"],"sourcesContent":["\"use client\";\r\nimport {\r\n Layout,\r\n LinkButton,\r\n Stack,\r\n TextHeading,\r\n TextParagraph,\r\n TextSpan,\r\n} from \"../../primitives\";\r\nimport { useCallback, useMemo, useRef, useState } from \"react\";\r\n\r\nfunction generateSparkles(count: number) {\r\n return Array.from({ length: count }, (_, i) => ({\r\n id: i,\r\n left: Math.random() * 100,\r\n top: Math.random() * 100,\r\n size: Math.random() * 4 + 2,\r\n delay: Math.random() * 5,\r\n duration: Math.random() * 2 + 1.5,\r\n }));\r\n}\r\n\r\ninterface BurstParticle {\r\n id: number;\r\n x: number;\r\n y: number;\r\n angle: number;\r\n speed: number;\r\n hue: number;\r\n size: number;\r\n}\r\n\r\ntype Props = {};\r\n\r\nexport default function Hero({}: Props) {\r\n const heroRef = useRef<HTMLElement>(null);\r\n const [mouse, setMouse] = useState({ x: 0.5, y: 0.5 });\r\n const [mousePixel, setMousePixel] = useState({ x: 0, y: 0 });\r\n const sparkles = useMemo(() => generateSparkles(40), []);\r\n const [bursts, setBursts] = useState<BurstParticle[]>([]);\r\n const burstIdRef = useRef(0);\r\n\r\n const handleMouseMove = useCallback((e: React.MouseEvent<HTMLElement>) => {\r\n const rect = heroRef.current?.getBoundingClientRect();\r\n if (!rect) return;\r\n setMouse({\r\n x: (e.clientX - rect.left) / rect.width,\r\n y: (e.clientY - rect.top) / rect.height,\r\n });\r\n setMousePixel({\r\n x: e.clientX - rect.left,\r\n y: e.clientY - rect.top,\r\n });\r\n }, []);\r\n\r\n const handleClick = useCallback((e: React.MouseEvent<HTMLElement>) => {\r\n const rect = heroRef.current?.getBoundingClientRect();\r\n if (!rect) return;\r\n const cx = e.clientX - rect.left;\r\n const cy = e.clientY - rect.top;\r\n const count = 18;\r\n\r\n const newBursts: BurstParticle[] = Array.from(\r\n { length: count },\r\n (_, i) => ({\r\n id: burstIdRef.current++,\r\n x: cx,\r\n y: cy,\r\n angle: (360 / count) * i + Math.random() * 20 - 10,\r\n speed: Math.random() * 120 + 60,\r\n hue: Math.random() * 360,\r\n size: Math.random() * 5 + 3,\r\n }),\r\n );\r\n\r\n setBursts((prev) => [...prev, ...newBursts]);\r\n setTimeout(() => {\r\n setBursts((prev) => prev.filter((b) => !newBursts.includes(b)));\r\n }, 800);\r\n }, []);\r\n\r\n return (\r\n <Layout type=\"full\">\r\n <Layout.Col1 hideDiv>\r\n <section\r\n ref={heroRef}\r\n onMouseMove={handleMouseMove}\r\n onClick={handleClick}\r\n className=\"sg:relative sg:overflow-hidden sg:bg-background sg:cursor-crosshair\"\r\n >\r\n {/* Colorful gradient blobs — follow mouse */}\r\n <div\r\n className=\"sg:absolute sg:inset-0 sg:overflow-hidden sg:pointer-events-none\"\r\n aria-hidden=\"true\"\r\n >\r\n {/* Hot pink / magenta */}\r\n <div\r\n className=\"sg:absolute sg:h-175 sg:w-175 sg:rounded-full sg:opacity-35 sg:blur-[90px] sg:transition-transform sg:duration-500 sg:ease-out\"\r\n style={{\r\n background: \"hsl(330, 90%, 55%)\",\r\n transform: `translate(${mouse.x * 70 - 35}%, ${mouse.y * 60 - 50}%)`,\r\n top: \"-10%\",\r\n right: \"-5%\",\r\n }}\r\n />\r\n {/* Electric blue */}\r\n <div\r\n className=\"sg:absolute sg:h-150 sg:w-150 sg:rounded-full sg:opacity-30 sg:blur-[80px] sg:transition-transform sg:duration-700 sg:ease-out\"\r\n style={{\r\n background: \"hsl(220, 95%, 55%)\",\r\n transform: `translate(${mouse.x * -60 + 30}%, ${mouse.y * 50 - 25}%)`,\r\n top: \"20%\",\r\n left: \"-8%\",\r\n }}\r\n />\r\n {/* Vivid orange */}\r\n <div\r\n className=\"sg:absolute sg:h-137.5 sg:w-137.5 sg:rounded-full sg:opacity-30 sg:blur-[70px] sg:transition-transform sg:duration-900 sg:ease-out\"\r\n style={{\r\n background: \"hsl(25, 95%, 55%)\",\r\n transform: `translate(${mouse.x * 55 - 28}%, ${mouse.y * -55 + 28}%)`,\r\n bottom: \"-5%\",\r\n right: \"15%\",\r\n }}\r\n />\r\n {/* Lime / green */}\r\n <div\r\n className=\"sg:absolute sg:h-100 sg:w-100 sg:rounded-full sg:opacity-25 sg:blur-[60px] sg:transition-transform sg:duration-400 sg:ease-out\"\r\n style={{\r\n background: \"hsl(145, 80%, 45%)\",\r\n transform: `translate(${mouse.x * 80 - 40}%, ${mouse.y * 80 - 40}%)`,\r\n top: \"5%\",\r\n left: \"20%\",\r\n }}\r\n />\r\n {/* Purple / violet */}\r\n <div\r\n className=\"sg:absolute sg:h-125 sg:w-125 sg:rounded-full sg:opacity-25 sg:blur-[75px] sg:transition-transform sg:duration-600 sg:ease-out\"\r\n style={{\r\n background: \"hsl(270, 85%, 55%)\",\r\n transform: `translate(${mouse.x * -45 + 22}%, ${mouse.y * 65 - 32}%)`,\r\n bottom: \"10%\",\r\n left: \"30%\",\r\n }}\r\n />\r\n {/* Yellow / gold accent */}\r\n <div\r\n className=\"sg:absolute sg:h-87.5 sg:w-87.5 sg:rounded-full sg:opacity-20 sg:blur-[50px] sg:transition-transform sg:duration-350 sg:ease-out\"\r\n style={{\r\n background: \"hsl(50, 95%, 55%)\",\r\n transform: `translate(${mouse.x * 90 - 45}%, ${mouse.y * -70 + 35}%)`,\r\n top: \"40%\",\r\n right: \"5%\",\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Sparkle / glitter particles */}\r\n <div\r\n className=\"sg:absolute sg:inset-0 sg:overflow-hidden sg:pointer-events-none\"\r\n aria-hidden=\"true\"\r\n >\r\n {sparkles.map((s) => (\r\n <div\r\n key={s.id}\r\n className=\"sg:absolute sg:rounded-full\"\r\n style={{\r\n left: `${s.left}%`,\r\n top: `${s.top}%`,\r\n width: s.size,\r\n height: s.size,\r\n background: `hsl(${(s.id * 47) % 360}, 90%, 70%)`,\r\n boxShadow: `0 0 ${s.size * 2}px hsl(${(s.id * 47) % 360}, 90%, 70%)`,\r\n animation: `sparkle ${s.duration}s ${s.delay}s ease-in-out infinite`,\r\n transform: `translate(${(mouse.x - 0.5) * s.size * 8}px, ${(mouse.y - 0.5) * s.size * 8}px)`,\r\n transition: \"transform 0.3s ease-out\",\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Cursor spotlight */}\r\n <div\r\n className=\"sg:absolute sg:pointer-events-none\"\r\n style={{\r\n left: mousePixel.x - 150,\r\n top: mousePixel.y - 150,\r\n width: 300,\r\n height: 300,\r\n background:\r\n \"radial-gradient(circle, hsla(0, 0%, 100%, 0.15) 0%, transparent 60%)\",\r\n transition: \"left 0.1s ease-out, top 0.1s ease-out\",\r\n }}\r\n aria-hidden=\"true\"\r\n />\r\n\r\n {/* Click burst particles */}\r\n <div\r\n className=\"sg:absolute sg:inset-0 sg:pointer-events-none sg:overflow-hidden\"\r\n aria-hidden=\"true\"\r\n >\r\n {bursts.map((b) => (\r\n <div\r\n key={b.id}\r\n className=\"sg:absolute sg:rounded-full\"\r\n style={\r\n {\r\n left: b.x,\r\n top: b.y,\r\n width: b.size,\r\n height: b.size,\r\n background: `hsl(${b.hue}, 90%, 65%)`,\r\n boxShadow: `0 0 ${b.size * 3}px hsl(${b.hue}, 90%, 65%)`,\r\n animation: `burst 0.7s ease-out forwards`,\r\n \"--burst-x\": `${Math.cos((b.angle * Math.PI) / 180) * b.speed}px`,\r\n \"--burst-y\": `${Math.sin((b.angle * Math.PI) / 180) * b.speed}px`,\r\n } as React.CSSProperties\r\n }\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Subtle grain texture overlay */}\r\n <div\r\n className=\"sg:absolute sg:inset-0 sg:opacity-[0.02] sg:dark:opacity-[0.04] sg:pointer-events-none\"\r\n style={{\r\n backgroundImage:\r\n \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E\\\")\",\r\n }}\r\n aria-hidden=\"true\"\r\n />\r\n\r\n <Layout type=\"col\" className=\"sg:py-20 sg:md:py-32\">\r\n <Layout.Col1 hideDiv>\r\n <TextHeading variant=\"h1\">\r\n Stories worth{\" \"}\r\n <TextSpan size=\"4xl\" foreground=\"primary\">\r\n savoring\r\n </TextSpan>\r\n </TextHeading>\r\n\r\n <TextParagraph\r\n size=\"lg\"\r\n foreground=\"muted-foreground\"\r\n className=\"sg:mt-6 sg:max-w-xl\"\r\n >\r\n A curated journal exploring design, culture, and the quiet art\r\n of living with intention.\r\n </TextParagraph>\r\n\r\n <Stack gap={3} direction=\"row\" className=\"sg:mt-8\">\r\n <LinkButton buttonSize=\"lg\" href=\"#\" className=\"sg:z-1\">\r\n Browse all posts\r\n </LinkButton>\r\n <LinkButton\r\n variant=\"secondary\"\r\n buttonSize=\"lg\"\r\n href=\"#\"\r\n className=\"sg:z-1\"\r\n >\r\n Our design system\r\n </LinkButton>\r\n </Stack>\r\n </Layout.Col1>\r\n </Layout>\r\n\r\n {/* Bottom fade to background */}\r\n <div\r\n className=\"sg:absolute sg:bottom-0 sg:left-0 sg:right-0 sg:h-32 sg:bg-linear-to-t sg:from-background sg:to-transparent sg:pointer-events-none\"\r\n aria-hidden=\"true\"\r\n />\r\n </section>\r\n </Layout.Col1>\r\n </Layout>\r\n );\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1,3 +0,0 @@
1
- export { Body } from './body/body.js';
2
- import 'react/jsx-runtime';
3
- import 'react';
@@ -1,4 +0,0 @@
1
- export * from "./body/body";
2
- export * from "./footer/footer";
3
- export * from "./hero/hero";
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/components/sections/index.ts"],"sourcesContent":["export * from \"./body/body\";\r\nexport * from \"./footer/footer\";\r\nexport * from \"./hero/hero\";\r\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}