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.
- package/README.md +29 -12
- package/dist/components/blocks/cards/blogpost-card.d.ts +9 -4
- package/dist/components/blocks/cards/blogpost-card.js +37 -23
- package/dist/components/blocks/cards/blogpost-card.js.map +1 -1
- package/dist/components/blocks/cards/card.js +1 -1
- package/dist/components/blocks/cards/card.js.map +1 -1
- package/dist/components/blocks/empty-state/EmptyState.d.ts +15 -0
- package/dist/components/blocks/empty-state/EmptyState.js +36 -0
- package/dist/components/blocks/empty-state/EmptyState.js.map +1 -0
- package/dist/components/blocks/index.d.ts +2 -0
- package/dist/components/blocks/index.js +4 -2
- package/dist/components/blocks/index.js.map +1 -1
- package/dist/components/blocks/post-list/post-filters.d.ts +19 -0
- package/dist/components/blocks/post-list/post-filters.js +99 -0
- package/dist/components/blocks/post-list/post-filters.js.map +1 -0
- package/dist/components/blocks/post-list/post-list-with-filters.d.ts +19 -0
- package/dist/components/blocks/post-list/post-list-with-filters.js +439 -0
- package/dist/components/blocks/post-list/post-list-with-filters.js.map +1 -0
- package/dist/components/index.d.ts +42 -12
- package/dist/components/index.js +5 -6
- package/dist/components/index.js.map +1 -1
- package/dist/components/pages/admin/admin-page.d.ts +8 -0
- package/dist/components/pages/admin/admin-page.js +299 -0
- package/dist/components/pages/admin/admin-page.js.map +1 -0
- package/dist/components/pages/blogpost/blogpost.js +440 -0
- package/dist/components/pages/blogpost/blogpost.js.map +1 -0
- package/dist/components/pages/category/category-page.d.ts +8 -0
- package/dist/components/pages/category/category-page.js +69 -0
- package/dist/components/pages/category/category-page.js.map +1 -0
- package/dist/components/pages/chat/chat-page.d.ts +5 -0
- package/dist/components/pages/chat/chat-page.js +209 -0
- package/dist/components/pages/chat/chat-page.js.map +1 -0
- package/dist/components/pages/index.d.ts +11 -0
- package/dist/components/pages/index.js +11 -0
- package/dist/components/pages/index.js.map +1 -0
- package/dist/components/pages/login/login-page.d.ts +19 -0
- package/dist/components/pages/login/login-page.js +108 -0
- package/dist/components/pages/login/login-page.js.map +1 -0
- package/dist/components/pages/maintenance/maintenance-page.d.ts +5 -0
- package/dist/components/pages/maintenance/maintenance-page.js +50 -0
- package/dist/components/pages/maintenance/maintenance-page.js.map +1 -0
- package/dist/components/pages/not-found/not-found.d.ts +10 -0
- package/dist/components/pages/not-found/not-found.js +64 -0
- package/dist/components/pages/not-found/not-found.js.map +1 -0
- package/dist/components/pages/privacy/privacy-page.d.ts +15 -0
- package/dist/components/pages/privacy/privacy-page.js +98 -0
- package/dist/components/pages/privacy/privacy-page.js.map +1 -0
- package/dist/components/pages/search/search-page.d.ts +5 -0
- package/dist/components/pages/search/search-page.js +18 -0
- package/dist/components/pages/search/search-page.js.map +1 -0
- package/dist/components/pages/startpage/startpage.js +50 -0
- package/dist/components/pages/startpage/startpage.js.map +1 -0
- package/dist/components/pages/terms/terms-page.d.ts +15 -0
- package/dist/components/pages/terms/terms-page.js +98 -0
- package/dist/components/pages/terms/terms-page.js.map +1 -0
- package/dist/components/primitives/accordion/accordion.js +1 -1
- package/dist/components/primitives/accordion/accordion.js.map +1 -1
- package/dist/components/primitives/alert/alert.js +1 -1
- package/dist/components/primitives/alert/alert.js.map +1 -1
- package/dist/components/primitives/avatar/avatar.d.ts +14 -0
- package/dist/components/primitives/avatar/avatar.js +103 -0
- package/dist/components/primitives/avatar/avatar.js.map +1 -0
- package/dist/components/primitives/badge/badge.d.ts +1 -1
- package/dist/components/primitives/badge/badge.js +5 -5
- package/dist/components/primitives/badge/badge.js.map +1 -1
- package/dist/components/primitives/badge/badges.js +1 -1
- package/dist/components/primitives/badge/badges.js.map +1 -1
- package/dist/components/primitives/{button → buttons}/button.d.ts +8 -7
- package/dist/components/primitives/{button → buttons}/button.js +19 -14
- package/dist/components/primitives/buttons/button.js.map +1 -0
- package/dist/components/primitives/buttons/icon-button.d.ts +33 -0
- package/dist/components/primitives/buttons/icon-button.js +61 -0
- package/dist/components/primitives/buttons/icon-button.js.map +1 -0
- package/dist/components/primitives/{link → buttons}/link-button.d.ts +7 -4
- package/dist/components/primitives/buttons/link-button.js +35 -0
- package/dist/components/primitives/buttons/link-button.js.map +1 -0
- package/dist/components/primitives/collapsible/collapsible.d.ts +9 -0
- package/dist/components/primitives/collapsible/collapsible.js +53 -0
- package/dist/components/primitives/collapsible/collapsible.js.map +1 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu.d.ts +30 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu.js +164 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu.js.map +1 -0
- package/dist/components/primitives/forms/checkbox.d.ts +6 -0
- package/dist/components/primitives/forms/checkbox.js +30 -0
- package/dist/components/primitives/forms/checkbox.js.map +1 -0
- package/dist/components/primitives/forms/field.d.ts +29 -0
- package/dist/components/primitives/forms/field.js +218 -0
- package/dist/components/primitives/forms/field.js.map +1 -0
- package/dist/components/primitives/forms/input.d.ts +6 -0
- package/dist/components/primitives/forms/input.js +22 -0
- package/dist/components/primitives/forms/input.js.map +1 -0
- package/dist/components/primitives/forms/select.d.ts +22 -0
- package/dist/components/primitives/forms/select.js +169 -0
- package/dist/components/primitives/forms/select.js.map +1 -0
- package/dist/components/primitives/forms/textarea.d.ts +6 -0
- package/dist/components/primitives/forms/textarea.js +20 -0
- package/dist/components/primitives/forms/textarea.js.map +1 -0
- package/dist/components/primitives/icon/icon.d.ts +9 -2
- package/dist/components/primitives/icon/icon.js +10 -3
- package/dist/components/primitives/icon/icon.js.map +1 -1
- package/dist/components/primitives/index.d.ts +23 -7
- package/dist/components/primitives/index.js +31 -20
- package/dist/components/primitives/index.js.map +1 -1
- package/dist/components/primitives/label/label.d.ts +6 -0
- package/dist/components/primitives/label/label.js +22 -0
- package/dist/components/primitives/label/label.js.map +1 -0
- package/dist/components/primitives/layout/layout.d.ts +6 -3
- package/dist/components/primitives/layout/layout.js +28 -11
- package/dist/components/primitives/layout/layout.js.map +1 -1
- package/dist/components/primitives/link/link.d.ts +11 -5
- package/dist/components/primitives/link/link.js +38 -11
- package/dist/components/primitives/link/link.js.map +1 -1
- package/dist/components/primitives/separator/separator.js +1 -1
- package/dist/components/primitives/separator/separator.js.map +1 -1
- package/dist/components/primitives/sheet/sheet.d.ts +29 -0
- package/dist/components/primitives/sheet/sheet.js +117 -0
- package/dist/components/primitives/sheet/sheet.js.map +1 -0
- package/dist/components/primitives/skeleton/skeleton.js +1 -1
- package/dist/components/primitives/skeleton/skeleton.js.map +1 -1
- package/dist/components/primitives/sonner/sonner.d.ts +7 -0
- package/dist/components/primitives/sonner/sonner.js +42 -0
- package/dist/components/primitives/sonner/sonner.js.map +1 -0
- package/dist/components/primitives/sonner/use-toast.d.ts +24 -0
- package/dist/components/primitives/sonner/use-toast.js +21 -0
- package/dist/components/primitives/sonner/use-toast.js.map +1 -0
- package/dist/components/primitives/spinner/spinner.js +1 -1
- package/dist/components/primitives/spinner/spinner.js.map +1 -1
- package/dist/components/primitives/stack/stack.d.ts +3 -0
- package/dist/components/primitives/stack/stack.js +34 -4
- package/dist/components/primitives/stack/stack.js.map +1 -1
- package/dist/components/primitives/text/{text-heading.d.ts → heading.d.ts} +5 -5
- package/dist/components/primitives/text/{text-heading.js → heading.js} +11 -11
- package/dist/components/primitives/text/heading.js.map +1 -0
- package/dist/components/primitives/text/internal/text-element.d.ts +7 -3
- package/dist/components/primitives/text/internal/text-element.js +4 -2
- package/dist/components/primitives/text/internal/text-element.js.map +1 -1
- package/dist/components/primitives/text/text-code.d.ts +26 -0
- package/dist/components/primitives/text/text-code.js +44 -0
- package/dist/components/primitives/text/text-code.js.map +1 -0
- package/dist/components/primitives/text/text-div.js +2 -2
- package/dist/components/primitives/text/text-div.js.map +1 -1
- package/dist/components/primitives/text/text-span.js +2 -2
- package/dist/components/primitives/text/text-span.js.map +1 -1
- package/dist/components/primitives/text/text-time.js +2 -2
- package/dist/components/primitives/text/text-time.js.map +1 -1
- package/dist/components/primitives/text/{text-paragraph.d.ts → text.d.ts} +4 -4
- package/dist/components/primitives/text/{text-paragraph.js → text.js} +11 -11
- package/dist/components/primitives/text/text.js.map +1 -0
- package/dist/components/primitives/{ui-image.d.ts → ui-image/ui-image.d.ts} +1 -1
- package/dist/components/primitives/{ui-image.js → ui-image/ui-image.js} +3 -3
- package/dist/components/primitives/ui-image/ui-image.js.map +1 -0
- package/dist/components/primitives/ui-link/ui-link.d.ts +8 -0
- package/dist/components/primitives/ui-link/ui-link.js +19 -0
- package/dist/components/primitives/ui-link/ui-link.js.map +1 -0
- package/dist/components/providers/LinkContext.d.ts +1 -1
- package/dist/components/providers/LinkContext.js +1 -1
- package/dist/components/providers/LinkContext.js.map +1 -1
- package/dist/components/providers/SingularityContext.d.ts +4 -1
- package/dist/components/providers/SingularityContext.js +7 -3
- package/dist/components/providers/SingularityContext.js.map +1 -1
- package/dist/components/providers/auth-provider.d.ts +15 -0
- package/dist/components/providers/auth-provider.js +30 -0
- package/dist/components/providers/auth-provider.js.map +1 -0
- package/dist/components/providers/index.d.ts +3 -0
- package/dist/components/providers/index.js +5 -3
- package/dist/components/providers/index.js.map +1 -1
- package/dist/components/providers/theme-provider.d.ts +27 -0
- package/dist/components/providers/theme-provider.js +75 -0
- package/dist/components/providers/theme-provider.js.map +1 -0
- package/dist/components/templates/container/container.d.ts +20 -0
- package/dist/components/templates/container/container.js +58 -0
- package/dist/components/templates/container/container.js.map +1 -0
- package/dist/components/templates/footer/footer.d.ts +5 -0
- package/dist/components/templates/footer/footer.js +12 -0
- package/dist/components/templates/footer/footer.js.map +1 -0
- package/dist/components/templates/form/form.d.ts +5 -0
- package/dist/components/templates/form/form.js +141 -0
- package/dist/components/templates/form/form.js.map +1 -0
- package/dist/components/templates/hero/hero.d.ts +18 -0
- package/dist/components/{sections → templates}/hero/hero.js +52 -22
- package/dist/components/templates/hero/hero.js.map +1 -0
- package/dist/components/templates/index.d.ts +4 -2
- package/dist/components/templates/index.js +4 -2
- package/dist/components/templates/index.js.map +1 -1
- package/dist/components/templates/navigation/header.d.ts +19 -0
- package/dist/components/templates/navigation/header.js +222 -0
- package/dist/components/templates/navigation/header.js.map +1 -0
- package/dist/components/templates/navigation/index.d.ts +3 -0
- package/dist/components/templates/navigation/index.js +2 -0
- package/dist/components/templates/navigation/index.js.map +1 -0
- package/dist/css/variables.css +2 -2
- package/dist/css/variables.css.map +1 -1
- package/dist/data/authors.d.ts +12 -0
- package/dist/data/authors.js +33 -0
- package/dist/data/authors.js.map +1 -0
- package/dist/data/posts.d.ts +5 -3
- package/dist/data/posts.js +66 -47
- package/dist/data/posts.js.map +1 -1
- package/dist/index.d.ts +42 -12
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/helpers/index.js +1 -1
- package/dist/lib/helpers/index.js.map +1 -1
- package/dist/lib/index.js +2 -2
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/types.d.ts +4 -8
- package/dist/main.css +1528 -85
- package/dist/main.css.map +1 -1
- package/dist/{utils.js → utils/index.js} +1 -1
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.test.js +37 -0
- package/dist/utils/index.test.js.map +1 -0
- package/package.json +69 -44
- package/dist/components/primitives/button/button.js.map +0 -1
- package/dist/components/primitives/link/link-button.js +0 -21
- package/dist/components/primitives/link/link-button.js.map +0 -1
- package/dist/components/primitives/text/text-heading.js.map +0 -1
- package/dist/components/primitives/text/text-paragraph.js.map +0 -1
- package/dist/components/primitives/ui-image.js.map +0 -1
- package/dist/components/primitives/ui-link.d.ts +0 -8
- package/dist/components/primitives/ui-link.js +0 -16
- package/dist/components/primitives/ui-link.js.map +0 -1
- package/dist/components/sections/body/body.d.ts +0 -19
- package/dist/components/sections/body/body.js +0 -49
- package/dist/components/sections/body/body.js.map +0 -1
- package/dist/components/sections/footer/footer.d.ts +0 -12
- package/dist/components/sections/footer/footer.js +0 -59
- package/dist/components/sections/footer/footer.js.map +0 -1
- package/dist/components/sections/hero/hero.d.ts +0 -6
- package/dist/components/sections/hero/hero.js.map +0 -1
- package/dist/components/sections/index.d.ts +0 -3
- package/dist/components/sections/index.js +0 -4
- package/dist/components/sections/index.js.map +0 -1
- package/dist/components/templates/blogpost/blogpost.js +0 -173
- package/dist/components/templates/blogpost/blogpost.js.map +0 -1
- package/dist/components/templates/startpage/startpage.js +0 -48
- package/dist/components/templates/startpage/startpage.js.map +0 -1
- package/dist/components/units/index.js +0 -1
- package/dist/components/units/index.js.map +0 -1
- package/dist/utils.js.map +0 -1
- /package/dist/components/{templates → pages}/blogpost/blogpost.d.ts +0 -0
- /package/dist/components/{templates → pages}/startpage/startpage.d.ts +0 -0
- /package/dist/{utils.d.ts → utils/index.d.ts} +0 -0
- /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.
|
|
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
|
|
18
|
-
"import": "./dist
|
|
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
|
-
"
|
|
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.
|
|
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.
|
|
62
|
+
"@tailwindcss/postcss": "^4.2.4",
|
|
56
63
|
"class-variance-authority": "^0.7.1",
|
|
57
64
|
"clsx": "^2.1.1",
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
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.
|
|
71
|
+
"tailwindcss": "^4.2.4",
|
|
65
72
|
"tailwindcss-animate": "^1.0.7"
|
|
66
73
|
},
|
|
67
74
|
"devDependencies": {
|
|
68
|
-
"@storybook/addon-a11y": "^10.
|
|
69
|
-
"@storybook/addon-docs": "^10.
|
|
70
|
-
"@storybook/addon-links": "^10.
|
|
71
|
-
"@storybook/addon-themes": "^10.
|
|
72
|
-
"@storybook/addon-vitest": "^10.
|
|
73
|
-
"@storybook/react-vite": "^10.
|
|
74
|
-
"@types/node": "^25.
|
|
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.
|
|
78
|
-
"@typescript-eslint/parser": "^8.
|
|
79
|
-
"@vitejs/plugin-react": "^5.
|
|
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
|
-
"
|
|
83
|
-
"eslint
|
|
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.
|
|
86
|
-
"
|
|
87
|
-
"
|
|
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": "^
|
|
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": "^
|
|
97
|
-
"react": "^19.2.
|
|
98
|
-
"react-dom": "^19.2.
|
|
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 +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 +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":[]}
|