singularity-components 0.1.196 → 0.1.197
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/dist/components/blocks/cards/blogpost-card.js +1 -1
- package/dist/components/blocks/cards/blogpost-card.js.map +1 -1
- package/dist/components/blocks/directory/category-card.js +3 -2
- package/dist/components/blocks/directory/category-card.js.map +1 -1
- package/dist/components/blocks/extras/extras-hub-card.js +4 -3
- package/dist/components/blocks/extras/extras-hub-card.js.map +1 -1
- package/dist/components/blocks/login/login.js +76 -47
- package/dist/components/blocks/login/login.js.map +1 -1
- package/dist/components/blocks/marketing/timeline.js +2 -1
- package/dist/components/blocks/marketing/timeline.js.map +1 -1
- package/dist/components/blocks/post-list/post-list-with-filters.js +4 -4
- package/dist/components/blocks/post-list/post-list-with-filters.js.map +1 -1
- package/dist/components/pages/about/about-page.js +2 -2
- package/dist/components/pages/about/about-page.js.map +1 -1
- package/dist/components/pages/admin/admin-page.js +159 -105
- package/dist/components/pages/admin/admin-page.js.map +1 -1
- package/dist/components/pages/author/author-page.js +1 -1
- package/dist/components/pages/author/author-page.js.map +1 -1
- package/dist/components/pages/authors/authors-page.js +1 -1
- package/dist/components/pages/authors/authors-page.js.map +1 -1
- package/dist/components/pages/blogpost/blogpost.js +72 -44
- package/dist/components/pages/blogpost/blogpost.js.map +1 -1
- package/dist/components/pages/categories/categories-page.js +1 -1
- package/dist/components/pages/categories/categories-page.js.map +1 -1
- package/dist/components/pages/category/category-page.js +1 -1
- package/dist/components/pages/category/category-page.js.map +1 -1
- package/dist/components/pages/chat/chat-page.js +4 -4
- package/dist/components/pages/chat/chat-page.js.map +1 -1
- package/dist/components/pages/contact/contact-page.js +104 -97
- package/dist/components/pages/contact/contact-page.js.map +1 -1
- package/dist/components/pages/content-blocks/content-blocks-page.js +3 -2
- package/dist/components/pages/content-blocks/content-blocks-page.js.map +1 -1
- package/dist/components/pages/extras/extras-hub-page.js +1 -1
- package/dist/components/pages/extras/extras-hub-page.js.map +1 -1
- package/dist/components/pages/maintenance/maintenance-page.js +1 -1
- package/dist/components/pages/maintenance/maintenance-page.js.map +1 -1
- package/dist/components/pages/membership/membership-page.js +1 -1
- package/dist/components/pages/membership/membership-page.js.map +1 -1
- package/dist/components/pages/mosaic/mosaic-page.js +1 -1
- package/dist/components/pages/mosaic/mosaic-page.js.map +1 -1
- package/dist/components/pages/newsletter/newsletter-page.js +56 -39
- package/dist/components/pages/newsletter/newsletter-page.js.map +1 -1
- package/dist/components/pages/not-found/not-found.js +2 -2
- package/dist/components/pages/not-found/not-found.js.map +1 -1
- package/dist/components/pages/privacy/privacy-page.js +2 -2
- package/dist/components/pages/privacy/privacy-page.js.map +1 -1
- package/dist/components/pages/resources/resources-page.js +1 -1
- package/dist/components/pages/resources/resources-page.js.map +1 -1
- package/dist/components/pages/terms/terms-page.js +2 -2
- package/dist/components/pages/terms/terms-page.js.map +1 -1
- package/dist/components/primitives/forms/form.d.ts +1 -1
- package/dist/components/primitives/forms/form.js.map +1 -1
- package/dist/components/templates/form/form.d.ts +2 -2
- package/dist/components/templates/form/form.js +133 -87
- package/dist/components/templates/form/form.js.map +1 -1
- package/dist/components/templates/hero/hero.js +1 -0
- package/dist/components/templates/hero/hero.js.map +1 -1
- package/dist/components/templates/loading-screen/loading-screen.js +1 -1
- package/dist/components/templates/loading-screen/loading-screen.js.map +1 -1
- package/dist/css/variables.css +4 -3
- package/dist/css/variables.css.map +1 -1
- package/dist/data/posts.js +4 -4
- package/dist/data/posts.js.map +1 -1
- package/dist/lib/forms/index.d.ts +1 -1
- package/dist/lib/forms/tanstack-field.d.ts +26 -11
- package/dist/lib/forms/tanstack-field.js +13 -6
- package/dist/lib/forms/tanstack-field.js.map +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/main.css +16 -22
- package/dist/main.css.map +1 -1
- package/package.json +25 -30
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
Layout,
|
|
6
6
|
Heading,
|
|
7
7
|
Text,
|
|
8
|
+
Stack,
|
|
8
9
|
Alert,
|
|
9
10
|
AlertDescription,
|
|
10
11
|
AlertTitle,
|
|
@@ -21,7 +22,7 @@ function ContentBlocksPage() {
|
|
|
21
22
|
return /* @__PURE__ */ jsxs(
|
|
22
23
|
motion.div,
|
|
23
24
|
{
|
|
24
|
-
initial: { opacity:
|
|
25
|
+
initial: { opacity: 1, y: 20 },
|
|
25
26
|
animate: { opacity: 1, y: 0 },
|
|
26
27
|
transition: { duration: 0.3 },
|
|
27
28
|
children: [
|
|
@@ -68,7 +69,7 @@ function ContentBlocksPage() {
|
|
|
68
69
|
/* @__PURE__ */ jsxs("section", { className: "sg:space-y-4", children: [
|
|
69
70
|
/* @__PURE__ */ jsx(Heading, { variant: "h2", children: "Inline CTA" }),
|
|
70
71
|
/* @__PURE__ */ jsx(Card, { className: "sg:bg-primary/5 sg:border-primary/20", children: /* @__PURE__ */ jsxs(CardContent, { className: "sg:py-6 sg:flex sg:flex-col sm:sg:flex-row sg:items-center sg:justify-between sg:gap-4", children: [
|
|
71
|
-
/* @__PURE__ */ jsxs(
|
|
72
|
+
/* @__PURE__ */ jsxs(Stack, { gap: 1, children: [
|
|
72
73
|
/* @__PURE__ */ jsx(Heading, { variant: "h4", children: "Stay in the loop" }),
|
|
73
74
|
/* @__PURE__ */ jsx(Text, { size: "sm", foreground: "muted-foreground", children: "Get curated stories delivered weekly." })
|
|
74
75
|
] }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/pages/content-blocks/content-blocks-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport {\r\n\tLayout,\r\n\tHeading,\r\n\tText,\r\n\tAlert,\r\n\tAlertDescription,\r\n\tAlertTitle,\r\n\tAccordion,\r\n\tAccordionContent,\r\n\tAccordionItem,\r\n\tAccordionTrigger,\r\n} from \"../../primitives/index\";\r\nimport { LinkButton } from \"../../primitives/buttons/link-button\";\r\nimport { PageHero } from \"../../blocks/marketing/page-hero\";\r\nimport { Card, CardContent } from \"../../blocks/cards/card\";\r\nimport { TextCode } from \"../../primitives/text/text-code\";\r\n\r\nexport function ContentBlocksPage() {\r\n\treturn (\r\n\t\t<motion.div\r\n\t\t\tinitial={{ opacity:
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/pages/content-blocks/content-blocks-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport {\r\n\tLayout,\r\n\tHeading,\r\n\tText,\r\n\tStack,\r\n\tAlert,\r\n\tAlertDescription,\r\n\tAlertTitle,\r\n\tAccordion,\r\n\tAccordionContent,\r\n\tAccordionItem,\r\n\tAccordionTrigger,\r\n} from \"../../primitives/index\";\r\nimport { LinkButton } from \"../../primitives/buttons/link-button\";\r\nimport { PageHero } from \"../../blocks/marketing/page-hero\";\r\nimport { Card, CardContent } from \"../../blocks/cards/card\";\r\nimport { TextCode } from \"../../primitives/text/text-code\";\r\n\r\nexport function ContentBlocksPage() {\r\n\treturn (\r\n\t\t<motion.div\r\n\t\t\tinitial={{ opacity: 1, y: 20 }}\r\n\t\t\tanimate={{ opacity: 1, y: 0 }}\r\n\t\t\ttransition={{ duration: 0.3 }}\r\n\t\t>\r\n\t\t\t<PageHero\r\n\t\t\t\ticon=\"Layers\"\r\n\t\t\t\ttitle=\"Content Blocks\"\r\n\t\t\t\tdescription=\"Reusable editorial patterns for articles and marketing pages.\"\r\n\t\t\t/>\r\n\r\n\t\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t\t<Layout.Col1 hideDiv className=\"sg:max-w-3xl sg:space-y-12\">\r\n\t\t\t\t\t<section className=\"sg:space-y-4\">\r\n\t\t\t\t\t\t<Heading variant=\"h2\">Callouts</Heading>\r\n\t\t\t\t\t\t<Alert>\r\n\t\t\t\t\t\t\t<AlertTitle>Info</AlertTitle>\r\n\t\t\t\t\t\t\t<AlertDescription>\r\n\t\t\t\t\t\t\t\tUse callouts to highlight tips, warnings, or key takeaways.\r\n\t\t\t\t\t\t\t</AlertDescription>\r\n\t\t\t\t\t\t</Alert>\r\n\t\t\t\t\t</section>\r\n\r\n\t\t\t\t\t<section className=\"sg:space-y-4\">\r\n\t\t\t\t\t\t<Heading variant=\"h2\">Code Snippets</Heading>\r\n\t\t\t\t\t\t<Card>\r\n\t\t\t\t\t\t\t<CardContent className=\"sg:pt-6\">\r\n\t\t\t\t\t\t\t\t<TextCode>{`const featured = posts.filter((p) => p.featured);`}</TextCode>\r\n\t\t\t\t\t\t\t</CardContent>\r\n\t\t\t\t\t\t</Card>\r\n\t\t\t\t\t</section>\r\n\r\n\t\t\t\t\t<section className=\"sg:space-y-4\">\r\n\t\t\t\t\t\t<Heading variant=\"h2\">Quote Block</Heading>\r\n\t\t\t\t\t\t<blockquote className=\"sg:border-l-4 sg:border-primary sg:pl-6 sg:py-2\">\r\n\t\t\t\t\t\t\t<Text size=\"lg\" className=\"sg:italic\">\r\n\t\t\t\t\t\t\t\t"Design is not just what it looks like — design is how it works."\r\n\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\" className=\"sg:mt-2\">\r\n\t\t\t\t\t\t\t\t— Steve Jobs\r\n\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t</blockquote>\r\n\t\t\t\t\t</section>\r\n\r\n\t\t\t\t\t<section className=\"sg:space-y-4\">\r\n\t\t\t\t\t\t<Heading variant=\"h2\">FAQ Accordion</Heading>\r\n\t\t\t\t\t\t<Accordion multiple={false} aria-label=\"Content blocks FAQ\">\r\n\t\t\t\t\t\t\t<AccordionItem value=\"item-1\">\r\n\t\t\t\t\t\t\t\t<AccordionTrigger>What are content blocks?</AccordionTrigger>\r\n\t\t\t\t\t\t\t\t<AccordionContent>\r\n\t\t\t\t\t\t\t\t\tReusable UI patterns for editorial and marketing content.\r\n\t\t\t\t\t\t\t\t</AccordionContent>\r\n\t\t\t\t\t\t\t</AccordionItem>\r\n\t\t\t\t\t\t\t<AccordionItem value=\"item-2\">\r\n\t\t\t\t\t\t\t\t<AccordionTrigger>How do I use them?</AccordionTrigger>\r\n\t\t\t\t\t\t\t\t<AccordionContent>\r\n\t\t\t\t\t\t\t\t\tImport the block components and compose them in your pages.\r\n\t\t\t\t\t\t\t\t</AccordionContent>\r\n\t\t\t\t\t\t\t</AccordionItem>\r\n\t\t\t\t\t\t</Accordion>\r\n\t\t\t\t\t</section>\r\n\r\n\t\t\t\t\t<section className=\"sg:space-y-4\">\r\n\t\t\t\t\t\t<Heading variant=\"h2\">Inline CTA</Heading>\r\n\t\t\t\t\t\t<Card className=\"sg:bg-primary/5 sg:border-primary/20\">\r\n\t\t\t\t\t\t\t<CardContent className=\"sg:py-6 sg:flex sg:flex-col sm:sg:flex-row sg:items-center sg:justify-between sg:gap-4\">\r\n\t\t\t\t\t\t\t\t<Stack gap={1}>\r\n\t\t\t\t\t\t\t\t\t<Heading variant=\"h4\">Stay in the loop</Heading>\r\n\t\t\t\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\">\r\n\t\t\t\t\t\t\t\t\t\tGet curated stories delivered weekly.\r\n\t\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t\t</Stack>\r\n\t\t\t\t\t\t\t\t<LinkButton to=\"/extras/newsletter\">Subscribe</LinkButton>\r\n\t\t\t\t\t\t\t</CardContent>\r\n\t\t\t\t\t\t</Card>\r\n\t\t\t\t\t</section>\r\n\t\t\t\t</Layout.Col1>\r\n\t\t\t</Layout>\r\n\t\t</motion.div>\r\n\t);\r\n}\r\n"],"mappings":";AA4BG,cAUG,YAVH;AA1BH,SAAS,cAAc;AACvB;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AACzB,SAAS,MAAM,mBAAmB;AAClC,SAAS,gBAAgB;AAElB,SAAS,oBAAoB;AACnC,SACC;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACA,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,MAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,MAC5B,YAAY,EAAE,UAAU,IAAI;AAAA,MAE5B;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,MAAK;AAAA,YACL,OAAM;AAAA,YACN,aAAY;AAAA;AAAA,QACb;AAAA,QAEA,oBAAC,UAAO,MAAK,OAAM,WAAU,YAC5B,+BAAC,OAAO,MAAP,EAAY,SAAO,MAAC,WAAU,8BAC9B;AAAA,+BAAC,aAAQ,WAAU,gBAClB;AAAA,gCAAC,WAAQ,SAAQ,MAAK,sBAAQ;AAAA,YAC9B,qBAAC,SACA;AAAA,kCAAC,cAAW,kBAAI;AAAA,cAChB,oBAAC,oBAAiB,yEAElB;AAAA,eACD;AAAA,aACD;AAAA,UAEA,qBAAC,aAAQ,WAAU,gBAClB;AAAA,gCAAC,WAAQ,SAAQ,MAAK,2BAAa;AAAA,YACnC,oBAAC,QACA,8BAAC,eAAY,WAAU,WACtB,8BAAC,YAAU,+DAAoD,GAChE,GACD;AAAA,aACD;AAAA,UAEA,qBAAC,aAAQ,WAAU,gBAClB;AAAA,gCAAC,WAAQ,SAAQ,MAAK,yBAAW;AAAA,YACjC,qBAAC,gBAAW,WAAU,mDACrB;AAAA,kCAAC,QAAK,MAAK,MAAK,WAAU,aAAY,oFAEtC;AAAA,cACA,oBAAC,QAAK,MAAK,MAAK,YAAW,oBAAmB,WAAU,WAAU,+BAElE;AAAA,eACD;AAAA,aACD;AAAA,UAEA,qBAAC,aAAQ,WAAU,gBAClB;AAAA,gCAAC,WAAQ,SAAQ,MAAK,2BAAa;AAAA,YACnC,qBAAC,aAAU,UAAU,OAAO,cAAW,sBACtC;AAAA,mCAAC,iBAAc,OAAM,UACpB;AAAA,oCAAC,oBAAiB,sCAAwB;AAAA,gBAC1C,oBAAC,oBAAiB,uEAElB;AAAA,iBACD;AAAA,cACA,qBAAC,iBAAc,OAAM,UACpB;AAAA,oCAAC,oBAAiB,gCAAkB;AAAA,gBACpC,oBAAC,oBAAiB,yEAElB;AAAA,iBACD;AAAA,eACD;AAAA,aACD;AAAA,UAEA,qBAAC,aAAQ,WAAU,gBAClB;AAAA,gCAAC,WAAQ,SAAQ,MAAK,wBAAU;AAAA,YAChC,oBAAC,QAAK,WAAU,wCACf,+BAAC,eAAY,WAAU,0FACtB;AAAA,mCAAC,SAAM,KAAK,GACX;AAAA,oCAAC,WAAQ,SAAQ,MAAK,8BAAgB;AAAA,gBACtC,oBAAC,QAAK,MAAK,MAAK,YAAW,oBAAmB,mDAE9C;AAAA,iBACD;AAAA,cACA,oBAAC,cAAW,IAAG,sBAAqB,uBAAS;AAAA,eAC9C,GACD;AAAA,aACD;AAAA,WACD,GACD;AAAA;AAAA;AAAA,EACD;AAEF;","names":[]}
|
|
@@ -93,7 +93,7 @@ function ExtrasHubPage({ items = defaultItems }) {
|
|
|
93
93
|
return /* @__PURE__ */ jsx(Layout, { type: "col", className: "sg:py-16", children: /* @__PURE__ */ jsx(Layout.Col1, { hideDiv: true, className: "sg:max-w-3xl", children: /* @__PURE__ */ jsxs(
|
|
94
94
|
motion.div,
|
|
95
95
|
{
|
|
96
|
-
initial: { opacity:
|
|
96
|
+
initial: { opacity: 1, y: 20 },
|
|
97
97
|
animate: { opacity: 1, y: 0 },
|
|
98
98
|
transition: { duration: 0.3 },
|
|
99
99
|
children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/pages/extras/extras-hub-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { Layout, Heading, Text } from \"../../primitives/index\";\r\nimport { ExtrasHubCard, type ExtrasHubItem } from \"../../blocks/extras/extras-hub-card\";\r\n\r\nconst defaultItems: ExtrasHubItem[] = [\r\n\t{\r\n\t\ttitle: \"About\",\r\n\t\tdescription: \"Our mission, story, team, and journey.\",\r\n\t\tto: \"/extras/about\",\r\n\t\ticon: \"Info\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Contact\",\r\n\t\tdescription: \"Get in touch — form, map, and social links.\",\r\n\t\tto: \"/extras/contact\",\r\n\t\ticon: \"Mail\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Newsletter\",\r\n\t\tdescription: \"Subscribe for weekly curated stories and exclusive content.\",\r\n\t\tto: \"/extras/newsletter\",\r\n\t\ticon: \"Newspaper\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Membership\",\r\n\t\tdescription: \"Premium plans, benefits comparison, and pricing.\",\r\n\t\tto: \"/extras/membership\",\r\n\t\ticon: \"Crown\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Content Blocks\",\r\n\t\tdescription: \"Callouts, code snippets, quotes, tables, CTAs, and more.\",\r\n\t\tto: \"/extras/content-blocks\",\r\n\t\ticon: \"Layers\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Resources\",\r\n\t\tdescription: \"Curated links, tools, and references for creators.\",\r\n\t\tto: \"/extras/resources\",\r\n\t\ticon: \"Sparkles\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Mosaic\",\r\n\t\tdescription: \"A visual mosaic of images from our blog posts.\",\r\n\t\tto: \"/extras/showcase\",\r\n\t\ticon: \"Palette\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Authors\",\r\n\t\tdescription: \"Meet the writers behind the stories.\",\r\n\t\tto: \"/extras/authors\",\r\n\t\ticon: \"Users\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Categories\",\r\n\t\tdescription: \"Browse all post categories in one place.\",\r\n\t\tto: \"/extras/categories\",\r\n\t\ticon: \"Tag\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Search\",\r\n\t\tdescription: \"Find posts by keyword, category, or author with flexible filters.\",\r\n\t\tto: \"/extras/search\",\r\n\t\ticon: \"Search\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Search (Compact)\",\r\n\t\tdescription: \"Same search with filters always in a slide-out drawer.\",\r\n\t\tto: \"/extras/search-compact\",\r\n\t\ticon: \"Search\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Chat\",\r\n\t\tdescription: \"AI chatbot demo with conversational interface.\",\r\n\t\tto: \"/extras/chat\",\r\n\t\ticon: \"MessageCircle\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Privacy Policy\",\r\n\t\tdescription: \"How we handle your data and protect your privacy.\",\r\n\t\tto: \"/extras/privacy\",\r\n\t\ticon: \"Shield\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Terms of Service\",\r\n\t\tdescription: \"Rules and conditions for using the site.\",\r\n\t\tto: \"/extras/terms\",\r\n\t\ticon: \"FileText\",\r\n\t},\r\n];\r\n\r\ntype Props = {\r\n\titems?: ExtrasHubItem[];\r\n};\r\n\r\nexport function ExtrasHubPage({ items = defaultItems }: Props) {\r\n\treturn (\r\n\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t<Layout.Col1 hideDiv className=\"sg:max-w-3xl\">\r\n\t\t\t\t<motion.div\r\n\t\t\t\t\tinitial={{ opacity:
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/pages/extras/extras-hub-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { Layout, Heading, Text } from \"../../primitives/index\";\r\nimport { ExtrasHubCard, type ExtrasHubItem } from \"../../blocks/extras/extras-hub-card\";\r\n\r\nconst defaultItems: ExtrasHubItem[] = [\r\n\t{\r\n\t\ttitle: \"About\",\r\n\t\tdescription: \"Our mission, story, team, and journey.\",\r\n\t\tto: \"/extras/about\",\r\n\t\ticon: \"Info\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Contact\",\r\n\t\tdescription: \"Get in touch — form, map, and social links.\",\r\n\t\tto: \"/extras/contact\",\r\n\t\ticon: \"Mail\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Newsletter\",\r\n\t\tdescription: \"Subscribe for weekly curated stories and exclusive content.\",\r\n\t\tto: \"/extras/newsletter\",\r\n\t\ticon: \"Newspaper\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Membership\",\r\n\t\tdescription: \"Premium plans, benefits comparison, and pricing.\",\r\n\t\tto: \"/extras/membership\",\r\n\t\ticon: \"Crown\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Content Blocks\",\r\n\t\tdescription: \"Callouts, code snippets, quotes, tables, CTAs, and more.\",\r\n\t\tto: \"/extras/content-blocks\",\r\n\t\ticon: \"Layers\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Resources\",\r\n\t\tdescription: \"Curated links, tools, and references for creators.\",\r\n\t\tto: \"/extras/resources\",\r\n\t\ticon: \"Sparkles\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Mosaic\",\r\n\t\tdescription: \"A visual mosaic of images from our blog posts.\",\r\n\t\tto: \"/extras/showcase\",\r\n\t\ticon: \"Palette\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Authors\",\r\n\t\tdescription: \"Meet the writers behind the stories.\",\r\n\t\tto: \"/extras/authors\",\r\n\t\ticon: \"Users\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Categories\",\r\n\t\tdescription: \"Browse all post categories in one place.\",\r\n\t\tto: \"/extras/categories\",\r\n\t\ticon: \"Tag\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Search\",\r\n\t\tdescription: \"Find posts by keyword, category, or author with flexible filters.\",\r\n\t\tto: \"/extras/search\",\r\n\t\ticon: \"Search\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Search (Compact)\",\r\n\t\tdescription: \"Same search with filters always in a slide-out drawer.\",\r\n\t\tto: \"/extras/search-compact\",\r\n\t\ticon: \"Search\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Chat\",\r\n\t\tdescription: \"AI chatbot demo with conversational interface.\",\r\n\t\tto: \"/extras/chat\",\r\n\t\ticon: \"MessageCircle\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Privacy Policy\",\r\n\t\tdescription: \"How we handle your data and protect your privacy.\",\r\n\t\tto: \"/extras/privacy\",\r\n\t\ticon: \"Shield\",\r\n\t},\r\n\t{\r\n\t\ttitle: \"Terms of Service\",\r\n\t\tdescription: \"Rules and conditions for using the site.\",\r\n\t\tto: \"/extras/terms\",\r\n\t\ticon: \"FileText\",\r\n\t},\r\n];\r\n\r\ntype Props = {\r\n\titems?: ExtrasHubItem[];\r\n};\r\n\r\nexport function ExtrasHubPage({ items = defaultItems }: Props) {\r\n\treturn (\r\n\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t<Layout.Col1 hideDiv className=\"sg:max-w-3xl\">\r\n\t\t\t\t<motion.div\r\n\t\t\t\t\tinitial={{ opacity: 1, y: 20 }}\r\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\r\n\t\t\t\t\ttransition={{ duration: 0.3 }}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Heading variant=\"h1\" className=\"sg:mb-2\">\r\n\t\t\t\t\t\tExtras\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Text foreground=\"muted-foreground\" className=\"sg:mb-10\">\r\n\t\t\t\t\t\tBonus content and additional pages.\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t\t<div className=\"sg:grid sg:gap-4 sm:sg:grid-cols-2\">\r\n\t\t\t\t\t\t{items.map((item) => (\r\n\t\t\t\t\t\t\t<ExtrasHubCard key={item.to} item={item} />\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</motion.div>\r\n\t\t\t</Layout.Col1>\r\n\t\t</Layout>\r\n\t);\r\n}\r\n"],"mappings":";AAqGI,SAKC,KALD;AAnGJ,SAAS,cAAc;AACvB,SAAS,QAAQ,SAAS,YAAY;AACtC,SAAS,qBAAyC;AAElD,MAAM,eAAgC;AAAA,EACrC;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AAAA,EACA;AAAA,IACC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,IAAI;AAAA,IACJ,MAAM;AAAA,EACP;AACD;AAMO,SAAS,cAAc,EAAE,QAAQ,aAAa,GAAU;AAC9D,SACC,oBAAC,UAAO,MAAK,OAAM,WAAU,YAC5B,8BAAC,OAAO,MAAP,EAAY,SAAO,MAAC,WAAU,gBAC9B;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACA,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,MAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,MAC5B,YAAY,EAAE,UAAU,IAAI;AAAA,MAE5B;AAAA,4BAAC,WAAQ,SAAQ,MAAK,WAAU,WAAU,oBAE1C;AAAA,QACA,oBAAC,QAAK,YAAW,oBAAmB,WAAU,YAAW,iDAEzD;AAAA,QACA,oBAAC,SAAI,WAAU,sCACb,gBAAM,IAAI,CAAC,SACX,oBAAC,iBAA4B,QAAT,KAAK,EAAgB,CACzC,GACF;AAAA;AAAA;AAAA,EACD,GACD,GACD;AAEF;","names":[]}
|
|
@@ -7,7 +7,7 @@ function MaintenancePage() {
|
|
|
7
7
|
return /* @__PURE__ */ jsx("div", { className: "sg:min-h-screen sg:flex sg:flex-col sg:items-center sg:justify-center sg:bg-background sg:px-4", children: /* @__PURE__ */ jsxs(
|
|
8
8
|
motion.div,
|
|
9
9
|
{
|
|
10
|
-
initial: { opacity:
|
|
10
|
+
initial: { opacity: 1, y: 20 },
|
|
11
11
|
animate: { opacity: 1, y: 0 },
|
|
12
12
|
transition: { duration: 0.4 },
|
|
13
13
|
className: "sg:text-center sg:max-w-md",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/pages/maintenance/maintenance-page.tsx"],"sourcesContent":["\"use client\";\nimport { motion } from \"framer-motion\";\nimport { Heading, Text, Button, Link, Icon, Stack } from \"../../primitives/index\";\nimport { LinkButton } from \"../../primitives/buttons/link-button\";\n\nexport function MaintenancePage() {\n return (\n <div className=\"sg:min-h-screen sg:flex sg:flex-col sg:items-center sg:justify-center sg:bg-background sg:px-4\">\n <motion.div\n initial={{ opacity:
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/pages/maintenance/maintenance-page.tsx"],"sourcesContent":["\"use client\";\nimport { motion } from \"framer-motion\";\nimport { Heading, Text, Button, Link, Icon, Stack } from \"../../primitives/index\";\nimport { LinkButton } from \"../../primitives/buttons/link-button\";\n\nexport function MaintenancePage() {\n return (\n <div className=\"sg:min-h-screen sg:flex sg:flex-col sg:items-center sg:justify-center sg:bg-background sg:px-4\">\n <motion.div\n initial={{ opacity: 1, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.4 }}\n className=\"sg:text-center sg:max-w-md\"\n >\n <div className=\"sg:rounded-full sg:bg-primary/10 sg:p-5 sg:inline-flex sg:mb-6\">\n <Icon icon=\"Construction\" size=\"xl\" color=\"primary\" />\n </div>\n <Heading variant=\"h1\" className=\"sg:mb-3\">\n Under Maintenance\n </Heading>\n <Text\n foreground=\"muted-foreground\"\n className=\"sg:leading-relaxed sg:mb-2\"\n >\n We're making some improvements to bring you a better experience.\n We'll be back shortly.\n </Text>\n <Text\n size=\"sm\"\n foreground=\"muted-foreground\"\n className=\"sg:opacity-70 sg:mb-8\"\n >\n Expected downtime: less than 1 hour\n </Text>\n <Stack direction=\"row\" wrap=\"wrap\" justifyContent=\"center\" gap={3}>\n <LinkButton to=\"/\" iconStart=\"ArrowLeft\">\n Try Home Page\n </LinkButton>\n <Button variant=\"outline\" onClick={() => window.location.reload()}>\n Refresh\n </Button>\n </Stack>\n <Text size=\"xs\" foreground=\"muted-foreground\" className=\"sg:mt-10\">\n Questions? Reach us at{\" \"}\n <Link to=\"mailto:hello@storied.blog\">hello@storied.blog</Link>\n </Text>\n </motion.div>\n </div>\n );\n}\n"],"mappings":";AAeU,cAmBF,YAnBE;AAdV,SAAS,cAAc;AACvB,SAAS,SAAS,MAAM,QAAQ,MAAM,MAAM,aAAa;AACzD,SAAS,kBAAkB;AAEpB,SAAS,kBAAkB;AAChC,SACE,oBAAC,SAAI,WAAU,kGACb;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,MAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,MAC5B,YAAY,EAAE,UAAU,IAAI;AAAA,MAC5B,WAAU;AAAA,MAEV;AAAA,4BAAC,SAAI,WAAU,kEACb,8BAAC,QAAK,MAAK,gBAAe,MAAK,MAAK,OAAM,WAAU,GACtD;AAAA,QACA,oBAAC,WAAQ,SAAQ,MAAK,WAAU,WAAU,+BAE1C;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,YAAW;AAAA,YACX,WAAU;AAAA,YACX;AAAA;AAAA,QAGD;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,YAAW;AAAA,YACX,WAAU;AAAA,YACX;AAAA;AAAA,QAED;AAAA,QACA,qBAAC,SAAM,WAAU,OAAM,MAAK,QAAO,gBAAe,UAAS,KAAK,GAC9D;AAAA,8BAAC,cAAW,IAAG,KAAI,WAAU,aAAY,2BAEzC;AAAA,UACA,oBAAC,UAAO,SAAQ,WAAU,SAAS,MAAM,OAAO,SAAS,OAAO,GAAG,qBAEnE;AAAA,WACF;AAAA,QACA,qBAAC,QAAK,MAAK,MAAK,YAAW,oBAAmB,WAAU,YAAW;AAAA;AAAA,UAC1C;AAAA,UACvB,oBAAC,QAAK,IAAG,6BAA4B,gCAAkB;AAAA,WACzD;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/pages/membership/membership-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport {\r\n\tLayout,\r\n\tHeading,\r\n\tText,\r\n\tTextSpan,\r\n\tButton,\r\n\tIcon,\r\n\tBadge,\r\n\tSeparator,\r\n\tAccordion,\r\n\tAccordionContent,\r\n\tAccordionItem,\r\n\tAccordionTrigger,\r\n} from \"../../primitives/index\";\r\nimport { Card, CardContent, CardHeader, CardTitle, CardDescription } from \"../../blocks/cards/card\";\r\n\r\nconst plans = [\r\n\t{\r\n\t\tname: \"Free\",\r\n\t\tprice: \"$0\",\r\n\t\tperiod: \"forever\",\r\n\t\tdescription: \"Everything you need to enjoy the blog.\",\r\n\t\ticon: \"BookOpen\" as const,\r\n\t\tfeatured: false,\r\n\t\tfeatures: [\r\n\t\t\t\"Access to all published articles\",\r\n\t\t\t\"Weekly newsletter\",\r\n\t\t\t\"Comment on posts\",\r\n\t\t\t\"Dark mode\",\r\n\t\t],\r\n\t},\r\n\t{\r\n\t\tname: \"Premium\",\r\n\t\tprice: \"$8\",\r\n\t\tperiod: \"/month\",\r\n\t\tdescription: \"For readers who want the full experience.\",\r\n\t\ticon: \"Crown\" as const,\r\n\t\tfeatured: true,\r\n\t\tfeatures: [\r\n\t\t\t\"Everything in Free\",\r\n\t\t\t\"Early access to new posts\",\r\n\t\t\t\"Exclusive essays & interviews\",\r\n\t\t\t\"Ad-free reading experience\",\r\n\t\t],\r\n\t},\r\n\t{\r\n\t\tname: \"Patron\",\r\n\t\tprice: \"$20\",\r\n\t\tperiod: \"/month\",\r\n\t\tdescription: \"Support independent storytelling at its best.\",\r\n\t\ticon: \"Gem\" as const,\r\n\t\tfeatured: false,\r\n\t\tfeatures: [\r\n\t\t\t\"Everything in Premium\",\r\n\t\t\t\"Members-only community\",\r\n\t\t\t\"Direct author Q&A sessions\",\r\n\t\t\t\"Patron badge on comments\",\r\n\t\t],\r\n\t},\r\n];\r\n\r\nconst faqs = [\r\n\t{\r\n\t\tq: \"When will Premium launch?\",\r\n\t\ta: \"We're building membership features now. Join our newsletter to be the first to know.\",\r\n\t},\r\n\t{\r\n\t\tq: \"Can I cancel anytime?\",\r\n\t\ta: \"Absolutely. No contracts, no commitments. Cancel with one click whenever you want.\",\r\n\t},\r\n\t{\r\n\t\tq: \"Will free content go behind a paywall?\",\r\n\t\ta: \"Never. All currently free content stays free. Premium adds new content on top.\",\r\n\t},\r\n];\r\n\r\nexport function MembershipPage() {\r\n\treturn (\r\n\t\t<motion.div\r\n\t\t\tinitial={{ opacity:
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/pages/membership/membership-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport {\r\n\tLayout,\r\n\tHeading,\r\n\tText,\r\n\tTextSpan,\r\n\tButton,\r\n\tIcon,\r\n\tBadge,\r\n\tSeparator,\r\n\tAccordion,\r\n\tAccordionContent,\r\n\tAccordionItem,\r\n\tAccordionTrigger,\r\n} from \"../../primitives/index\";\r\nimport { Card, CardContent, CardHeader, CardTitle, CardDescription } from \"../../blocks/cards/card\";\r\n\r\nconst plans = [\r\n\t{\r\n\t\tname: \"Free\",\r\n\t\tprice: \"$0\",\r\n\t\tperiod: \"forever\",\r\n\t\tdescription: \"Everything you need to enjoy the blog.\",\r\n\t\ticon: \"BookOpen\" as const,\r\n\t\tfeatured: false,\r\n\t\tfeatures: [\r\n\t\t\t\"Access to all published articles\",\r\n\t\t\t\"Weekly newsletter\",\r\n\t\t\t\"Comment on posts\",\r\n\t\t\t\"Dark mode\",\r\n\t\t],\r\n\t},\r\n\t{\r\n\t\tname: \"Premium\",\r\n\t\tprice: \"$8\",\r\n\t\tperiod: \"/month\",\r\n\t\tdescription: \"For readers who want the full experience.\",\r\n\t\ticon: \"Crown\" as const,\r\n\t\tfeatured: true,\r\n\t\tfeatures: [\r\n\t\t\t\"Everything in Free\",\r\n\t\t\t\"Early access to new posts\",\r\n\t\t\t\"Exclusive essays & interviews\",\r\n\t\t\t\"Ad-free reading experience\",\r\n\t\t],\r\n\t},\r\n\t{\r\n\t\tname: \"Patron\",\r\n\t\tprice: \"$20\",\r\n\t\tperiod: \"/month\",\r\n\t\tdescription: \"Support independent storytelling at its best.\",\r\n\t\ticon: \"Gem\" as const,\r\n\t\tfeatured: false,\r\n\t\tfeatures: [\r\n\t\t\t\"Everything in Premium\",\r\n\t\t\t\"Members-only community\",\r\n\t\t\t\"Direct author Q&A sessions\",\r\n\t\t\t\"Patron badge on comments\",\r\n\t\t],\r\n\t},\r\n];\r\n\r\nconst faqs = [\r\n\t{\r\n\t\tq: \"When will Premium launch?\",\r\n\t\ta: \"We're building membership features now. Join our newsletter to be the first to know.\",\r\n\t},\r\n\t{\r\n\t\tq: \"Can I cancel anytime?\",\r\n\t\ta: \"Absolutely. No contracts, no commitments. Cancel with one click whenever you want.\",\r\n\t},\r\n\t{\r\n\t\tq: \"Will free content go behind a paywall?\",\r\n\t\ta: \"Never. All currently free content stays free. Premium adds new content on top.\",\r\n\t},\r\n];\r\n\r\nexport function MembershipPage() {\r\n\treturn (\r\n\t\t<motion.div\r\n\t\t\tinitial={{ opacity: 1, y: 20 }}\r\n\t\t\tanimate={{ opacity: 1, y: 0 }}\r\n\t\t\ttransition={{ duration: 0.3 }}\r\n\t\t>\r\n\t\t\t<section className=\"sg:bg-primary/5 sg:border-b sg:border-border\">\r\n\t\t\t\t<div className=\"sg:container sg:py-20 sg:max-w-3xl sg:mx-auto sg:text-center\">\r\n\t\t\t\t\t<Badge variant=\"secondary\" className=\"sg:mb-4 sg:uppercase sg:tracking-wider\">\r\n\t\t\t\t\t\tComing Soon\r\n\t\t\t\t\t</Badge>\r\n\t\t\t\t\t<Heading variant=\"h1\" className=\"sg:mb-4\">\r\n\t\t\t\t\t\tMembership\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Text size=\"lg\" foreground=\"muted-foreground\" className=\"sg:max-w-xl sg:mx-auto\">\r\n\t\t\t\t\t\tSupport independent storytelling and unlock a richer reading experience.\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t</div>\r\n\t\t\t</section>\r\n\r\n\t\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t\t<Layout.Col1 hideDiv className=\"sg:max-w-5xl\">\r\n\t\t\t\t\t<div className=\"sg:grid sg:gap-6 lg:sg:grid-cols-3\">\r\n\t\t\t\t\t\t{plans.map((plan) => (\r\n\t\t\t\t\t\t\t<Card\r\n\t\t\t\t\t\t\t\tkey={plan.name}\r\n\t\t\t\t\t\t\t\tclassName={\r\n\t\t\t\t\t\t\t\t\tplan.featured\r\n\t\t\t\t\t\t\t\t\t\t? \"sg:border-primary sg:shadow-lg sg:ring-1 sg:ring-primary/20 sg:relative\"\r\n\t\t\t\t\t\t\t\t\t\t: \"\"\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{plan.featured && (\r\n\t\t\t\t\t\t\t\t\t<div className=\"sg:absolute sg:-top-3 sg:left-1/2 sg:-translate-x-1/2\">\r\n\t\t\t\t\t\t\t\t\t\t<Badge>Most Popular</Badge>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t<CardHeader className=\"sg:text-center sg:pb-2\">\r\n\t\t\t\t\t\t\t\t\t<div className=\"sg:rounded-full sg:bg-primary/10 sg:p-3 sg:inline-flex sg:mx-auto sg:mb-2\">\r\n\t\t\t\t\t\t\t\t\t\t<Icon icon={plan.icon} className=\"sg:h-6 sg:w-6 sg:text-primary\" />\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<CardTitle>{plan.name}</CardTitle>\r\n\t\t\t\t\t\t\t\t\t<CardDescription>{plan.description}</CardDescription>\r\n\t\t\t\t\t\t\t\t</CardHeader>\r\n\t\t\t\t\t\t\t\t<CardContent className=\"sg:flex sg:flex-col sg:flex-1\">\r\n\t\t\t\t\t\t\t\t\t<div className=\"sg:text-center sg:mb-6\">\r\n\t\t\t\t\t\t\t\t\t\t<Heading variant=\"h2\" className=\"sg:inline\">\r\n\t\t\t\t\t\t\t\t\t\t\t{plan.price}\r\n\t\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t\t\t<TextSpan size=\"sm\" foreground=\"muted-foreground\" className=\"sg:ml-1\">\r\n\t\t\t\t\t\t\t\t\t\t\t{plan.period}\r\n\t\t\t\t\t\t\t\t\t\t</TextSpan>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<ul className=\"sg:space-y-3 sg:mb-8 sg:flex-1\">\r\n\t\t\t\t\t\t\t\t\t\t{plan.features.map((feature) => (\r\n\t\t\t\t\t\t\t\t\t\t\t<li key={feature} className=\"sg:flex sg:items-start sg:gap-2.5\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Icon icon=\"Check\" className=\"sg:h-4 sg:w-4 sg:text-primary sg:mt-0.5 sg:shrink-0\" />\r\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"sm\">{feature}</Text>\r\n\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t\t<Button variant={plan.featured ? \"default\" : \"outline\"} disabled>\r\n\t\t\t\t\t\t\t\t\t\tComing Soon\r\n\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t</CardContent>\r\n\t\t\t\t\t\t\t</Card>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</Layout.Col1>\r\n\t\t\t</Layout>\r\n\r\n\t\t\t<Separator className=\"sg:max-w-3xl sg:mx-auto\" />\r\n\r\n\t\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t\t<Layout.Col1 hideDiv className=\"sg:max-w-2xl\">\r\n\t\t\t\t\t<Heading variant=\"h2\" className=\"sg:mb-6 sg:text-center\">\r\n\t\t\t\t\t\tFAQ\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Accordion multiple={false} aria-label=\"Membership FAQ\">\r\n\t\t\t\t\t\t{faqs.map((faq, i) => (\r\n\t\t\t\t\t\t\t<AccordionItem key={faq.q} value={`faq-${i}`}>\r\n\t\t\t\t\t\t\t\t<AccordionTrigger>{faq.q}</AccordionTrigger>\r\n\t\t\t\t\t\t\t\t<AccordionContent>{faq.a}</AccordionContent>\r\n\t\t\t\t\t\t\t</AccordionItem>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</Accordion>\r\n\t\t\t\t</Layout.Col1>\r\n\t\t\t</Layout>\r\n\t\t</motion.div>\r\n\t);\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/pages/mosaic/mosaic-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useMemo, useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { Layout, Heading, Text, UiImage, Link } from \"../../primitives/index\";\r\nimport { posts } from \"../../../data/posts\";\r\nimport {\r\n\tSheet,\r\n\tSheetContent,\r\n\tSheetTitle,\r\n} from \"../../primitives/sheet/sheet\";\r\n\r\ntype MosaicItem = {\r\n\tsrc: string;\r\n\talt: string;\r\n\tpostSlug: string;\r\n\tpostTitle: string;\r\n};\r\n\r\nexport function MosaicPage() {\r\n\tconst [lightbox, setLightbox] = useState<MosaicItem | null>(null);\r\n\r\n\tconst items = useMemo<MosaicItem[]>(() => {\r\n\t\treturn posts.flatMap((post) => {\r\n\t\t\tconst images = post.gallery?.length\r\n\t\t\t\t? post.gallery\r\n\t\t\t\t: [{ src: post.primaryImage, alt: post.title }];\r\n\t\t\treturn images.map((img) => ({\r\n\t\t\t\tsrc: img.src,\r\n\t\t\t\talt: img.alt || post.title,\r\n\t\t\t\tpostSlug: post.slug,\r\n\t\t\t\tpostTitle: post.title,\r\n\t\t\t}));\r\n\t\t});\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t<Layout.Col1 hideDiv>\r\n\t\t\t\t<motion.div\r\n\t\t\t\t\tinitial={{ opacity:
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/pages/mosaic/mosaic-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useMemo, useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { Layout, Heading, Text, UiImage, Link } from \"../../primitives/index\";\r\nimport { posts } from \"../../../data/posts\";\r\nimport {\r\n\tSheet,\r\n\tSheetContent,\r\n\tSheetTitle,\r\n} from \"../../primitives/sheet/sheet\";\r\n\r\ntype MosaicItem = {\r\n\tsrc: string;\r\n\talt: string;\r\n\tpostSlug: string;\r\n\tpostTitle: string;\r\n};\r\n\r\nexport function MosaicPage() {\r\n\tconst [lightbox, setLightbox] = useState<MosaicItem | null>(null);\r\n\r\n\tconst items = useMemo<MosaicItem[]>(() => {\r\n\t\treturn posts.flatMap((post) => {\r\n\t\t\tconst images = post.gallery?.length\r\n\t\t\t\t? post.gallery\r\n\t\t\t\t: [{ src: post.primaryImage, alt: post.title }];\r\n\t\t\treturn images.map((img) => ({\r\n\t\t\t\tsrc: img.src,\r\n\t\t\t\talt: img.alt || post.title,\r\n\t\t\t\tpostSlug: post.slug,\r\n\t\t\t\tpostTitle: post.title,\r\n\t\t\t}));\r\n\t\t});\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t<Layout.Col1 hideDiv>\r\n\t\t\t\t<motion.div\r\n\t\t\t\t\tinitial={{ opacity: 1, y: 20 }}\r\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\r\n\t\t\t\t\ttransition={{ duration: 0.3 }}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Heading variant=\"h1\" className=\"sg:mb-2\">\r\n\t\t\t\t\t\tMosaic\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Text foreground=\"muted-foreground\" className=\"sg:mb-10\">\r\n\t\t\t\t\t\tA visual mosaic of images from our blog posts.\r\n\t\t\t\t\t</Text>\r\n\r\n\t\t\t\t\t<div className=\"sg:columns-2 md:sg:columns-3 lg:sg:columns-4 sg:gap-3 sg:space-y-3\">\r\n\t\t\t\t\t\t{items.map((item, i) => (\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\tkey={`${item.postSlug}-${i}`}\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"sg:block sg:w-full sg:mb-3 sg:break-inside-avoid sg:rounded-lg sg:overflow-hidden sg:border-0 sg:p-0 sg:bg-transparent sg:cursor-pointer sg:group\"\r\n\t\t\t\t\t\t\t\tonClick={() => setLightbox(item)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<UiImage\r\n\t\t\t\t\t\t\t\t\tsrc={item.src}\r\n\t\t\t\t\t\t\t\t\talt={item.alt}\r\n\t\t\t\t\t\t\t\t\tclassName=\"sg:w-full sg:object-cover sg:transition-transform sg:duration-300 sg:group-hover:scale-105\"\r\n\t\t\t\t\t\t\t\t\tloading=\"lazy\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</motion.div>\r\n\r\n\t\t\t\t<Sheet open={!!lightbox} onOpenChange={(open) => !open && setLightbox(null)}>\r\n\t\t\t\t\t<SheetContent side=\"bottom\" className=\"sg:max-h-[90vh] sg:p-4\">\r\n\t\t\t\t\t\t<SheetTitle className=\"sg:sr-only\">Image preview</SheetTitle>\r\n\t\t\t\t\t\t{lightbox && (\r\n\t\t\t\t\t\t\t<div className=\"sg:space-y-4 sg:mx-auto sg:max-w-4xl\">\r\n\t\t\t\t\t\t\t\t<UiImage\r\n\t\t\t\t\t\t\t\t\tsrc={lightbox.src}\r\n\t\t\t\t\t\t\t\t\talt={lightbox.alt}\r\n\t\t\t\t\t\t\t\t\tclassName=\"sg:w-full sg:max-h-[70vh] sg:object-contain sg:rounded-md\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<div className=\"sg:flex sg:items-center sg:justify-between sg:gap-4\">\r\n\t\t\t\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\">\r\n\t\t\t\t\t\t\t\t\t\tFrom: {lightbox.postTitle}\r\n\t\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t\t\t<Link to={`/posts/${lightbox.postSlug}`}>View post</Link>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</SheetContent>\r\n\t\t\t\t</Sheet>\r\n\t\t\t</Layout.Col1>\r\n\t\t</Layout>\r\n\t);\r\n}\r\n"],"mappings":";AAuCI,SAKC,KALD;AArCJ,SAAS,SAAS,gBAAgB;AAClC,SAAS,cAAc;AACvB,SAAS,QAAQ,SAAS,MAAM,SAAS,YAAY;AACrD,SAAS,aAAa;AACtB;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AASA,SAAS,aAAa;AAC5B,QAAM,CAAC,UAAU,WAAW,IAAI,SAA4B,IAAI;AAEhE,QAAM,QAAQ,QAAsB,MAAM;AACzC,WAAO,MAAM,QAAQ,CAAC,SAAS;AAC9B,YAAM,SAAS,KAAK,SAAS,SAC1B,KAAK,UACL,CAAC,EAAE,KAAK,KAAK,cAAc,KAAK,KAAK,MAAM,CAAC;AAC/C,aAAO,OAAO,IAAI,CAAC,SAAS;AAAA,QAC3B,KAAK,IAAI;AAAA,QACT,KAAK,IAAI,OAAO,KAAK;AAAA,QACrB,UAAU,KAAK;AAAA,QACf,WAAW,KAAK;AAAA,MACjB,EAAE;AAAA,IACH,CAAC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SACC,oBAAC,UAAO,MAAK,OAAM,WAAU,YAC5B,+BAAC,OAAO,MAAP,EAAY,SAAO,MACnB;AAAA;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QACA,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,QAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,QAC5B,YAAY,EAAE,UAAU,IAAI;AAAA,QAE5B;AAAA,8BAAC,WAAQ,SAAQ,MAAK,WAAU,WAAU,oBAE1C;AAAA,UACA,oBAAC,QAAK,YAAW,oBAAmB,WAAU,YAAW,4DAEzD;AAAA,UAEA,oBAAC,SAAI,WAAU,sEACb,gBAAM,IAAI,CAAC,MAAM,MACjB;AAAA,YAAC;AAAA;AAAA,cAEA,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS,MAAM,YAAY,IAAI;AAAA,cAE/B;AAAA,gBAAC;AAAA;AAAA,kBACA,KAAK,KAAK;AAAA,kBACV,KAAK,KAAK;AAAA,kBACV,WAAU;AAAA,kBACV,SAAQ;AAAA;AAAA,cACT;AAAA;AAAA,YAVK,GAAG,KAAK,QAAQ,IAAI,CAAC;AAAA,UAW3B,CACA,GACF;AAAA;AAAA;AAAA,IACD;AAAA,IAEA,oBAAC,SAAM,MAAM,CAAC,CAAC,UAAU,cAAc,CAAC,SAAS,CAAC,QAAQ,YAAY,IAAI,GACzE,+BAAC,gBAAa,MAAK,UAAS,WAAU,0BACrC;AAAA,0BAAC,cAAW,WAAU,cAAa,2BAAa;AAAA,MAC/C,YACA,qBAAC,SAAI,WAAU,wCACd;AAAA;AAAA,UAAC;AAAA;AAAA,YACA,KAAK,SAAS;AAAA,YACd,KAAK,SAAS;AAAA,YACd,WAAU;AAAA;AAAA,QACX;AAAA,QACA,qBAAC,SAAI,WAAU,uDACd;AAAA,+BAAC,QAAK,MAAK,MAAK,YAAW,oBAAmB;AAAA;AAAA,YACtC,SAAS;AAAA,aACjB;AAAA,UACA,oBAAC,QAAK,IAAI,UAAU,SAAS,QAAQ,IAAI,uBAAS;AAAA,WACnD;AAAA,SACD;AAAA,OAEF,GACD;AAAA,KACD,GACD;AAEF;","names":[]}
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useForm } from "@tanstack/react-form";
|
|
3
4
|
import { useState } from "react";
|
|
4
5
|
import { motion } from "framer-motion";
|
|
6
|
+
import { TanStackInputField } from "../../../lib/forms/tanstack-field.js";
|
|
5
7
|
import {
|
|
6
8
|
Layout,
|
|
7
9
|
Heading,
|
|
8
10
|
Text,
|
|
9
|
-
Input,
|
|
10
11
|
Button,
|
|
11
12
|
Icon,
|
|
12
13
|
Separator
|
|
13
14
|
} from "../../primitives/index.js";
|
|
14
|
-
import {
|
|
15
|
+
import { FieldGroup } from "../../primitives/forms/field.js";
|
|
16
|
+
import {
|
|
17
|
+
Form,
|
|
18
|
+
FormActions
|
|
19
|
+
} from "../../primitives/forms/form.js";
|
|
15
20
|
import { Card, CardContent } from "../../blocks/cards/card.js";
|
|
16
21
|
import {
|
|
17
22
|
Avatar,
|
|
@@ -39,30 +44,22 @@ const benefits = [
|
|
|
39
44
|
];
|
|
40
45
|
function NewsletterPage() {
|
|
41
46
|
const { toast } = useToast();
|
|
42
|
-
const [email, setEmail] = useState("");
|
|
43
|
-
const [error, setError] = useState("");
|
|
44
|
-
const [submitting, setSubmitting] = useState(false);
|
|
45
47
|
const [subscribed, setSubscribed] = useState(false);
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
setError("");
|
|
53
|
-
setSubmitting(true);
|
|
54
|
-
setTimeout(() => {
|
|
55
|
-
setSubmitting(false);
|
|
48
|
+
const form = useForm({
|
|
49
|
+
defaultValues: { email: "" },
|
|
50
|
+
onSubmit: async ({ formApi }) => {
|
|
51
|
+
await new Promise((resolve) => setTimeout(resolve, 1200));
|
|
56
52
|
setSubscribed(true);
|
|
53
|
+
formApi.reset();
|
|
57
54
|
toast.message("You're subscribed!", {
|
|
58
55
|
description: "Check your inbox for a welcome email."
|
|
59
56
|
});
|
|
60
|
-
}
|
|
61
|
-
};
|
|
57
|
+
}
|
|
58
|
+
});
|
|
62
59
|
return /* @__PURE__ */ jsxs(
|
|
63
60
|
motion.div,
|
|
64
61
|
{
|
|
65
|
-
initial: { opacity:
|
|
62
|
+
initial: { opacity: 1, y: 20 },
|
|
66
63
|
animate: { opacity: 1, y: 0 },
|
|
67
64
|
transition: { duration: 0.3 },
|
|
68
65
|
children: [
|
|
@@ -79,30 +76,50 @@ function NewsletterPage() {
|
|
|
79
76
|
}
|
|
80
77
|
),
|
|
81
78
|
!subscribed ? /* @__PURE__ */ jsxs(
|
|
82
|
-
|
|
79
|
+
Form,
|
|
83
80
|
{
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
className: "sg:mt-8 sg:flex-col sm:sg:flex-row sg:gap-3 sg:max-w-md sg:mx-auto",
|
|
82
|
+
onSubmit: (event) => {
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
event.stopPropagation();
|
|
85
|
+
void form.handleSubmit();
|
|
86
|
+
},
|
|
86
87
|
children: [
|
|
87
|
-
/* @__PURE__ */
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (
|
|
99
|
-
|
|
100
|
-
|
|
88
|
+
/* @__PURE__ */ jsx(FieldGroup, { className: "sg:flex-1", children: /* @__PURE__ */ jsx(
|
|
89
|
+
TanStackInputField,
|
|
90
|
+
{
|
|
91
|
+
formApi: form,
|
|
92
|
+
name: "email",
|
|
93
|
+
label: "Email",
|
|
94
|
+
labelClassName: "sg:sr-only",
|
|
95
|
+
type: "email",
|
|
96
|
+
placeholder: "you@example.com",
|
|
97
|
+
validators: {
|
|
98
|
+
onChange: ({ value }) => {
|
|
99
|
+
if (!value.trim() || !value.includes("@")) {
|
|
100
|
+
return "Please enter a valid email address";
|
|
101
|
+
}
|
|
102
|
+
return void 0;
|
|
103
|
+
}
|
|
101
104
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
105
|
+
}
|
|
106
|
+
) }),
|
|
107
|
+
/* @__PURE__ */ jsx(FormActions, { children: /* @__PURE__ */ jsx(
|
|
108
|
+
form.Subscribe,
|
|
109
|
+
{
|
|
110
|
+
selector: (state) => [state.canSubmit, state.isSubmitting],
|
|
111
|
+
children: ([canSubmit, isSubmitting]) => /* @__PURE__ */ jsx(
|
|
112
|
+
Button,
|
|
113
|
+
{
|
|
114
|
+
type: "submit",
|
|
115
|
+
iconStart: "Mail",
|
|
116
|
+
disabled: !canSubmit || isSubmitting,
|
|
117
|
+
loading: isSubmitting,
|
|
118
|
+
children: "Subscribe"
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
) })
|
|
106
123
|
]
|
|
107
124
|
}
|
|
108
125
|
) : /* @__PURE__ */ jsxs("div", { className: "sg:mt-8 sg:inline-flex sg:items-center sg:gap-2 sg:bg-primary/10 sg:text-primary sg:rounded-full sg:px-5 sg:py-2.5 sg:font-medium", children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/pages/newsletter/newsletter-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport {\r\n\tLayout,\r\n\tHeading,\r\n\tText,\r\n\tInput,\r\n\tButton,\r\n\tIcon,\r\n\tSeparator,\r\n} from \"../../primitives/index\";\r\nimport { Label } from \"../../primitives/label/label\";\r\nimport { Card, CardContent } from \"../../blocks/cards/card\";\r\nimport {\r\n\tAvatar,\r\n\tAvatarFallback,\r\n\tAvatarImage,\r\n} from \"../../primitives/avatar/avatar\";\r\nimport { useToast } from \"../../primitives/sonner/use-toast\";\r\nimport { authors } from \"../../../data/authors\";\r\n\r\nconst benefits = [\r\n\t{\r\n\t\ticon: \"BookOpen\" as const,\r\n\t\ttitle: \"Curated Stories\",\r\n\t\tdescription:\r\n\t\t\t\"Handpicked articles on slow living, design, and culture — delivered weekly.\",\r\n\t},\r\n\t{\r\n\t\ticon: \"Sparkles\" as const,\r\n\t\ttitle: \"Exclusive Content\",\r\n\t\tdescription:\r\n\t\t\t\"Subscriber-only essays, interviews, and behind-the-scenes looks.\",\r\n\t},\r\n\t{\r\n\t\ticon: \"Clock\" as const,\r\n\t\ttitle: \"Early Access\",\r\n\t\tdescription: \"Be the first to read new posts before they go live.\",\r\n\t},\r\n];\r\n\r\nexport function NewsletterPage() {\r\n\tconst { toast } = useToast();\r\n\tconst [email, setEmail] = useState(\"\");\r\n\tconst [error, setError] = useState(\"\");\r\n\tconst [submitting, setSubmitting] = useState(false);\r\n\tconst [subscribed, setSubscribed] = useState(false);\r\n\r\n\tconst handleSubmit = (e: React.FormEvent) => {\r\n\t\te.preventDefault();\r\n\t\tif (!email.trim() || !email.includes(\"@\")) {\r\n\t\t\tsetError(\"Please enter a valid email address\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetError(\"\");\r\n\t\tsetSubmitting(true);\r\n\t\tsetTimeout(() => {\r\n\t\t\tsetSubmitting(false);\r\n\t\t\tsetSubscribed(true);\r\n\t\t\ttoast.message(\"You're subscribed!\", {\r\n\t\t\t\tdescription: \"Check your inbox for a welcome email.\",\r\n\t\t\t});\r\n\t\t}, 1200);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<motion.div\r\n\t\t\tinitial={{ opacity: 0, y: 20 }}\r\n\t\t\tanimate={{ opacity: 1, y: 0 }}\r\n\t\t\ttransition={{ duration: 0.3 }}\r\n\t\t>\r\n\t\t\t<section className=\"sg:bg-primary/5 sg:border-b sg:border-border\">\r\n\t\t\t\t<div className=\"sg:container sg:py-20 sg:max-w-3xl sg:mx-auto sg:text-center\">\r\n\t\t\t\t\t<Icon icon=\"Mail\" className=\"sg:h-12 sg:w-12 sg:text-primary sg:mx-auto sg:mb-5\" />\r\n\t\t\t\t\t<Heading variant=\"h1\" className=\"sg:mb-4\">\r\n\t\t\t\t\t\tStories Worth Reading, Delivered Weekly\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Text\r\n\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\tforeground=\"muted-foreground\"\r\n\t\t\t\t\t\tclassName=\"sg:max-w-xl sg:mx-auto sg:leading-relaxed\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\tJoin a growing community of thoughtful readers. Curated essays on slow\r\n\t\t\t\t\t\tliving, intentional design, and creative culture — every Sunday.\r\n\t\t\t\t\t</Text>\r\n\r\n\t\t\t\t\t{!subscribed ? (\r\n\t\t\t\t\t\t<form\r\n\t\t\t\t\t\t\tonSubmit={handleSubmit}\r\n\t\t\t\t\t\t\tclassName=\"sg:mt-8 sg:flex sg:flex-col sm:sg:flex-row sg:gap-3 sg:max-w-md sg:mx-auto\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<div className=\"sg:flex-1\">\r\n\t\t\t\t\t\t\t\t<Label htmlFor=\"newsletter-email\" className=\"sg:sr-only\">\r\n\t\t\t\t\t\t\t\t\tEmail\r\n\t\t\t\t\t\t\t\t</Label>\r\n\t\t\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\t\t\tid=\"newsletter-email\"\r\n\t\t\t\t\t\t\t\t\ttype=\"email\"\r\n\t\t\t\t\t\t\t\t\tplaceholder=\"you@example.com\"\r\n\t\t\t\t\t\t\t\t\tvalue={email}\r\n\t\t\t\t\t\t\t\t\tonChange={(e) => {\r\n\t\t\t\t\t\t\t\t\t\tsetEmail(e.target.value);\r\n\t\t\t\t\t\t\t\t\t\tif (error) setError(\"\");\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t\taria-invalid={!!error}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t{error && (\r\n\t\t\t\t\t\t\t\t\t<Text size=\"sm\" className=\"sg:text-destructive sg:text-left sg:mt-1\">\r\n\t\t\t\t\t\t\t\t\t\t{error}\r\n\t\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<Button type=\"submit\" loading={submitting} iconStart=\"Mail\">\r\n\t\t\t\t\t\t\t\tSubscribe\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<div className=\"sg:mt-8 sg:inline-flex sg:items-center sg:gap-2 sg:bg-primary/10 sg:text-primary sg:rounded-full sg:px-5 sg:py-2.5 sg:font-medium\">\r\n\t\t\t\t\t\t\t<Icon icon=\"CircleCheck\" className=\"sg:h-5 sg:w-5\" />\r\n\t\t\t\t\t\t\tYou're subscribed — welcome aboard!\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t<div className=\"sg:mt-6 sg:flex sg:items-center sg:justify-center sg:gap-2\">\r\n\t\t\t\t\t\t<div className=\"sg:flex sg:-space-x-2\">\r\n\t\t\t\t\t\t\t{authors.map((a) => (\r\n\t\t\t\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\t\t\t\tkey={a.slug}\r\n\t\t\t\t\t\t\t\t\tclassName=\"sg:h-7 sg:w-7 sg:border-2 sg:border-background\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<AvatarImage src={a.avatar} alt={a.name} />\r\n\t\t\t\t\t\t\t\t\t<AvatarFallback className=\"sg:text-[10px]\">\r\n\t\t\t\t\t\t\t\t\t\t{a.name[0]}\r\n\t\t\t\t\t\t\t\t\t</AvatarFallback>\r\n\t\t\t\t\t\t\t\t</Avatar>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\">\r\n\t\t\t\t\t\t\tJoin <span className=\"sg:font-medium sg:text-foreground\">2,400+</span> readers\r\n\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</section>\r\n\r\n\t\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t\t<Layout.Col1 hideDiv className=\"sg:max-w-4xl\">\r\n\t\t\t\t\t<Heading variant=\"h2\" className=\"sg:text-center sg:mb-2\">\r\n\t\t\t\t\t\tWhat You'll Get\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Text foreground=\"muted-foreground\" className=\"sg:text-center sg:mb-10\">\r\n\t\t\t\t\t\tEvery issue is crafted with the same care as our articles.\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t\t<div className=\"sg:grid sg:gap-6 sm:sg:grid-cols-3\">\r\n\t\t\t\t\t\t{benefits.map((b) => (\r\n\t\t\t\t\t\t\t<Card key={b.title} className=\"sg:text-center\">\r\n\t\t\t\t\t\t\t\t<CardContent className=\"sg:pt-6\">\r\n\t\t\t\t\t\t\t\t\t<div className=\"sg:rounded-full sg:bg-primary/10 sg:p-3 sg:inline-flex sg:mb-4\">\r\n\t\t\t\t\t\t\t\t\t\t<Icon icon={b.icon} className=\"sg:h-6 sg:w-6 sg:text-primary\" />\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<Heading variant=\"h5\" className=\"sg:mb-1\">\r\n\t\t\t\t\t\t\t\t\t\t{b.title}\r\n\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\" className=\"sg:leading-relaxed\">\r\n\t\t\t\t\t\t\t\t\t\t{b.description}\r\n\t\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t\t</CardContent>\r\n\t\t\t\t\t\t\t</Card>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</Layout.Col1>\r\n\t\t\t</Layout>\r\n\r\n\t\t\t<Separator className=\"sg:max-w-4xl sg:mx-auto\" />\r\n\t\t</motion.div>\r\n\t);\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/pages/newsletter/newsletter-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { useForm } from \"@tanstack/react-form\";\r\nimport { useState } from \"react\";\r\nimport { motion } from \"framer-motion\";\r\nimport { TanStackInputField } from \"../../../lib/forms/tanstack-field\";\r\nimport {\r\n\tLayout,\r\n\tHeading,\r\n\tText,\r\n\tButton,\r\n\tIcon,\r\n\tSeparator,\r\n} from \"../../primitives/index\";\r\nimport { FieldGroup } from \"../../primitives/forms/field\";\r\nimport {\r\n\tForm,\r\n\tFormActions,\r\n} from \"../../primitives/forms/form\";\r\nimport { Card, CardContent } from \"../../blocks/cards/card\";\r\nimport {\r\n\tAvatar,\r\n\tAvatarFallback,\r\n\tAvatarImage,\r\n} from \"../../primitives/avatar/avatar\";\r\nimport { useToast } from \"../../primitives/sonner/use-toast\";\r\nimport { authors } from \"../../../data/authors\";\r\n\r\nconst benefits = [\r\n\t{\r\n\t\ticon: \"BookOpen\" as const,\r\n\t\ttitle: \"Curated Stories\",\r\n\t\tdescription:\r\n\t\t\t\"Handpicked articles on slow living, design, and culture — delivered weekly.\",\r\n\t},\r\n\t{\r\n\t\ticon: \"Sparkles\" as const,\r\n\t\ttitle: \"Exclusive Content\",\r\n\t\tdescription:\r\n\t\t\t\"Subscriber-only essays, interviews, and behind-the-scenes looks.\",\r\n\t},\r\n\t{\r\n\t\ticon: \"Clock\" as const,\r\n\t\ttitle: \"Early Access\",\r\n\t\tdescription: \"Be the first to read new posts before they go live.\",\r\n\t},\r\n];\r\n\r\nexport function NewsletterPage() {\r\n\tconst { toast } = useToast();\r\n\tconst [subscribed, setSubscribed] = useState(false);\r\n\r\n\tconst form = useForm({\r\n\t\tdefaultValues: { email: \"\" },\r\n\t\tonSubmit: async ({ formApi }) => {\r\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 1200));\r\n\t\t\tsetSubscribed(true);\r\n\t\t\tformApi.reset();\r\n\t\t\ttoast.message(\"You're subscribed!\", {\r\n\t\t\t\tdescription: \"Check your inbox for a welcome email.\",\r\n\t\t\t});\r\n\t\t},\r\n\t});\r\n\r\n\treturn (\r\n\t\t<motion.div\r\n\t\t\tinitial={{ opacity: 1, y: 20 }}\r\n\t\t\tanimate={{ opacity: 1, y: 0 }}\r\n\t\t\ttransition={{ duration: 0.3 }}\r\n\t\t>\r\n\t\t\t<section className=\"sg:bg-primary/5 sg:border-b sg:border-border\">\r\n\t\t\t\t<div className=\"sg:container sg:py-20 sg:max-w-3xl sg:mx-auto sg:text-center\">\r\n\t\t\t\t\t<Icon icon=\"Mail\" className=\"sg:h-12 sg:w-12 sg:text-primary sg:mx-auto sg:mb-5\" />\r\n\t\t\t\t\t<Heading variant=\"h1\" className=\"sg:mb-4\">\r\n\t\t\t\t\t\tStories Worth Reading, Delivered Weekly\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Text\r\n\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\tforeground=\"muted-foreground\"\r\n\t\t\t\t\t\tclassName=\"sg:max-w-xl sg:mx-auto sg:leading-relaxed\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\tJoin a growing community of thoughtful readers. Curated essays on slow\r\n\t\t\t\t\t\tliving, intentional design, and creative culture — every Sunday.\r\n\t\t\t\t\t</Text>\r\n\r\n\t\t\t\t\t{!subscribed ? (\r\n\t\t\t\t\t\t<Form\r\n\t\t\t\t\t\t\tclassName=\"sg:mt-8 sg:flex-col sm:sg:flex-row sg:gap-3 sg:max-w-md sg:mx-auto\"\r\n\t\t\t\t\t\t\tonSubmit={(event) => {\r\n\t\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\t\t\tvoid form.handleSubmit();\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<FieldGroup className=\"sg:flex-1\">\r\n\t\t\t\t\t\t\t\t<TanStackInputField\r\n\t\t\t\t\t\t\t\t\tformApi={form}\r\n\t\t\t\t\t\t\t\t\tname=\"email\"\r\n\t\t\t\t\t\t\t\t\tlabel=\"Email\"\r\n\t\t\t\t\t\t\t\t\tlabelClassName=\"sg:sr-only\"\r\n\t\t\t\t\t\t\t\t\ttype=\"email\"\r\n\t\t\t\t\t\t\t\t\tplaceholder=\"you@example.com\"\r\n\t\t\t\t\t\t\t\t\tvalidators={{\r\n\t\t\t\t\t\t\t\t\t\tonChange: ({ value }: { value: string }) => {\r\n\t\t\t\t\t\t\t\t\t\t\tif (!value.trim() || !value.includes(\"@\")) {\r\n\t\t\t\t\t\t\t\t\t\t\t\treturn \"Please enter a valid email address\";\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\treturn undefined;\r\n\t\t\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</FieldGroup>\r\n\t\t\t\t\t\t\t<FormActions>\r\n\t\t\t\t\t\t\t\t<form.Subscribe\r\n\t\t\t\t\t\t\t\t\tselector={(state) => [state.canSubmit, state.isSubmitting]}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{([canSubmit, isSubmitting]) => (\r\n\t\t\t\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\t\t\t\t\t\ticonStart=\"Mail\"\r\n\t\t\t\t\t\t\t\t\t\t\tdisabled={!canSubmit || isSubmitting}\r\n\t\t\t\t\t\t\t\t\t\t\tloading={isSubmitting}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\tSubscribe\r\n\t\t\t\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t</form.Subscribe>\r\n\t\t\t\t\t\t\t</FormActions>\r\n\t\t\t\t\t\t</Form>\r\n\t\t\t\t\t) : (\r\n\t\t\t\t\t\t<div className=\"sg:mt-8 sg:inline-flex sg:items-center sg:gap-2 sg:bg-primary/10 sg:text-primary sg:rounded-full sg:px-5 sg:py-2.5 sg:font-medium\">\r\n\t\t\t\t\t\t\t<Icon icon=\"CircleCheck\" className=\"sg:h-5 sg:w-5\" />\r\n\t\t\t\t\t\t\tYou're subscribed — welcome aboard!\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\r\n\t\t\t\t\t<div className=\"sg:mt-6 sg:flex sg:items-center sg:justify-center sg:gap-2\">\r\n\t\t\t\t\t\t<div className=\"sg:flex sg:-space-x-2\">\r\n\t\t\t\t\t\t\t{authors.map((a) => (\r\n\t\t\t\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\t\t\t\tkey={a.slug}\r\n\t\t\t\t\t\t\t\t\tclassName=\"sg:h-7 sg:w-7 sg:border-2 sg:border-background\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<AvatarImage src={a.avatar} alt={a.name} />\r\n\t\t\t\t\t\t\t\t\t<AvatarFallback className=\"sg:text-[10px]\">\r\n\t\t\t\t\t\t\t\t\t\t{a.name[0]}\r\n\t\t\t\t\t\t\t\t\t</AvatarFallback>\r\n\t\t\t\t\t\t\t\t</Avatar>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\">\r\n\t\t\t\t\t\t\tJoin <span className=\"sg:font-medium sg:text-foreground\">2,400+</span> readers\r\n\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</section>\r\n\r\n\t\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t\t<Layout.Col1 hideDiv className=\"sg:max-w-4xl\">\r\n\t\t\t\t\t<Heading variant=\"h2\" className=\"sg:text-center sg:mb-2\">\r\n\t\t\t\t\t\tWhat You'll Get\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Text foreground=\"muted-foreground\" className=\"sg:text-center sg:mb-10\">\r\n\t\t\t\t\t\tEvery issue is crafted with the same care as our articles.\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t\t<div className=\"sg:grid sg:gap-6 sm:sg:grid-cols-3\">\r\n\t\t\t\t\t\t{benefits.map((b) => (\r\n\t\t\t\t\t\t\t<Card key={b.title} className=\"sg:text-center\">\r\n\t\t\t\t\t\t\t\t<CardContent className=\"sg:pt-6\">\r\n\t\t\t\t\t\t\t\t\t<div className=\"sg:rounded-full sg:bg-primary/10 sg:p-3 sg:inline-flex sg:mb-4\">\r\n\t\t\t\t\t\t\t\t\t\t<Icon icon={b.icon} className=\"sg:h-6 sg:w-6 sg:text-primary\" />\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<Heading variant=\"h5\" className=\"sg:mb-1\">\r\n\t\t\t\t\t\t\t\t\t\t{b.title}\r\n\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\" className=\"sg:leading-relaxed\">\r\n\t\t\t\t\t\t\t\t\t\t{b.description}\r\n\t\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t\t</CardContent>\r\n\t\t\t\t\t\t\t</Card>\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</Layout.Col1>\r\n\t\t\t</Layout>\r\n\r\n\t\t\t<Separator className=\"sg:max-w-4xl sg:mx-auto\" />\r\n\t\t</motion.div>\r\n\t);\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -28,9 +28,9 @@ const NotFound = ({
|
|
|
28
28
|
return /* @__PURE__ */ jsx(Layout, { bgColor: "background", children: /* @__PURE__ */ jsx(Layout.Col1, { className: "sg:flex sg:flex-col sg:items-center sg:justify-center sg:py-32 sg:text-center", children: /* @__PURE__ */ jsxs(
|
|
29
29
|
motion.div,
|
|
30
30
|
{
|
|
31
|
-
initial: { opacity:
|
|
31
|
+
initial: { opacity: 1, y: 20 },
|
|
32
32
|
animate: { opacity: 1, y: 0 },
|
|
33
|
-
exit: { opacity:
|
|
33
|
+
exit: { opacity: 1, y: -20 },
|
|
34
34
|
transition: { duration: 0.3 },
|
|
35
35
|
className: "sg:flex sg:flex-col sg:items-center",
|
|
36
36
|
children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/pages/not-found/not-found.tsx"],"sourcesContent":["\"use client\";\nimport { motion } from \"framer-motion\";\nimport { Layout } from \"../../primitives/layout/layout\";\nimport { Button } from \"../../primitives/buttons/button\";\nimport { LinkButton } from \"../../primitives/buttons/link-button\";\nimport { Heading, Icon, Stack, Text, TextCode } from \"../../primitives/index\";\nimport { useEffect } from \"react\";\n\ninterface NotFoundProps {\n pathname?: string;\n homeHref?: string;\n onGoBack?: () => void;\n}\n\nexport const NotFound = ({\n pathname,\n homeHref = \"/\",\n onGoBack,\n}: NotFoundProps) => {\n const currentPath =\n pathname ?? (typeof window !== \"undefined\" ? window.location.pathname : \"\");\n\n useEffect(() => {\n console.error(\n \"404 Error: User attempted to access non-existent route:\",\n currentPath,\n );\n }, [currentPath]);\n\n const handleGoBack = () => {\n if (onGoBack) {\n onGoBack();\n } else if (typeof window !== \"undefined\") {\n window.history.back();\n }\n };\n\n return (\n <Layout bgColor=\"background\">\n <Layout.Col1 className=\"sg:flex sg:flex-col sg:items-center sg:justify-center sg:py-32 sg:text-center\">\n <motion.div\n initial={{ opacity:
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/pages/not-found/not-found.tsx"],"sourcesContent":["\"use client\";\nimport { motion } from \"framer-motion\";\nimport { Layout } from \"../../primitives/layout/layout\";\nimport { Button } from \"../../primitives/buttons/button\";\nimport { LinkButton } from \"../../primitives/buttons/link-button\";\nimport { Heading, Icon, Stack, Text, TextCode } from \"../../primitives/index\";\nimport { useEffect } from \"react\";\n\ninterface NotFoundProps {\n pathname?: string;\n homeHref?: string;\n onGoBack?: () => void;\n}\n\nexport const NotFound = ({\n pathname,\n homeHref = \"/\",\n onGoBack,\n}: NotFoundProps) => {\n const currentPath =\n pathname ?? (typeof window !== \"undefined\" ? window.location.pathname : \"\");\n\n useEffect(() => {\n console.error(\n \"404 Error: User attempted to access non-existent route:\",\n currentPath,\n );\n }, [currentPath]);\n\n const handleGoBack = () => {\n if (onGoBack) {\n onGoBack();\n } else if (typeof window !== \"undefined\") {\n window.history.back();\n }\n };\n\n return (\n <Layout bgColor=\"background\">\n <Layout.Col1 className=\"sg:flex sg:flex-col sg:items-center sg:justify-center sg:py-32 sg:text-center\">\n <motion.div\n initial={{ opacity: 1, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 1, y: -20 }}\n transition={{ duration: 0.3 }}\n className=\"sg:flex sg:flex-col sg:items-center\"\n >\n <Icon size=\"xxl\" className=\"sg:mb-6\" icon=\"SearchX\" />\n\n <Heading variant=\"h1\" className=\"sg:mb-2\" foreground=\"primary\">\n 404\n </Heading>\n\n <Heading variant=\"h2\" className=\"sg:mb-3\">\n Page not found\n </Heading>\n\n <Text foreground=\"muted-foreground\" className=\"sg:max-w-md sg:mb-8\">\n The page <TextCode>{currentPath}</TextCode> doesn't exist. It\n may have been moved or removed.\n </Text>\n\n <Stack wrap=\"wrap\" justifyContent=\"center\" gap={3} direction=\"row\">\n <LinkButton to={homeHref} iconStart=\"House\">\n Back to Home\n </LinkButton>\n <Button\n variant=\"outline\"\n onClick={handleGoBack}\n iconStart=\"ArrowLeft\"\n >\n Go Back\n </Button>\n </Stack>\n </motion.div>\n </Layout.Col1>\n </Layout>\n );\n};\n"],"mappings":";AA+CU,cAUA,YAVA;AA9CV,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,SAAS,MAAM,OAAO,MAAM,gBAAgB;AACrD,SAAS,iBAAiB;AAQnB,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAqB;AACnB,QAAM,cACJ,aAAa,OAAO,WAAW,cAAc,OAAO,SAAS,WAAW;AAE1E,YAAU,MAAM;AACd,YAAQ;AAAA,MACN;AAAA,MACA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,eAAe,MAAM;AACzB,QAAI,UAAU;AACZ,eAAS;AAAA,IACX,WAAW,OAAO,WAAW,aAAa;AACxC,aAAO,QAAQ,KAAK;AAAA,IACtB;AAAA,EACF;AAEA,SACE,oBAAC,UAAO,SAAQ,cACd,8BAAC,OAAO,MAAP,EAAY,WAAU,iFACrB;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,MAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,MAC5B,MAAM,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,MAC3B,YAAY,EAAE,UAAU,IAAI;AAAA,MAC5B,WAAU;AAAA,MAEV;AAAA,4BAAC,QAAK,MAAK,OAAM,WAAU,WAAU,MAAK,WAAU;AAAA,QAEpD,oBAAC,WAAQ,SAAQ,MAAK,WAAU,WAAU,YAAW,WAAU,iBAE/D;AAAA,QAEA,oBAAC,WAAQ,SAAQ,MAAK,WAAU,WAAU,4BAE1C;AAAA,QAEA,qBAAC,QAAK,YAAW,oBAAmB,WAAU,uBAAsB;AAAA;AAAA,UACzD,oBAAC,YAAU,uBAAY;AAAA,UAAW;AAAA,WAE7C;AAAA,QAEA,qBAAC,SAAM,MAAK,QAAO,gBAAe,UAAS,KAAK,GAAG,WAAU,OAC3D;AAAA,8BAAC,cAAW,IAAI,UAAU,WAAU,SAAQ,0BAE5C;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,SAAS;AAAA,cACT,WAAU;AAAA,cACX;AAAA;AAAA,UAED;AAAA,WACF;AAAA;AAAA;AAAA,EACF,GACF,GACF;AAEJ;","names":[]}
|
|
@@ -44,9 +44,9 @@ const PrivacyPage = ({
|
|
|
44
44
|
return /* @__PURE__ */ jsxs(
|
|
45
45
|
motion.div,
|
|
46
46
|
{
|
|
47
|
-
initial: { opacity:
|
|
47
|
+
initial: { opacity: 1, y: 20 },
|
|
48
48
|
animate: { opacity: 1, y: 0 },
|
|
49
|
-
exit: { opacity:
|
|
49
|
+
exit: { opacity: 1, y: -20 },
|
|
50
50
|
transition: { duration: 0.3 },
|
|
51
51
|
className: "sg:w-full",
|
|
52
52
|
children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/pages/privacy/privacy-page.tsx"],"sourcesContent":["\"use client\";\nimport { motion } from \"framer-motion\";\nimport {\n Layout,\n Separator,\n Heading,\n Text,\n Icon,\n Stack,\n} from \"../../primitives/index\";\n\ninterface Section {\n title: string;\n content: string;\n}\n\ninterface PrivacyPageProps {\n title?: string;\n effectiveDate?: string;\n introText?: string;\n sections?: Section[];\n}\n\nconst defaultSections: Section[] = [\n {\n title: \"Information We Collect\",\n content:\n \"We collect minimal information to provide and improve our service. This may include your name and email address when you use our contact form, and standard analytics data such as browser type, device, and pages visited.\",\n },\n {\n title: \"How We Use Your Information\",\n content:\n \"Your information is used solely to respond to your inquiries, improve our content and user experience, and maintain the security of our website. We do not sell, trade, or rent your personal data to third parties.\",\n },\n {\n title: \"Cookies & Analytics\",\n content:\n \"We use cookies to remember your preferences (such as dark mode) and basic analytics to understand how our content is used. You can disable cookies in your browser settings at any time.\",\n },\n {\n title: \"Data Retention\",\n content:\n \"We retain personal data only as long as necessary to fulfill the purposes outlined above. Contact form submissions are kept for up to 12 months before being deleted.\",\n },\n {\n title: \"Your Rights\",\n content:\n \"You have the right to access, correct, or delete your personal data at any time. To make a request, please reach out via our contact page and we will respond within 30 days.\",\n },\n {\n title: \"Changes to This Policy\",\n content:\n \"We may update this policy from time to time. Changes will be posted on this page with an updated effective date. Continued use of the site constitutes acceptance of the revised policy.\",\n },\n];\n\nexport const PrivacyPage = ({\n title = \"Privacy Policy\",\n effectiveDate = \"March 1, 2025\",\n introText = \"At Storied, we take your privacy seriously. This policy outlines what data we collect, how we use it, and your rights as a visitor to our site.\",\n sections = defaultSections,\n}: PrivacyPageProps) => {\n return (\n <motion.div\n initial={{ opacity:
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/pages/privacy/privacy-page.tsx"],"sourcesContent":["\"use client\";\nimport { motion } from \"framer-motion\";\nimport {\n Layout,\n Separator,\n Heading,\n Text,\n Icon,\n Stack,\n} from \"../../primitives/index\";\n\ninterface Section {\n title: string;\n content: string;\n}\n\ninterface PrivacyPageProps {\n title?: string;\n effectiveDate?: string;\n introText?: string;\n sections?: Section[];\n}\n\nconst defaultSections: Section[] = [\n {\n title: \"Information We Collect\",\n content:\n \"We collect minimal information to provide and improve our service. This may include your name and email address when you use our contact form, and standard analytics data such as browser type, device, and pages visited.\",\n },\n {\n title: \"How We Use Your Information\",\n content:\n \"Your information is used solely to respond to your inquiries, improve our content and user experience, and maintain the security of our website. We do not sell, trade, or rent your personal data to third parties.\",\n },\n {\n title: \"Cookies & Analytics\",\n content:\n \"We use cookies to remember your preferences (such as dark mode) and basic analytics to understand how our content is used. You can disable cookies in your browser settings at any time.\",\n },\n {\n title: \"Data Retention\",\n content:\n \"We retain personal data only as long as necessary to fulfill the purposes outlined above. Contact form submissions are kept for up to 12 months before being deleted.\",\n },\n {\n title: \"Your Rights\",\n content:\n \"You have the right to access, correct, or delete your personal data at any time. To make a request, please reach out via our contact page and we will respond within 30 days.\",\n },\n {\n title: \"Changes to This Policy\",\n content:\n \"We may update this policy from time to time. Changes will be posted on this page with an updated effective date. Continued use of the site constitutes acceptance of the revised policy.\",\n },\n];\n\nexport const PrivacyPage = ({\n title = \"Privacy Policy\",\n effectiveDate = \"March 1, 2025\",\n introText = \"At Storied, we take your privacy seriously. This policy outlines what data we collect, how we use it, and your rights as a visitor to our site.\",\n sections = defaultSections,\n}: PrivacyPageProps) => {\n return (\n <motion.div\n initial={{ opacity: 1, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 1, y: -20 }}\n transition={{ duration: 0.3 }}\n className=\"sg:w-full\"\n >\n <Layout type=\"container\" className=\"sg:border-b sg:border-border\">\n <Layout.Col1 className=\"sg:py-16 sg:px-4 sg:text-center sg:mx-auto\">\n <Icon\n size=\"lg\"\n color=\"primary\"\n className=\"sg:mx-auto sg:mb-4\"\n icon=\"Shield\"\n />\n <Heading variant=\"h1\" className=\"sg:mb-3\">\n {title}\n </Heading>\n <Text foreground=\"muted-foreground\">Effective {effectiveDate}</Text>\n </Layout.Col1>\n </Layout>\n <Layout>\n <Layout.Col1 className=\"sg:py-16 sg:px-4\">\n <Text\n foreground=\"muted-foreground\"\n className=\"sg:leading-relaxed sg:mb-10\"\n >\n {introText}\n </Text>\n <Stack gap={8}>\n {sections.map((s, i) => (\n <div key={i}>\n <Heading variant=\"h3\" as=\"h2\" className=\"sg:mb-2\">\n {s.title}\n </Heading>\n <Text\n foreground=\"muted-foreground\"\n className=\"sg:leading-relaxed\"\n >\n {s.content}\n </Text>\n {i < sections.length - 1 && <Separator className=\"sg:mt-8\" />}\n </div>\n ))}\n </Stack>\n </Layout.Col1>\n </Layout>\n </motion.div>\n );\n};\n"],"mappings":";AAwEU,cASA,YATA;AAvEV,SAAS,cAAc;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAcP,MAAM,kBAA6B;AAAA,EACjC;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AACF;AAEO,MAAM,cAAc,CAAC;AAAA,EAC1B,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,WAAW;AACb,MAAwB;AACtB,SACE;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,MAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,MAC5B,MAAM,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,MAC3B,YAAY,EAAE,UAAU,IAAI;AAAA,MAC5B,WAAU;AAAA,MAEV;AAAA,4BAAC,UAAO,MAAK,aAAY,WAAU,gCACjC,+BAAC,OAAO,MAAP,EAAY,WAAU,8CACrB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAU;AAAA,cACV,MAAK;AAAA;AAAA,UACP;AAAA,UACA,oBAAC,WAAQ,SAAQ,MAAK,WAAU,WAC7B,iBACH;AAAA,UACA,qBAAC,QAAK,YAAW,oBAAmB;AAAA;AAAA,YAAW;AAAA,aAAc;AAAA,WAC/D,GACF;AAAA,QACA,oBAAC,UACC,+BAAC,OAAO,MAAP,EAAY,WAAU,oBACrB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,YAAW;AAAA,cACX,WAAU;AAAA,cAET;AAAA;AAAA,UACH;AAAA,UACA,oBAAC,SAAM,KAAK,GACT,mBAAS,IAAI,CAAC,GAAG,MAChB,qBAAC,SACC;AAAA,gCAAC,WAAQ,SAAQ,MAAK,IAAG,MAAK,WAAU,WACrC,YAAE,OACL;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,YAAW;AAAA,gBACX,WAAU;AAAA,gBAET,YAAE;AAAA;AAAA,YACL;AAAA,YACC,IAAI,SAAS,SAAS,KAAK,oBAAC,aAAU,WAAU,WAAU;AAAA,eAVnD,CAWV,CACD,GACH;AAAA,WACF,GACF;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -7,7 +7,7 @@ function ResourcesPage() {
|
|
|
7
7
|
return /* @__PURE__ */ jsx(Layout, { type: "col", className: "sg:py-16", children: /* @__PURE__ */ jsx(Layout.Col1, { hideDiv: true, className: "sg:max-w-3xl", children: /* @__PURE__ */ jsxs(
|
|
8
8
|
motion.div,
|
|
9
9
|
{
|
|
10
|
-
initial: { opacity:
|
|
10
|
+
initial: { opacity: 1, y: 20 },
|
|
11
11
|
animate: { opacity: 1, y: 0 },
|
|
12
12
|
transition: { duration: 0.3 },
|
|
13
13
|
children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/pages/resources/resources-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { Layout, Heading, Text } from \"../../primitives/index\";\r\nimport { Card, CardContent } from \"../../blocks/cards/card\";\r\n\r\nexport function ResourcesPage() {\r\n\treturn (\r\n\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t<Layout.Col1 hideDiv className=\"sg:max-w-3xl\">\r\n\t\t\t\t<motion.div\r\n\t\t\t\t\tinitial={{ opacity:
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/pages/resources/resources-page.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { Layout, Heading, Text } from \"../../primitives/index\";\r\nimport { Card, CardContent } from \"../../blocks/cards/card\";\r\n\r\nexport function ResourcesPage() {\r\n\treturn (\r\n\t\t<Layout type=\"col\" className=\"sg:py-16\">\r\n\t\t\t<Layout.Col1 hideDiv className=\"sg:max-w-3xl\">\r\n\t\t\t\t<motion.div\r\n\t\t\t\t\tinitial={{ opacity: 1, y: 20 }}\r\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\r\n\t\t\t\t\ttransition={{ duration: 0.3 }}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Heading variant=\"h1\" className=\"sg:mb-2\">\r\n\t\t\t\t\t\tResources\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Text foreground=\"muted-foreground\" className=\"sg:mb-10\">\r\n\t\t\t\t\t\tCurated links, tools, and references for creators.\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t\t<Card>\r\n\t\t\t\t\t\t<CardContent className=\"sg:py-8 sg:text-center\">\r\n\t\t\t\t\t\t\t<Text foreground=\"muted-foreground\">\r\n\t\t\t\t\t\t\t\tThis is a placeholder page. Content coming soon.\r\n\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t</CardContent>\r\n\t\t\t\t\t</Card>\r\n\t\t\t\t</motion.div>\r\n\t\t\t</Layout.Col1>\r\n\t\t</Layout>\r\n\t);\r\n}\r\n"],"mappings":";AAUI,SAKC,KALD;AARJ,SAAS,cAAc;AACvB,SAAS,QAAQ,SAAS,YAAY;AACtC,SAAS,MAAM,mBAAmB;AAE3B,SAAS,gBAAgB;AAC/B,SACC,oBAAC,UAAO,MAAK,OAAM,WAAU,YAC5B,8BAAC,OAAO,MAAP,EAAY,SAAO,MAAC,WAAU,gBAC9B;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACA,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,MAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,MAC5B,YAAY,EAAE,UAAU,IAAI;AAAA,MAE5B;AAAA,4BAAC,WAAQ,SAAQ,MAAK,WAAU,WAAU,uBAE1C;AAAA,QACA,oBAAC,QAAK,YAAW,oBAAmB,WAAU,YAAW,gEAEzD;AAAA,QACA,oBAAC,QACA,8BAAC,eAAY,WAAU,0BACtB,8BAAC,QAAK,YAAW,oBAAmB,8DAEpC,GACD,GACD;AAAA;AAAA;AAAA,EACD,GACD,GACD;AAEF;","names":[]}
|
|
@@ -44,9 +44,9 @@ const TermsPage = ({
|
|
|
44
44
|
return /* @__PURE__ */ jsxs(
|
|
45
45
|
motion.div,
|
|
46
46
|
{
|
|
47
|
-
initial: { opacity:
|
|
47
|
+
initial: { opacity: 1, y: 20 },
|
|
48
48
|
animate: { opacity: 1, y: 0 },
|
|
49
|
-
exit: { opacity:
|
|
49
|
+
exit: { opacity: 1, y: -20 },
|
|
50
50
|
transition: { duration: 0.3 },
|
|
51
51
|
className: "sg:w-full",
|
|
52
52
|
children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/pages/terms/terms-page.tsx"],"sourcesContent":["\"use client\";\nimport { motion } from \"framer-motion\";\nimport {\n Layout,\n Separator,\n Heading,\n Text,\n Icon,\n Stack,\n} from \"../../primitives/index\";\n\ninterface Section {\n title: string;\n content: string;\n}\n\ninterface TermsPageProps {\n title?: string;\n effectiveDate?: string;\n introText?: string;\n sections?: Section[];\n}\n\nconst defaultSections: Section[] = [\n {\n title: \"Acceptance of Terms\",\n content:\n \"By accessing and using Storied, you agree to be bound by these Terms of Service and all applicable laws and regulations. If you do not agree with any of these terms, please do not use our site.\",\n },\n {\n title: \"Use of Content\",\n content:\n \"All content published on Storied — including articles, images, and design elements — is protected by copyright. You may share links and short excerpts with proper attribution, but reproducing full articles without written permission is prohibited.\",\n },\n {\n title: \"User Contributions\",\n content:\n \"When submitting comments, messages, or other content through our site, you grant Storied a non-exclusive license to display and use that content in connection with our services. You are responsible for ensuring your contributions are lawful and respectful.\",\n },\n {\n title: \"Disclaimer\",\n content:\n \"Content on Storied is provided for informational and inspirational purposes only. We make no warranties regarding the accuracy, completeness, or reliability of any content. Use of the site is at your own risk.\",\n },\n {\n title: \"Limitation of Liability\",\n content:\n \"Storied and its contributors shall not be liable for any indirect, incidental, or consequential damages arising from the use of this website or reliance on its content.\",\n },\n {\n title: \"Modifications\",\n content:\n \"We reserve the right to modify these terms at any time. Updated terms will be posted on this page. Continued use of the site after changes constitutes acceptance of the new terms.\",\n },\n];\n\nexport const TermsPage = ({\n title = \"Terms of Service\",\n effectiveDate = \"March 1, 2025\",\n introText = \"Please read these terms carefully before using Storied. They govern your use of our website and content.\",\n sections = defaultSections,\n}: TermsPageProps) => {\n return (\n <motion.div\n initial={{ opacity:
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/pages/terms/terms-page.tsx"],"sourcesContent":["\"use client\";\nimport { motion } from \"framer-motion\";\nimport {\n Layout,\n Separator,\n Heading,\n Text,\n Icon,\n Stack,\n} from \"../../primitives/index\";\n\ninterface Section {\n title: string;\n content: string;\n}\n\ninterface TermsPageProps {\n title?: string;\n effectiveDate?: string;\n introText?: string;\n sections?: Section[];\n}\n\nconst defaultSections: Section[] = [\n {\n title: \"Acceptance of Terms\",\n content:\n \"By accessing and using Storied, you agree to be bound by these Terms of Service and all applicable laws and regulations. If you do not agree with any of these terms, please do not use our site.\",\n },\n {\n title: \"Use of Content\",\n content:\n \"All content published on Storied — including articles, images, and design elements — is protected by copyright. You may share links and short excerpts with proper attribution, but reproducing full articles without written permission is prohibited.\",\n },\n {\n title: \"User Contributions\",\n content:\n \"When submitting comments, messages, or other content through our site, you grant Storied a non-exclusive license to display and use that content in connection with our services. You are responsible for ensuring your contributions are lawful and respectful.\",\n },\n {\n title: \"Disclaimer\",\n content:\n \"Content on Storied is provided for informational and inspirational purposes only. We make no warranties regarding the accuracy, completeness, or reliability of any content. Use of the site is at your own risk.\",\n },\n {\n title: \"Limitation of Liability\",\n content:\n \"Storied and its contributors shall not be liable for any indirect, incidental, or consequential damages arising from the use of this website or reliance on its content.\",\n },\n {\n title: \"Modifications\",\n content:\n \"We reserve the right to modify these terms at any time. Updated terms will be posted on this page. Continued use of the site after changes constitutes acceptance of the new terms.\",\n },\n];\n\nexport const TermsPage = ({\n title = \"Terms of Service\",\n effectiveDate = \"March 1, 2025\",\n introText = \"Please read these terms carefully before using Storied. They govern your use of our website and content.\",\n sections = defaultSections,\n}: TermsPageProps) => {\n return (\n <motion.div\n initial={{ opacity: 1, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 1, y: -20 }}\n transition={{ duration: 0.3 }}\n className=\"sg:w-full\"\n >\n <Layout type=\"container\" className=\"sg:border-b sg:border-border\">\n <Layout.Col1 className=\"sg:py-16 sg:px-4 sg:text-center sg:mx-auto\">\n <Icon\n size=\"lg\"\n color=\"primary\"\n className=\"sg:mx-auto sg:mb-4\"\n icon=\"FileText\"\n />\n <Heading variant=\"h1\" className=\"sg:mb-3\">\n {title}\n </Heading>\n <Text foreground=\"muted-foreground\">Effective {effectiveDate}</Text>\n </Layout.Col1>\n </Layout>\n <Layout>\n <Layout.Col1 className=\"sg:py-16 sg:px-4\">\n <Text\n foreground=\"muted-foreground\"\n className=\"sg:leading-relaxed sg:mb-10\"\n >\n {introText}\n </Text>\n <Stack gap={8}>\n {sections.map((s, i) => (\n <div key={i}>\n <Heading variant=\"h3\" as=\"h2\" className=\"sg:mb-2\">\n {s.title}\n </Heading>\n <Text\n foreground=\"muted-foreground\"\n className=\"sg:leading-relaxed\"\n >\n {s.content}\n </Text>\n {i < sections.length - 1 && <Separator className=\"sg:mt-8\" />}\n </div>\n ))}\n </Stack>\n </Layout.Col1>\n </Layout>\n </motion.div>\n );\n};\n"],"mappings":";AAwEU,cASA,YATA;AAvEV,SAAS,cAAc;AACvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAcP,MAAM,kBAA6B;AAAA,EACjC;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,SACE;AAAA,EACJ;AACF;AAEO,MAAM,YAAY,CAAC;AAAA,EACxB,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,WAAW;AACb,MAAsB;AACpB,SACE;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,MAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE;AAAA,MAC5B,MAAM,EAAE,SAAS,GAAG,GAAG,IAAI;AAAA,MAC3B,YAAY,EAAE,UAAU,IAAI;AAAA,MAC5B,WAAU;AAAA,MAEV;AAAA,4BAAC,UAAO,MAAK,aAAY,WAAU,gCACjC,+BAAC,OAAO,MAAP,EAAY,WAAU,8CACrB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAU;AAAA,cACV,MAAK;AAAA;AAAA,UACP;AAAA,UACA,oBAAC,WAAQ,SAAQ,MAAK,WAAU,WAC7B,iBACH;AAAA,UACA,qBAAC,QAAK,YAAW,oBAAmB;AAAA;AAAA,YAAW;AAAA,aAAc;AAAA,WAC/D,GACF;AAAA,QACA,oBAAC,UACC,+BAAC,OAAO,MAAP,EAAY,WAAU,oBACrB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,YAAW;AAAA,cACX,WAAU;AAAA,cAET;AAAA;AAAA,UACH;AAAA,UACA,oBAAC,SAAM,KAAK,GACT,mBAAS,IAAI,CAAC,GAAG,MAChB,qBAAC,SACC;AAAA,gCAAC,WAAQ,SAAQ,MAAK,IAAG,MAAK,WAAU,WACrC,YAAE,OACL;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,YAAW;AAAA,gBACX,WAAU;AAAA,gBAET,YAAE;AAAA;AAAA,YACL;AAAA,YACC,IAAI,SAAS,SAAS,KAAK,oBAAC,aAAU,WAAU,WAAU;AAAA,eAVnD,CAWV,CACD,GACH;AAAA,WACF,GACF;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React$1 from 'react';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Styled native form wrapper with
|
|
4
|
+
* Styled native form wrapper with default vertical spacing. Override via `className`.
|
|
5
5
|
*/
|
|
6
6
|
declare function Form({ className, ...props }: React.ComponentProps<"form">): React$1.JSX.Element;
|
|
7
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/primitives/forms/form.tsx"],"sourcesContent":["import { cn } from \"../../../utils/index\";\r\n\r\n/**\r\n * Styled native form wrapper with
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/primitives/forms/form.tsx"],"sourcesContent":["import { cn } from \"../../../utils/index\";\r\n\r\n/**\r\n * Styled native form wrapper with default vertical spacing. Override via `className`.\r\n */\r\nfunction Form({ className, ...props }: React.ComponentProps<\"form\">) {\r\n return (\r\n <form\r\n data-slot=\"form\"\r\n className={cn(\"sg:flex sg:w-full sg:flex-col sg:gap-6\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\n/**\r\n * Horizontal row for primary and secondary form actions.\r\n */\r\nfunction FormActions({ className, ...props }: React.ComponentProps<\"div\">) {\r\n return (\r\n <div\r\n data-slot=\"form-actions\"\r\n className={cn(\r\n \"sg:flex sg:flex-wrap sg:items-center sg:gap-2\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport { Form, FormActions };\r\n"],"mappings":"AAOI;AAPJ,SAAS,UAAU;AAKnB,SAAS,KAAK,EAAE,WAAW,GAAG,MAAM,GAAiC;AACnE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,0CAA0C,SAAS;AAAA,MAChE,GAAG;AAAA;AAAA,EACN;AAEJ;AAKA,SAAS,YAAY,EAAE,WAAW,GAAG,MAAM,GAAgC;AACzE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
|