singularity-components 0.1.195 → 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/badges/category-badge.d.ts +11 -0
- package/dist/components/blocks/badges/category-badge.js +34 -0
- package/dist/components/blocks/badges/category-badge.js.map +1 -0
- package/dist/components/blocks/cards/blogpost-card.d.ts +3 -1
- package/dist/components/blocks/cards/blogpost-card.js +10 -5
- package/dist/components/blocks/cards/blogpost-card.js.map +1 -1
- package/dist/components/blocks/directory/author-card.d.ts +10 -0
- package/dist/components/blocks/directory/author-card.js +50 -0
- package/dist/components/blocks/directory/author-card.js.map +1 -0
- package/dist/components/blocks/directory/category-card.d.ts +10 -0
- package/dist/components/blocks/directory/category-card.js +27 -0
- package/dist/components/blocks/directory/category-card.js.map +1 -0
- package/dist/components/blocks/extras/extras-hub-card.d.ts +16 -0
- package/dist/components/blocks/extras/extras-hub-card.js +22 -0
- package/dist/components/blocks/extras/extras-hub-card.js.map +1 -0
- package/dist/components/blocks/gallery/image-gallery.d.ts +14 -0
- package/dist/components/blocks/gallery/image-gallery.js +211 -0
- package/dist/components/blocks/gallery/image-gallery.js.map +1 -0
- package/dist/components/blocks/index.d.ts +11 -0
- package/dist/components/blocks/index.js +10 -0
- package/dist/components/blocks/index.js.map +1 -1
- package/dist/components/blocks/loading/loading-skeletons.d.ts +15 -0
- package/dist/components/blocks/loading/loading-skeletons.js +78 -0
- package/dist/components/blocks/loading/loading-skeletons.js.map +1 -0
- package/dist/components/blocks/login/login.js +76 -47
- package/dist/components/blocks/login/login.js.map +1 -1
- package/dist/components/blocks/marketing/page-hero.d.ts +13 -0
- package/dist/components/blocks/marketing/page-hero.js +37 -0
- package/dist/components/blocks/marketing/page-hero.js.map +1 -0
- package/dist/components/blocks/marketing/stats-grid.d.ts +16 -0
- package/dist/components/blocks/marketing/stats-grid.js +30 -0
- package/dist/components/blocks/marketing/stats-grid.js.map +1 -0
- package/dist/components/blocks/marketing/timeline.d.ts +17 -0
- package/dist/components/blocks/marketing/timeline.js +46 -0
- package/dist/components/blocks/marketing/timeline.js.map +1 -0
- package/dist/components/blocks/marketing/values-grid.d.ts +16 -0
- package/dist/components/blocks/marketing/values-grid.js +29 -0
- package/dist/components/blocks/marketing/values-grid.js.map +1 -0
- 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/index.d.ts +28 -1
- package/dist/components/pages/about/about-page.d.ts +5 -0
- package/dist/components/pages/about/about-page.js +161 -0
- package/dist/components/pages/about/about-page.js.map +1 -0
- package/dist/components/pages/admin/admin-page.js +160 -103
- package/dist/components/pages/admin/admin-page.js.map +1 -1
- package/dist/components/pages/author/author-page.d.ts +8 -0
- package/dist/components/pages/author/author-page.js +107 -0
- package/dist/components/pages/author/author-page.js.map +1 -0
- package/dist/components/pages/authors/authors-page.d.ts +5 -0
- package/dist/components/pages/authors/authors-page.js +25 -0
- package/dist/components/pages/authors/authors-page.js.map +1 -0
- package/dist/components/pages/blogpost/blogpost.d.ts +4 -1
- package/dist/components/pages/blogpost/blogpost.js +110 -62
- package/dist/components/pages/blogpost/blogpost.js.map +1 -1
- package/dist/components/pages/categories/categories-page.d.ts +5 -0
- package/dist/components/pages/categories/categories-page.js +33 -0
- package/dist/components/pages/categories/categories-page.js.map +1 -0
- package/dist/components/pages/category/category-page.js +4 -2
- 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.d.ts +5 -0
- package/dist/components/pages/contact/contact-page.js +180 -0
- package/dist/components/pages/contact/contact-page.js.map +1 -0
- package/dist/components/pages/content-blocks/content-blocks-page.d.ts +5 -0
- package/dist/components/pages/content-blocks/content-blocks-page.js +87 -0
- package/dist/components/pages/content-blocks/content-blocks-page.js.map +1 -0
- package/dist/components/pages/extras/extras-hub-page.d.ts +10 -0
- package/dist/components/pages/extras/extras-hub-page.js +110 -0
- package/dist/components/pages/extras/extras-hub-page.js.map +1 -0
- package/dist/components/pages/index.d.ts +14 -0
- package/dist/components/pages/index.js +12 -0
- package/dist/components/pages/index.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.d.ts +5 -0
- package/dist/components/pages/membership/membership-page.js +131 -0
- package/dist/components/pages/membership/membership-page.js.map +1 -0
- package/dist/components/pages/mosaic/mosaic-page.d.ts +5 -0
- package/dist/components/pages/mosaic/mosaic-page.js +81 -0
- package/dist/components/pages/mosaic/mosaic-page.js.map +1 -0
- package/dist/components/pages/newsletter/newsletter-page.d.ts +5 -0
- package/dist/components/pages/newsletter/newsletter-page.js +165 -0
- package/dist/components/pages/newsletter/newsletter-page.js.map +1 -0
- 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.d.ts +5 -0
- package/dist/components/pages/resources/resources-page.js +24 -0
- package/dist/components/pages/resources/resources-page.js.map +1 -0
- package/dist/components/pages/startpage/startpage.js +6 -4
- package/dist/components/pages/startpage/startpage.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/accordion/accordion.js +14 -16
- package/dist/components/primitives/accordion/accordion.js.map +1 -1
- package/dist/components/primitives/badge/badge.js +1 -1
- package/dist/components/primitives/badge/badge.js.map +1 -1
- package/dist/components/primitives/buttons/button.d.ts +2 -2
- package/dist/components/primitives/buttons/icon-button.d.ts +1 -1
- package/dist/components/primitives/collapsible/collapsible.js +4 -1
- package/dist/components/primitives/collapsible/collapsible.js.map +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu.js +6 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu.js.map +1 -1
- package/dist/components/primitives/forms/checkbox.js +1 -1
- package/dist/components/primitives/forms/checkbox.js.map +1 -1
- package/dist/components/primitives/forms/field.d.ts +4 -2
- package/dist/components/primitives/forms/field.js +4 -2
- package/dist/components/primitives/forms/field.js.map +1 -1
- package/dist/components/primitives/forms/form-control.d.ts +28 -0
- package/dist/components/primitives/forms/form-control.js +40 -0
- package/dist/components/primitives/forms/form-control.js.map +1 -0
- package/dist/components/primitives/forms/form.d.ts +12 -0
- package/dist/components/primitives/forms/form.js +30 -0
- package/dist/components/primitives/forms/form.js.map +1 -0
- package/dist/components/primitives/forms/select.js +12 -12
- package/dist/components/primitives/forms/select.js.map +1 -1
- package/dist/components/primitives/icon/icon.d.ts +3 -2
- package/dist/components/primitives/icon/icon.js +2 -1
- package/dist/components/primitives/icon/icon.js.map +1 -1
- package/dist/components/primitives/index.d.ts +4 -0
- package/dist/components/primitives/index.js +3 -0
- package/dist/components/primitives/index.js.map +1 -1
- package/dist/components/primitives/layout/layout.d.ts +1 -1
- package/dist/components/primitives/link/link.d.ts +2 -2
- package/dist/components/primitives/sheet/sheet.js +1 -1
- package/dist/components/primitives/sheet/sheet.js.map +1 -1
- package/dist/components/primitives/stack/stack.d.ts +2 -2
- package/dist/components/primitives/text/internal/text-element.d.ts +8 -2
- package/dist/components/primitives/text/internal/text-element.js +3 -0
- package/dist/components/primitives/text/internal/text-element.js.map +1 -1
- package/dist/components/primitives/text/text-code.d.ts +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/index.d.ts +1 -0
- package/dist/components/templates/index.js +1 -0
- package/dist/components/templates/index.js.map +1 -1
- package/dist/components/templates/loading-screen/loading-screen.d.ts +10 -0
- package/dist/components/templates/loading-screen/loading-screen.js +39 -0
- package/dist/components/templates/loading-screen/loading-screen.js.map +1 -0
- package/dist/css/variables.css +6 -3
- package/dist/css/variables.css.map +1 -1
- package/dist/data/posts.d.ts +5 -0
- package/dist/data/posts.js +41 -8
- package/dist/data/posts.js.map +1 -1
- package/dist/index.d.ts +28 -1
- package/dist/lib/forms/field-props.d.ts +60 -0
- package/dist/lib/forms/field-props.js +60 -0
- package/dist/lib/forms/field-props.js.map +1 -0
- package/dist/lib/forms/index.d.ts +11 -0
- package/dist/lib/forms/index.js +3 -0
- package/dist/lib/forms/index.js.map +1 -0
- package/dist/lib/forms/tanstack-field.d.ts +71 -0
- package/dist/lib/forms/tanstack-field.js +121 -0
- package/dist/lib/forms/tanstack-field.js.map +1 -0
- package/dist/lib/index.d.ts +11 -0
- package/dist/lib/index.js +1 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/main.css +393 -90
- package/dist/main.css.map +1 -1
- package/package.json +30 -23
package/dist/data/posts.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const posts = [
|
|
2
2
|
{
|
|
3
3
|
id: 1,
|
|
4
|
+
slug: "the-art-of-slow-living",
|
|
4
5
|
title: "The Art of Slow Living",
|
|
5
6
|
excerpt: "In a world that never stops moving, there's a quiet revolution happening \u2014 one that asks us to pause, breathe, and savor.",
|
|
6
7
|
content: `In a world that never stops moving, there's a quiet revolution happening \u2014 one that asks us to pause, breathe, and savor the moments that make up our days.
|
|
@@ -23,10 +24,20 @@ The beauty of slow living is that it doesn't require a complete lifestyle overha
|
|
|
23
24
|
originalImage: "https://images.unsplash.com/photo-1506744038136-46273834b3fb?w=800&h=500&fit=crop",
|
|
24
25
|
date: "2026-02-01",
|
|
25
26
|
author: "Elena Marsh",
|
|
26
|
-
categories: ["Mindfulness"]
|
|
27
|
+
categories: ["Mindfulness"],
|
|
28
|
+
featured: true,
|
|
29
|
+
gallery: [
|
|
30
|
+
{ src: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800&h=600&fit=crop", alt: "Mountain lake at dawn" },
|
|
31
|
+
{ src: "https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=800&h=600&fit=crop", alt: "Foggy forest path" },
|
|
32
|
+
{ src: "https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=800&h=600&fit=crop", alt: "Sunlit woodland" },
|
|
33
|
+
{ src: "https://images.unsplash.com/photo-1465146344425-f00d5f5c8f07?w=800&h=600&fit=crop", alt: "Wildflowers in a field" },
|
|
34
|
+
{ src: "https://images.unsplash.com/photo-1501854140801-50d01698950b?w=800&h=600&fit=crop", alt: "Aerial view of green hills" },
|
|
35
|
+
{ src: "https://images.unsplash.com/photo-1472214103451-9374bd1c798e?w=800&h=600&fit=crop", alt: "Valley at sunset" }
|
|
36
|
+
]
|
|
27
37
|
},
|
|
28
38
|
{
|
|
29
39
|
id: 2,
|
|
40
|
+
slug: "designing-with-intention",
|
|
30
41
|
title: "Designing with Intention",
|
|
31
42
|
excerpt: "Good design isn't decoration \u2014 it's communication. Every color, typeface, and pixel should earn its place.",
|
|
32
43
|
content: `Good design isn't decoration \u2014 it's communication. Every color, typeface, and pixel should earn its place on the page.
|
|
@@ -46,14 +57,16 @@ The beauty of slow living is that it doesn't require a complete lifestyle overha
|
|
|
46
57
|
Your typeface choices are the voice of your brand. A serif display font like Playfair Display brings elegance and editorial authority. Paired with a clean sans-serif for body text, it creates a hierarchy that guides the reader effortlessly.
|
|
47
58
|
|
|
48
59
|
Design with intention means every element serves the whole.`,
|
|
49
|
-
primaryImage: "https://images.unsplash.com/photo-
|
|
50
|
-
originalImage: "https://images.unsplash.com/photo-
|
|
60
|
+
primaryImage: "https://images.unsplash.com/photo-1561070791-2526d30994b5?w=800&h=500&fit=crop",
|
|
61
|
+
originalImage: "https://images.unsplash.com/photo-1561070791-2526d30994b5?w=800&h=500&fit=crop",
|
|
51
62
|
date: "2026-01-28",
|
|
52
63
|
author: "Elena Marsh",
|
|
53
|
-
categories: ["Design"]
|
|
64
|
+
categories: ["Design"],
|
|
65
|
+
featured: true
|
|
54
66
|
},
|
|
55
67
|
{
|
|
56
68
|
id: 3,
|
|
69
|
+
slug: "morning-rituals-around-the-world",
|
|
57
70
|
title: "Morning Rituals Around the World",
|
|
58
71
|
excerpt: "From Japanese tea ceremonies to Scandinavian fika, how different cultures start their day reveals what they value most.",
|
|
59
72
|
content: `From Japanese tea ceremonies to Scandinavian fika, how different cultures start their day reveals what they value most.
|
|
@@ -79,10 +92,18 @@ These rituals remind us that how we begin our day shapes everything that follows
|
|
|
79
92
|
originalImage: "https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=800&h=500&fit=crop",
|
|
80
93
|
date: "2026-01-20",
|
|
81
94
|
author: "Elena Marsh",
|
|
82
|
-
categories: ["Culture"]
|
|
95
|
+
categories: ["Culture"],
|
|
96
|
+
featured: true,
|
|
97
|
+
gallery: [
|
|
98
|
+
{ src: "https://images.unsplash.com/photo-1545569341-9eb8b30979d9?w=800&h=600&fit=crop", alt: "Japanese temple garden" },
|
|
99
|
+
{ src: "https://images.unsplash.com/photo-1493976040374-85c8e12f0c0e?w=800&h=600&fit=crop", alt: "Traditional tea ceremony" },
|
|
100
|
+
{ src: "https://images.unsplash.com/photo-1504754524776-8f4f37790ca0?w=800&h=600&fit=crop", alt: "Breakfast spread" },
|
|
101
|
+
{ src: "https://images.unsplash.com/photo-1514933651103-005eec06c04b?w=800&h=600&fit=crop", alt: "Italian espresso bar" }
|
|
102
|
+
]
|
|
83
103
|
},
|
|
84
104
|
{
|
|
85
105
|
id: 4,
|
|
106
|
+
slug: "the-beauty-of-imperfection",
|
|
86
107
|
title: "The Beauty of Imperfection",
|
|
87
108
|
excerpt: "Wabi-sabi teaches us to find beauty in the worn, the weathered, and the wonderfully imperfect.",
|
|
88
109
|
content: `Wabi-sabi teaches us to find beauty in the worn, the weathered, and the wonderfully imperfect.
|
|
@@ -100,14 +121,20 @@ Wabi refers to a rustic simplicity, a quiet contentment. Sabi refers to the beau
|
|
|
100
121
|
- **In yourself:** Embrace your quirks \u2014 they're what make you interesting.
|
|
101
122
|
|
|
102
123
|
The cracked pot, the faded photograph, the well-worn book \u2014 these carry stories that perfection never could.`,
|
|
103
|
-
primaryImage: "https://images.unsplash.com/photo-
|
|
104
|
-
originalImage: "https://images.unsplash.com/photo-
|
|
124
|
+
primaryImage: "https://images.unsplash.com/photo-1578749556568-bc2c40e68b61?w=800&h=500&fit=crop",
|
|
125
|
+
originalImage: "https://images.unsplash.com/photo-1578749556568-bc2c40e68b61?w=800&h=500&fit=crop",
|
|
105
126
|
date: "2026-01-15",
|
|
106
127
|
author: "Elena Marsh",
|
|
107
|
-
categories: ["Philosophy"]
|
|
128
|
+
categories: ["Philosophy"],
|
|
129
|
+
gallery: [
|
|
130
|
+
{ src: "https://images.unsplash.com/photo-1528297506728-9533d2ac3fa4?w=800&h=600&fit=crop", alt: "Handmade ceramic bowl" },
|
|
131
|
+
{ src: "https://images.unsplash.com/photo-1565193566173-7a0ee3dbe261?w=800&h=600&fit=crop", alt: "Cracked pottery with gold" },
|
|
132
|
+
{ src: "https://images.unsplash.com/photo-1493106641515-6b5631de4bb9?w=800&h=600&fit=crop", alt: "Worn wooden texture" }
|
|
133
|
+
]
|
|
108
134
|
},
|
|
109
135
|
{
|
|
110
136
|
id: 5,
|
|
137
|
+
slug: "building-a-reading-habit",
|
|
111
138
|
title: "Building a Reading Habit",
|
|
112
139
|
excerpt: "Reading more doesn't require willpower \u2014 it requires environment design and a bit of curiosity.",
|
|
113
140
|
content: `Reading more doesn't require willpower \u2014 it requires environment design and a bit of curiosity.
|
|
@@ -137,6 +164,7 @@ The goal isn't to read more books. It's to enjoy reading again.`,
|
|
|
137
164
|
},
|
|
138
165
|
{
|
|
139
166
|
id: 6,
|
|
167
|
+
slug: "color-in-everyday-life",
|
|
140
168
|
title: "Color in Everyday Life",
|
|
141
169
|
excerpt: "We rarely notice it, but color shapes our moods, decisions, and memories more than we realize.",
|
|
142
170
|
content: `We rarely notice it, but color shapes our moods, decisions, and memories more than we realize.
|
|
@@ -164,6 +192,7 @@ Notice the colors around you today. The golden light of morning. The deep green
|
|
|
164
192
|
},
|
|
165
193
|
{
|
|
166
194
|
id: 7,
|
|
195
|
+
slug: "the-power-of-walking",
|
|
167
196
|
title: "The Power of Walking",
|
|
168
197
|
excerpt: "A daily walk is the most underrated tool for creativity, clarity, and calm.",
|
|
169
198
|
content: `Walking is humanity's oldest form of movement \u2014 and still one of its most powerful. Great thinkers from Aristotle to Steve Jobs were known for their walking meetings and strolls.
|
|
@@ -183,6 +212,7 @@ You don't need a trail or a destination. A 20-minute loop around your neighborho
|
|
|
183
212
|
},
|
|
184
213
|
{
|
|
185
214
|
id: 8,
|
|
215
|
+
slug: "minimalism-beyond-aesthetics",
|
|
186
216
|
title: "Minimalism Beyond Aesthetics",
|
|
187
217
|
excerpt: "True minimalism isn't about owning less \u2014 it's about making room for what matters.",
|
|
188
218
|
content: `Minimalism has been reduced to white walls and empty shelves. But the philosophy runs much deeper than aesthetics.
|
|
@@ -202,6 +232,7 @@ Our phones hold more clutter than our homes. Audit your apps, notifications, and
|
|
|
202
232
|
},
|
|
203
233
|
{
|
|
204
234
|
id: 9,
|
|
235
|
+
slug: "the-lost-art-of-letter-writing",
|
|
205
236
|
title: "The Lost Art of Letter Writing",
|
|
206
237
|
excerpt: "In an age of instant messaging, a handwritten letter carries a weight that no text can match.",
|
|
207
238
|
content: `There's something irreplaceable about receiving a handwritten letter. The texture of the paper, the imperfections of the handwriting, the knowledge that someone sat down and gave you their time.
|
|
@@ -221,6 +252,7 @@ Buy a simple set of stationery. Write to someone you care about. It doesn't need
|
|
|
221
252
|
},
|
|
222
253
|
{
|
|
223
254
|
id: 10,
|
|
255
|
+
slug: "cooking-as-meditation",
|
|
224
256
|
title: "Cooking as Meditation",
|
|
225
257
|
excerpt: "The kitchen can be your sanctuary \u2014 if you let the process matter more than the result.",
|
|
226
258
|
content: `We often think of cooking as a chore \u2014 something to get through before we can eat. But approached differently, it becomes a meditative practice.
|
|
@@ -240,6 +272,7 @@ Start with a recipe you love. Prep all your ingredients before you begin. Put on
|
|
|
240
272
|
},
|
|
241
273
|
{
|
|
242
274
|
id: 11,
|
|
275
|
+
slug: "digital-detox-weekend",
|
|
243
276
|
title: "The Digital Detox Weekend",
|
|
244
277
|
excerpt: "48 hours without screens sounds terrifying \u2014 until you try it and realize how much you've been missing.",
|
|
245
278
|
content: `A digital detox weekend isn't about hating technology. It's about remembering what life feels like without constant input.
|
package/dist/data/posts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/data/posts.ts"],"sourcesContent":["export interface BlogPost {\r\n id: number;\r\n title: string;\r\n excerpt: string;\r\n content: string;\r\n primaryImage: string;\r\n originalImage: string;\r\n date: string;\r\n author: string;\r\n featured?: boolean;\r\n categories: string[];\r\n}\r\n\r\nexport interface Comment {\r\n id: string;\r\n author: string;\r\n text: string;\r\n date: string;\r\n}\r\n\r\nexport const posts: BlogPost[] = [\r\n {\r\n id: 1,\r\n title: \"The Art of Slow Living\",\r\n excerpt:\r\n \"In a world that never stops moving, there's a quiet revolution happening — one that asks us to pause, breathe, and savor.\",\r\n content: `In a world that never stops moving, there's a quiet revolution happening — one that asks us to pause, breathe, and savor the moments that make up our days.\r\n\r\nSlow living isn't about doing everything at a snail's pace. It's about being intentional with your time, choosing quality over quantity, and finding joy in the everyday. Whether it's brewing a cup of tea with care, taking a longer route through the park, or simply sitting with your thoughts — these small acts of presence add up.\r\n\r\n## Why Slow Down?\r\n\r\nResearch consistently shows that chronic busyness leads to burnout, anxiety, and a diminished sense of well-being. When we rush through life, we miss the textures, flavors, and connections that give it meaning.\r\n\r\n## Practical Steps\r\n\r\n1. **Start your morning without screens.** Give yourself 30 minutes before checking notifications.\r\n2. **Cook one meal from scratch each week.** The process itself becomes meditative.\r\n3. **Single-task.** Give your full attention to one thing at a time.\r\n4. **Spend time in nature.** Even 15 minutes outdoors can reset your nervous system.\r\n\r\nThe beauty of slow living is that it doesn't require a complete lifestyle overhaul. It begins with a single choice to be present.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1506744038136-46273834b3fb?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1506744038136-46273834b3fb?w=800&h=500&fit=crop\",\r\n date: \"2026-02-01\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Mindfulness\"],\r\n },\r\n {\r\n id: 2,\r\n title: \"Designing with Intention\",\r\n excerpt:\r\n \"Good design isn't decoration — it's communication. Every color, typeface, and pixel should earn its place.\",\r\n content: `Good design isn't decoration — it's communication. Every color, typeface, and pixel should earn its place on the page.\r\n\r\n When we design with intention, we start by asking questions: Who is this for? What should they feel? What action should they take? The answers shape every decision, from the warmth of a color palette to the weight of a heading.\r\n\r\n ## The Role of Constraints\r\n\r\n Constraints are a designer's best friend. A limited palette forces creativity. A strict grid creates rhythm. When everything is possible, nothing stands out.\r\n\r\n ## Color as Emotion\r\n\r\n Colors carry meaning. Warm terracottas evoke trust and earthiness. Golds suggest warmth and optimism. The combination tells a story before a single word is read.\r\n\r\n ## Typography as Voice\r\n\r\n Your typeface choices are the voice of your brand. A serif display font like Playfair Display brings elegance and editorial authority. Paired with a clean sans-serif for body text, it creates a hierarchy that guides the reader effortlessly.\r\n\r\n Design with intention means every element serves the whole.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1558618666-fcd25c85f82e?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1558618666-fcd25c85f82e?w=800&h=500&fit=crop\",\r\n date: \"2026-01-28\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Design\"],\r\n },\r\n {\r\n id: 3,\r\n title: \"Morning Rituals Around the World\",\r\n excerpt:\r\n \"From Japanese tea ceremonies to Scandinavian fika, how different cultures start their day reveals what they value most.\",\r\n content: `From Japanese tea ceremonies to Scandinavian fika, how different cultures start their day reveals what they value most.\r\n\r\n## Japan: The Way of Tea\r\n\r\nIn Japan, the morning tea ceremony is a practice of mindfulness. Each movement is deliberate, each moment savored. It's not about the tea — it's about presence.\r\n\r\n## Scandinavia: Fika\r\n\r\nThe Swedish tradition of fika — a coffee break with pastries — is less about caffeine and more about connection. It's a built-in pause in the day to share conversation with friends or colleagues.\r\n\r\n## India: Yoga and Chai\r\n\r\nIn many Indian households, the morning begins with yoga or meditation, followed by a cup of spiced chai. The combination of movement and warmth prepares both body and mind for the day ahead.\r\n\r\n## Italy: The Standing Espresso\r\n\r\nIt Indians take their morning espresso standing at the bar — a quick, intense ritual that's social and efficient. It's a moment of shared energy before the day begins.\r\n\r\nThese rituals remind us that how we begin our day shapes everything that follows.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=800&h=500&fit=crop\",\r\n date: \"2026-01-20\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Culture\"],\r\n },\r\n {\r\n id: 4,\r\n title: \"The Beauty of Imperfection\",\r\n excerpt:\r\n \"Wabi-sabi teaches us to find beauty in the worn, the weathered, and the wonderfully imperfect.\",\r\n content: `Wabi-sabi teaches us to find beauty in the worn, the weathered, and the wonderfully imperfect.\r\n\r\nIn a culture obsessed with perfection — flawless skin, pixel-perfect designs, curated feeds — wabi-sabi offers a radical alternative. This Japanese aesthetic philosophy finds beauty in impermanence, incompleteness, and imperfection.\r\n\r\n## What is Wabi-Sabi?\r\n\r\nWabi refers to a rustic simplicity, a quiet contentment. Sabi refers to the beauty that comes with age and wear. Together, they describe an aesthetic that values the authentic over the polished.\r\n\r\n## Applying Wabi-Sabi\r\n\r\n- **In your home:** Choose handmade ceramics over mass-produced perfection.\r\n- **In your work:** Ship the good-enough version rather than waiting for perfect.\r\n- **In yourself:** Embrace your quirks — they're what make you interesting.\r\n\r\nThe cracked pot, the faded photograph, the well-worn book — these carry stories that perfection never could.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1493106819501-66d381c466f3?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1493106819501-66d381c466f3?w=800&h=500&fit=crop\",\r\n date: \"2026-01-15\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Philosophy\"],\r\n },\r\n {\r\n id: 5,\r\n title: \"Building a Reading Habit\",\r\n excerpt:\r\n \"Reading more doesn't require willpower — it requires environment design and a bit of curiosity.\",\r\n content: `Reading more doesn't require willpower — it requires environment design and a bit of curiosity.\r\n\r\nMost people who say they want to read more are really saying they want to scroll less. The solution isn't discipline — it's making reading the easier choice.\r\n\r\n## Environment Design\r\n\r\n1. **Keep a book visible.** On your nightstand, your desk, your bag.\r\n2. **Remove friction.** If you read on a Kindle, keep it charged and accessible.\r\n3. **Create a reading nook.** A comfortable chair with good light signals \"this is where I read.\"\r\n\r\n## The Two-Page Rule\r\n\r\nDon't commit to a chapter. Commit to two pages. Most nights, you'll keep going. On the nights you don't, you've still read two pages more than zero.\r\n\r\n## Follow Your Curiosity\r\n\r\nAbandon books that bore you. Life is too short for obligatory reading. Follow what fascinates you, even if it's \"not serious enough.\"\r\n\r\nThe goal isn't to read more books. It's to enjoy reading again.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1512820790803-83ca734da794?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1512820790803-83ca734da794?w=800&h=500&fit=crop\",\r\n date: \"2026-01-10\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Habits\"],\r\n },\r\n {\r\n id: 6,\r\n title: \"Color in Everyday Life\",\r\n excerpt:\r\n \"We rarely notice it, but color shapes our moods, decisions, and memories more than we realize.\",\r\n content: `We rarely notice it, but color shapes our moods, decisions, and memories more than we realize.\r\n\r\nThink about the last time a sunset stopped you in your tracks, or a room felt inexplicably cozy. Chances are, color was doing the heavy lifting.\r\n\r\n## The Psychology of Color\r\n\r\n- **Warm colors** (reds, oranges, yellows) increase energy and appetite. Restaurants use them for a reason.\r\n- **Cool colors** (blues, greens) promote calm and focus. Think hospitals and meditation apps.\r\n- **Neutrals** create breathing room. They let other elements — and people — take center stage.\r\n\r\n## Color in Design\r\n\r\nA well-chosen color palette does more than look good. It creates hierarchy, draws attention, and establishes mood — all before a user reads a single word.\r\n\r\n## Your Daily Palette\r\n\r\nNotice the colors around you today. The golden light of morning. The deep green of a houseplant. The warm brown of your coffee. These aren't accidents — they're the palette of your life.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1525909002-1b05e0c869d8?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1525909002-1b05e0c869d8?w=800&h=500&fit=crop\",\r\n date: \"2026-01-05\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Design\"],\r\n },\r\n {\r\n id: 7,\r\n title: \"The Power of Walking\",\r\n excerpt:\r\n \"A daily walk is the most underrated tool for creativity, clarity, and calm.\",\r\n content: `Walking is humanity's oldest form of movement — and still one of its most powerful. Great thinkers from Aristotle to Steve Jobs were known for their walking meetings and strolls.\r\n\r\n## Why Walking Works\r\n\r\nWalking increases blood flow to the brain, boosts creative thinking by up to 60%, and reduces cortisol levels. It's exercise, meditation, and brainstorming rolled into one.\r\n\r\n## Making It a Practice\r\n\r\nYou don't need a trail or a destination. A 20-minute loop around your neighborhood is enough. Leave your phone behind — or at least keep it in your pocket.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1476480862126-209bfaa8edc8?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1476480862126-209bfaa8edc8?w=800&h=500&fit=crop\",\r\n date: \"2026-01-02\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Health\"],\r\n },\r\n {\r\n id: 8,\r\n title: \"Minimalism Beyond Aesthetics\",\r\n excerpt:\r\n \"True minimalism isn't about owning less — it's about making room for what matters.\",\r\n content: `Minimalism has been reduced to white walls and empty shelves. But the philosophy runs much deeper than aesthetics.\r\n\r\n## The Core Idea\r\n\r\nMinimalism asks one question: does this add value to my life? Apply it to your schedule, your relationships, your commitments — not just your closet.\r\n\r\n## Digital Minimalism\r\n\r\nOur phones hold more clutter than our homes. Audit your apps, notifications, and subscriptions. Keep only what serves you.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1494438639946-1ebd1d20bf85?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1494438639946-1ebd1d20bf85?w=800&h=500&fit=crop\",\r\n date: \"2025-12-28\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Lifestyle\"],\r\n },\r\n {\r\n id: 9,\r\n title: \"The Lost Art of Letter Writing\",\r\n excerpt:\r\n \"In an age of instant messaging, a handwritten letter carries a weight that no text can match.\",\r\n content: `There's something irreplaceable about receiving a handwritten letter. The texture of the paper, the imperfections of the handwriting, the knowledge that someone sat down and gave you their time.\r\n\r\n## Why Write Letters\r\n\r\nLetters slow us down. They force us to organize our thoughts, choose our words carefully, and express ourselves with intention.\r\n\r\n## Getting Started\r\n\r\nBuy a simple set of stationery. Write to someone you care about. It doesn't need to be long — even a few heartfelt lines will mean the world.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1517971071642-34a2d3ecc9cd?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1517971071642-34a2d3ecc9cd?w=800&h=500&fit=crop\",\r\n date: \"2025-12-20\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Connection\"],\r\n },\r\n {\r\n id: 10,\r\n title: \"Cooking as Meditation\",\r\n excerpt:\r\n \"The kitchen can be your sanctuary — if you let the process matter more than the result.\",\r\n content: `We often think of cooking as a chore — something to get through before we can eat. But approached differently, it becomes a meditative practice.\r\n\r\n## The Mindful Kitchen\r\n\r\nFocus on the sounds: the sizzle of oil, the chop of a knife, the bubble of a simmer. Engage your senses fully and the kitchen becomes a place of calm.\r\n\r\n## Simple Rituals\r\n\r\nStart with a recipe you love. Prep all your ingredients before you begin. Put on music. Pour yourself a drink. Let the process be the point.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1556909114-f6e7ad7d3136?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1556909114-f6e7ad7d3136?w=800&h=500&fit=crop\",\r\n date: \"2025-12-15\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Mindfulness\"],\r\n },\r\n {\r\n id: 11,\r\n title: \"The Digital Detox Weekend\",\r\n excerpt:\r\n \"48 hours without screens sounds terrifying — until you try it and realize how much you've been missing.\",\r\n content: `A digital detox weekend isn't about hating technology. It's about remembering what life feels like without constant input.\r\n\r\n## The Rules\r\n\r\nNo phone, no laptop, no tablet for 48 hours. Use a paper map, a physical book, an alarm clock. Tell people in advance so they don't worry.\r\n\r\n## What You'll Discover\r\n\r\nBoredom arrives first — then creativity. You'll notice birdsong, have longer conversations, and sleep better than you have in months.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1528297506728-9533d2ac3fa4?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1528297506728-9533d2ac3fa4?w=800&h=500&fit=crop\",\r\n date: \"2025-12-10\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Well-being\"],\r\n },\r\n];\r\n\r\nexport const mockComments: Comment[] = [\r\n {\r\n id: \"1\",\r\n author: \"Reader One\",\r\n text: \"This really resonated with me. Thank you for sharing.\",\r\n date: \"2026-02-02\",\r\n },\r\n {\r\n id: \"2\",\r\n author: \"Curious Mind\",\r\n text: \"I've been trying to slow down lately — this gave me some great ideas.\",\r\n date: \"2026-02-03\",\r\n },\r\n {\r\n id: \"3\",\r\n author: \"Design Fan\",\r\n text: \"Beautiful writing and perspective. More of this please!\",\r\n date: \"2026-02-05\",\r\n },\r\n];\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/data/posts.ts"],"sourcesContent":["export interface BlogPost {\r\n id: number;\r\n slug: string;\r\n title: string;\r\n excerpt: string;\r\n content: string;\r\n primaryImage: string;\r\n originalImage: string;\r\n date: string;\r\n author: string;\r\n featured?: boolean;\r\n categories: string[];\r\n gallery?: { src: string; alt?: string }[];\r\n}\r\n\r\nexport interface Comment {\r\n id: string;\r\n author: string;\r\n text: string;\r\n date: string;\r\n}\r\n\r\nexport const posts: BlogPost[] = [\r\n {\r\n id: 1,\r\n slug: \"the-art-of-slow-living\",\r\n title: \"The Art of Slow Living\",\r\n excerpt:\r\n \"In a world that never stops moving, there's a quiet revolution happening — one that asks us to pause, breathe, and savor.\",\r\n content: `In a world that never stops moving, there's a quiet revolution happening — one that asks us to pause, breathe, and savor the moments that make up our days.\r\n\r\nSlow living isn't about doing everything at a snail's pace. It's about being intentional with your time, choosing quality over quantity, and finding joy in the everyday. Whether it's brewing a cup of tea with care, taking a longer route through the park, or simply sitting with your thoughts — these small acts of presence add up.\r\n\r\n## Why Slow Down?\r\n\r\nResearch consistently shows that chronic busyness leads to burnout, anxiety, and a diminished sense of well-being. When we rush through life, we miss the textures, flavors, and connections that give it meaning.\r\n\r\n## Practical Steps\r\n\r\n1. **Start your morning without screens.** Give yourself 30 minutes before checking notifications.\r\n2. **Cook one meal from scratch each week.** The process itself becomes meditative.\r\n3. **Single-task.** Give your full attention to one thing at a time.\r\n4. **Spend time in nature.** Even 15 minutes outdoors can reset your nervous system.\r\n\r\nThe beauty of slow living is that it doesn't require a complete lifestyle overhaul. It begins with a single choice to be present.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1506744038136-46273834b3fb?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1506744038136-46273834b3fb?w=800&h=500&fit=crop\",\r\n date: \"2026-02-01\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Mindfulness\"],\r\n featured: true,\r\n gallery: [\r\n { src: \"https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800&h=600&fit=crop\", alt: \"Mountain lake at dawn\" },\r\n { src: \"https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=800&h=600&fit=crop\", alt: \"Foggy forest path\" },\r\n { src: \"https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=800&h=600&fit=crop\", alt: \"Sunlit woodland\" },\r\n { src: \"https://images.unsplash.com/photo-1465146344425-f00d5f5c8f07?w=800&h=600&fit=crop\", alt: \"Wildflowers in a field\" },\r\n { src: \"https://images.unsplash.com/photo-1501854140801-50d01698950b?w=800&h=600&fit=crop\", alt: \"Aerial view of green hills\" },\r\n { src: \"https://images.unsplash.com/photo-1472214103451-9374bd1c798e?w=800&h=600&fit=crop\", alt: \"Valley at sunset\" },\r\n ],\r\n },\r\n {\r\n id: 2,\r\n slug: \"designing-with-intention\",\r\n title: \"Designing with Intention\",\r\n excerpt:\r\n \"Good design isn't decoration — it's communication. Every color, typeface, and pixel should earn its place.\",\r\n content: `Good design isn't decoration — it's communication. Every color, typeface, and pixel should earn its place on the page.\r\n\r\n When we design with intention, we start by asking questions: Who is this for? What should they feel? What action should they take? The answers shape every decision, from the warmth of a color palette to the weight of a heading.\r\n\r\n ## The Role of Constraints\r\n\r\n Constraints are a designer's best friend. A limited palette forces creativity. A strict grid creates rhythm. When everything is possible, nothing stands out.\r\n\r\n ## Color as Emotion\r\n\r\n Colors carry meaning. Warm terracottas evoke trust and earthiness. Golds suggest warmth and optimism. The combination tells a story before a single word is read.\r\n\r\n ## Typography as Voice\r\n\r\n Your typeface choices are the voice of your brand. A serif display font like Playfair Display brings elegance and editorial authority. Paired with a clean sans-serif for body text, it creates a hierarchy that guides the reader effortlessly.\r\n\r\n Design with intention means every element serves the whole.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1561070791-2526d30994b5?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1561070791-2526d30994b5?w=800&h=500&fit=crop\",\r\n date: \"2026-01-28\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Design\"],\r\n featured: true,\r\n },\r\n {\r\n id: 3,\r\n slug: \"morning-rituals-around-the-world\",\r\n title: \"Morning Rituals Around the World\",\r\n excerpt:\r\n \"From Japanese tea ceremonies to Scandinavian fika, how different cultures start their day reveals what they value most.\",\r\n content: `From Japanese tea ceremonies to Scandinavian fika, how different cultures start their day reveals what they value most.\r\n\r\n## Japan: The Way of Tea\r\n\r\nIn Japan, the morning tea ceremony is a practice of mindfulness. Each movement is deliberate, each moment savored. It's not about the tea — it's about presence.\r\n\r\n## Scandinavia: Fika\r\n\r\nThe Swedish tradition of fika — a coffee break with pastries — is less about caffeine and more about connection. It's a built-in pause in the day to share conversation with friends or colleagues.\r\n\r\n## India: Yoga and Chai\r\n\r\nIn many Indian households, the morning begins with yoga or meditation, followed by a cup of spiced chai. The combination of movement and warmth prepares both body and mind for the day ahead.\r\n\r\n## Italy: The Standing Espresso\r\n\r\nIt Indians take their morning espresso standing at the bar — a quick, intense ritual that's social and efficient. It's a moment of shared energy before the day begins.\r\n\r\nThese rituals remind us that how we begin our day shapes everything that follows.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=800&h=500&fit=crop\",\r\n date: \"2026-01-20\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Culture\"],\r\n featured: true,\r\n gallery: [\r\n { src: \"https://images.unsplash.com/photo-1545569341-9eb8b30979d9?w=800&h=600&fit=crop\", alt: \"Japanese temple garden\" },\r\n { src: \"https://images.unsplash.com/photo-1493976040374-85c8e12f0c0e?w=800&h=600&fit=crop\", alt: \"Traditional tea ceremony\" },\r\n { src: \"https://images.unsplash.com/photo-1504754524776-8f4f37790ca0?w=800&h=600&fit=crop\", alt: \"Breakfast spread\" },\r\n { src: \"https://images.unsplash.com/photo-1514933651103-005eec06c04b?w=800&h=600&fit=crop\", alt: \"Italian espresso bar\" },\r\n ],\r\n },\r\n {\r\n id: 4,\r\n slug: \"the-beauty-of-imperfection\",\r\n title: \"The Beauty of Imperfection\",\r\n excerpt:\r\n \"Wabi-sabi teaches us to find beauty in the worn, the weathered, and the wonderfully imperfect.\",\r\n content: `Wabi-sabi teaches us to find beauty in the worn, the weathered, and the wonderfully imperfect.\r\n\r\nIn a culture obsessed with perfection — flawless skin, pixel-perfect designs, curated feeds — wabi-sabi offers a radical alternative. This Japanese aesthetic philosophy finds beauty in impermanence, incompleteness, and imperfection.\r\n\r\n## What is Wabi-Sabi?\r\n\r\nWabi refers to a rustic simplicity, a quiet contentment. Sabi refers to the beauty that comes with age and wear. Together, they describe an aesthetic that values the authentic over the polished.\r\n\r\n## Applying Wabi-Sabi\r\n\r\n- **In your home:** Choose handmade ceramics over mass-produced perfection.\r\n- **In your work:** Ship the good-enough version rather than waiting for perfect.\r\n- **In yourself:** Embrace your quirks — they're what make you interesting.\r\n\r\nThe cracked pot, the faded photograph, the well-worn book — these carry stories that perfection never could.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1578749556568-bc2c40e68b61?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1578749556568-bc2c40e68b61?w=800&h=500&fit=crop\",\r\n date: \"2026-01-15\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Philosophy\"],\r\n gallery: [\r\n { src: \"https://images.unsplash.com/photo-1528297506728-9533d2ac3fa4?w=800&h=600&fit=crop\", alt: \"Handmade ceramic bowl\" },\r\n { src: \"https://images.unsplash.com/photo-1565193566173-7a0ee3dbe261?w=800&h=600&fit=crop\", alt: \"Cracked pottery with gold\" },\r\n { src: \"https://images.unsplash.com/photo-1493106641515-6b5631de4bb9?w=800&h=600&fit=crop\", alt: \"Worn wooden texture\" },\r\n ],\r\n },\r\n {\r\n id: 5,\r\n slug: \"building-a-reading-habit\",\r\n title: \"Building a Reading Habit\",\r\n excerpt:\r\n \"Reading more doesn't require willpower — it requires environment design and a bit of curiosity.\",\r\n content: `Reading more doesn't require willpower — it requires environment design and a bit of curiosity.\r\n\r\nMost people who say they want to read more are really saying they want to scroll less. The solution isn't discipline — it's making reading the easier choice.\r\n\r\n## Environment Design\r\n\r\n1. **Keep a book visible.** On your nightstand, your desk, your bag.\r\n2. **Remove friction.** If you read on a Kindle, keep it charged and accessible.\r\n3. **Create a reading nook.** A comfortable chair with good light signals \"this is where I read.\"\r\n\r\n## The Two-Page Rule\r\n\r\nDon't commit to a chapter. Commit to two pages. Most nights, you'll keep going. On the nights you don't, you've still read two pages more than zero.\r\n\r\n## Follow Your Curiosity\r\n\r\nAbandon books that bore you. Life is too short for obligatory reading. Follow what fascinates you, even if it's \"not serious enough.\"\r\n\r\nThe goal isn't to read more books. It's to enjoy reading again.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1512820790803-83ca734da794?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1512820790803-83ca734da794?w=800&h=500&fit=crop\",\r\n date: \"2026-01-10\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Habits\"],\r\n },\r\n {\r\n id: 6,\r\n slug: \"color-in-everyday-life\",\r\n title: \"Color in Everyday Life\",\r\n excerpt:\r\n \"We rarely notice it, but color shapes our moods, decisions, and memories more than we realize.\",\r\n content: `We rarely notice it, but color shapes our moods, decisions, and memories more than we realize.\r\n\r\nThink about the last time a sunset stopped you in your tracks, or a room felt inexplicably cozy. Chances are, color was doing the heavy lifting.\r\n\r\n## The Psychology of Color\r\n\r\n- **Warm colors** (reds, oranges, yellows) increase energy and appetite. Restaurants use them for a reason.\r\n- **Cool colors** (blues, greens) promote calm and focus. Think hospitals and meditation apps.\r\n- **Neutrals** create breathing room. They let other elements — and people — take center stage.\r\n\r\n## Color in Design\r\n\r\nA well-chosen color palette does more than look good. It creates hierarchy, draws attention, and establishes mood — all before a user reads a single word.\r\n\r\n## Your Daily Palette\r\n\r\nNotice the colors around you today. The golden light of morning. The deep green of a houseplant. The warm brown of your coffee. These aren't accidents — they're the palette of your life.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1525909002-1b05e0c869d8?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1525909002-1b05e0c869d8?w=800&h=500&fit=crop\",\r\n date: \"2026-01-05\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Design\"],\r\n },\r\n {\r\n id: 7,\r\n slug: \"the-power-of-walking\",\r\n title: \"The Power of Walking\",\r\n excerpt:\r\n \"A daily walk is the most underrated tool for creativity, clarity, and calm.\",\r\n content: `Walking is humanity's oldest form of movement — and still one of its most powerful. Great thinkers from Aristotle to Steve Jobs were known for their walking meetings and strolls.\r\n\r\n## Why Walking Works\r\n\r\nWalking increases blood flow to the brain, boosts creative thinking by up to 60%, and reduces cortisol levels. It's exercise, meditation, and brainstorming rolled into one.\r\n\r\n## Making It a Practice\r\n\r\nYou don't need a trail or a destination. A 20-minute loop around your neighborhood is enough. Leave your phone behind — or at least keep it in your pocket.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1476480862126-209bfaa8edc8?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1476480862126-209bfaa8edc8?w=800&h=500&fit=crop\",\r\n date: \"2026-01-02\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Health\"],\r\n },\r\n {\r\n id: 8,\r\n slug: \"minimalism-beyond-aesthetics\",\r\n title: \"Minimalism Beyond Aesthetics\",\r\n excerpt:\r\n \"True minimalism isn't about owning less — it's about making room for what matters.\",\r\n content: `Minimalism has been reduced to white walls and empty shelves. But the philosophy runs much deeper than aesthetics.\r\n\r\n## The Core Idea\r\n\r\nMinimalism asks one question: does this add value to my life? Apply it to your schedule, your relationships, your commitments — not just your closet.\r\n\r\n## Digital Minimalism\r\n\r\nOur phones hold more clutter than our homes. Audit your apps, notifications, and subscriptions. Keep only what serves you.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1494438639946-1ebd1d20bf85?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1494438639946-1ebd1d20bf85?w=800&h=500&fit=crop\",\r\n date: \"2025-12-28\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Lifestyle\"],\r\n },\r\n {\r\n id: 9,\r\n slug: \"the-lost-art-of-letter-writing\",\r\n title: \"The Lost Art of Letter Writing\",\r\n excerpt:\r\n \"In an age of instant messaging, a handwritten letter carries a weight that no text can match.\",\r\n content: `There's something irreplaceable about receiving a handwritten letter. The texture of the paper, the imperfections of the handwriting, the knowledge that someone sat down and gave you their time.\r\n\r\n## Why Write Letters\r\n\r\nLetters slow us down. They force us to organize our thoughts, choose our words carefully, and express ourselves with intention.\r\n\r\n## Getting Started\r\n\r\nBuy a simple set of stationery. Write to someone you care about. It doesn't need to be long — even a few heartfelt lines will mean the world.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1517971071642-34a2d3ecc9cd?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1517971071642-34a2d3ecc9cd?w=800&h=500&fit=crop\",\r\n date: \"2025-12-20\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Connection\"],\r\n },\r\n {\r\n id: 10,\r\n slug: \"cooking-as-meditation\",\r\n title: \"Cooking as Meditation\",\r\n excerpt:\r\n \"The kitchen can be your sanctuary — if you let the process matter more than the result.\",\r\n content: `We often think of cooking as a chore — something to get through before we can eat. But approached differently, it becomes a meditative practice.\r\n\r\n## The Mindful Kitchen\r\n\r\nFocus on the sounds: the sizzle of oil, the chop of a knife, the bubble of a simmer. Engage your senses fully and the kitchen becomes a place of calm.\r\n\r\n## Simple Rituals\r\n\r\nStart with a recipe you love. Prep all your ingredients before you begin. Put on music. Pour yourself a drink. Let the process be the point.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1556909114-f6e7ad7d3136?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1556909114-f6e7ad7d3136?w=800&h=500&fit=crop\",\r\n date: \"2025-12-15\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Mindfulness\"],\r\n },\r\n {\r\n id: 11,\r\n slug: \"digital-detox-weekend\",\r\n title: \"The Digital Detox Weekend\",\r\n excerpt:\r\n \"48 hours without screens sounds terrifying — until you try it and realize how much you've been missing.\",\r\n content: `A digital detox weekend isn't about hating technology. It's about remembering what life feels like without constant input.\r\n\r\n## The Rules\r\n\r\nNo phone, no laptop, no tablet for 48 hours. Use a paper map, a physical book, an alarm clock. Tell people in advance so they don't worry.\r\n\r\n## What You'll Discover\r\n\r\nBoredom arrives first — then creativity. You'll notice birdsong, have longer conversations, and sleep better than you have in months.`,\r\n primaryImage:\r\n \"https://images.unsplash.com/photo-1528297506728-9533d2ac3fa4?w=800&h=500&fit=crop\",\r\n originalImage:\r\n \"https://images.unsplash.com/photo-1528297506728-9533d2ac3fa4?w=800&h=500&fit=crop\",\r\n date: \"2025-12-10\",\r\n author: \"Elena Marsh\",\r\n categories: [\"Well-being\"],\r\n },\r\n];\r\n\r\nexport const mockComments: Comment[] = [\r\n {\r\n id: \"1\",\r\n author: \"Reader One\",\r\n text: \"This really resonated with me. Thank you for sharing.\",\r\n date: \"2026-02-02\",\r\n },\r\n {\r\n id: \"2\",\r\n author: \"Curious Mind\",\r\n text: \"I've been trying to slow down lately — this gave me some great ideas.\",\r\n date: \"2026-02-03\",\r\n },\r\n {\r\n id: \"3\",\r\n author: \"Design Fan\",\r\n text: \"Beautiful writing and perspective. More of this please!\",\r\n date: \"2026-02-05\",\r\n },\r\n];\r\n"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,34 @@
|
|
|
1
1
|
export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './components/blocks/cards/card.js';
|
|
2
|
+
export { AuthorCard } from './components/blocks/directory/author-card.js';
|
|
3
|
+
export { CategoryCard } from './components/blocks/directory/category-card.js';
|
|
4
|
+
export { ExtrasHubCard, ExtrasHubItem } from './components/blocks/extras/extras-hub-card.js';
|
|
5
|
+
export { GalleryImage } from './components/blocks/gallery/image-gallery.js';
|
|
6
|
+
export { CommentSkeleton, PostCardSkeleton, PostListRowSkeleton, PostListSkeleton, SinglePostSkeleton } from './components/blocks/loading/loading-skeletons.js';
|
|
2
7
|
export { Login, LoginCredentials, LoginProps } from './components/blocks/login/login.js';
|
|
8
|
+
export { PageHero } from './components/blocks/marketing/page-hero.js';
|
|
9
|
+
export { StatItem, StatsGrid } from './components/blocks/marketing/stats-grid.js';
|
|
10
|
+
export { Timeline, TimelineItem } from './components/blocks/marketing/timeline.js';
|
|
11
|
+
export { ValueItem, ValuesGrid } from './components/blocks/marketing/values-grid.js';
|
|
3
12
|
export { PostListWithFilters } from './components/blocks/post-list/post-list-with-filters.js';
|
|
13
|
+
export { AboutPage } from './components/pages/about/about-page.js';
|
|
4
14
|
export { AdminPage, AdminPageProps } from './components/pages/admin/admin-page.js';
|
|
15
|
+
export { AuthorPage } from './components/pages/author/author-page.js';
|
|
16
|
+
export { AuthorsPage } from './components/pages/authors/authors-page.js';
|
|
5
17
|
export { BlogPost } from './components/pages/blogpost/blogpost.js';
|
|
18
|
+
export { CategoriesPage } from './components/pages/categories/categories-page.js';
|
|
6
19
|
export { CategoryPage } from './components/pages/category/category-page.js';
|
|
20
|
+
export { ChatPage } from './components/pages/chat/chat-page.js';
|
|
21
|
+
export { ContactPage } from './components/pages/contact/contact-page.js';
|
|
22
|
+
export { ContentBlocksPage } from './components/pages/content-blocks/content-blocks-page.js';
|
|
23
|
+
export { ExtrasHubPage } from './components/pages/extras/extras-hub-page.js';
|
|
7
24
|
export { LoginPage } from './components/pages/login/login-page.js';
|
|
8
25
|
export { MaintenancePage } from './components/pages/maintenance/maintenance-page.js';
|
|
26
|
+
export { MembershipPage } from './components/pages/membership/membership-page.js';
|
|
27
|
+
export { MosaicPage } from './components/pages/mosaic/mosaic-page.js';
|
|
28
|
+
export { NewsletterPage } from './components/pages/newsletter/newsletter-page.js';
|
|
9
29
|
export { NotFound } from './components/pages/not-found/not-found.js';
|
|
10
30
|
export { PrivacyPage } from './components/pages/privacy/privacy-page.js';
|
|
31
|
+
export { ResourcesPage } from './components/pages/resources/resources-page.js';
|
|
11
32
|
export { SearchPage } from './components/pages/search/search-page.js';
|
|
12
33
|
export { StartPage } from './components/pages/startpage/startpage.js';
|
|
13
34
|
export { TermsPage } from './components/pages/terms/terms-page.js';
|
|
@@ -21,6 +42,9 @@ export { LinkButton } from './components/primitives/buttons/link-button.js';
|
|
|
21
42
|
export { Collapsible, CollapsibleContent, CollapsibleTrigger } from './components/primitives/collapsible/collapsible.js';
|
|
22
43
|
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './components/primitives/dropdown-menu/dropdown-menu.js';
|
|
23
44
|
export { Checkbox } from './components/primitives/forms/checkbox.js';
|
|
45
|
+
export { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle } from './components/primitives/forms/field.js';
|
|
46
|
+
export { Form, FormActions } from './components/primitives/forms/form.js';
|
|
47
|
+
export { FormControl } from './components/primitives/forms/form-control.js';
|
|
24
48
|
export { Input } from './components/primitives/forms/input.js';
|
|
25
49
|
export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue } from './components/primitives/forms/select.js';
|
|
26
50
|
export { Textarea } from './components/primitives/forms/textarea.js';
|
|
@@ -49,19 +73,22 @@ export { AuthProvider, useAuth } from './components/providers/auth-provider.js';
|
|
|
49
73
|
export { Theme, ThemeProvider, ThemeProviderProps, ThemeProviderState, useTheme } from './components/providers/theme-provider.js';
|
|
50
74
|
export { Container } from './components/templates/container/container.js';
|
|
51
75
|
export { Footer } from './components/templates/footer/footer.js';
|
|
76
|
+
export { LoadingScreen } from './components/templates/loading-screen/loading-screen.js';
|
|
52
77
|
export { Header, HeaderProps, NavLink } from './components/templates/navigation/header.js';
|
|
53
78
|
export { toast } from 'sonner';
|
|
54
79
|
import 'react';
|
|
80
|
+
import './data/authors.js';
|
|
81
|
+
import 'lucide-react';
|
|
55
82
|
import './data/posts.js';
|
|
56
83
|
import '@base-ui/react/accordion';
|
|
57
84
|
import 'class-variance-authority/types';
|
|
58
85
|
import 'class-variance-authority';
|
|
59
86
|
import '@base-ui/react/use-render';
|
|
60
87
|
import '@base-ui/react/button';
|
|
61
|
-
import 'lucide-react';
|
|
62
88
|
import '@radix-ui/react-collapsible';
|
|
63
89
|
import '@radix-ui/react-dropdown-menu';
|
|
64
90
|
import '@base-ui/react';
|
|
91
|
+
import './lib/forms/field-props.js';
|
|
65
92
|
import '@base-ui/react/separator';
|
|
66
93
|
import '@radix-ui/react-dialog';
|
|
67
94
|
import './components/primitives/text/internal/text-element.js';
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
type FieldErrorLike = {
|
|
2
|
+
message?: string;
|
|
3
|
+
} | string | undefined;
|
|
4
|
+
type TanStackFieldLike = {
|
|
5
|
+
name: string | number | symbol;
|
|
6
|
+
state: {
|
|
7
|
+
value: unknown;
|
|
8
|
+
meta: {
|
|
9
|
+
errors: unknown[];
|
|
10
|
+
isTouched: boolean;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
handleBlur: () => void;
|
|
14
|
+
handleChange: (value: unknown) => void;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Normalizes validation errors from TanStack Form, Zod, or manual sources
|
|
18
|
+
* into the shape expected by {@link FieldError}.
|
|
19
|
+
*/
|
|
20
|
+
declare function normalizeFieldErrors(errors: FieldErrorLike[] | undefined): Array<{
|
|
21
|
+
message?: string;
|
|
22
|
+
}>;
|
|
23
|
+
/**
|
|
24
|
+
* Returns whether a field should be shown in an invalid state.
|
|
25
|
+
*/
|
|
26
|
+
declare function isFieldInvalid(field: TanStackFieldLike): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Maps a TanStack Form field to props for {@link Input} or {@link Textarea}.
|
|
29
|
+
*/
|
|
30
|
+
declare function getInputFieldProps(field: TanStackFieldLike, controlId?: string): {
|
|
31
|
+
readonly id: string;
|
|
32
|
+
readonly name: string;
|
|
33
|
+
readonly value: string | number | readonly string[];
|
|
34
|
+
readonly onBlur: () => void;
|
|
35
|
+
readonly onChange: (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
|
|
36
|
+
readonly "aria-invalid": true | undefined;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Maps a TanStack Form field to props for {@link Checkbox}.
|
|
40
|
+
*/
|
|
41
|
+
declare function getCheckboxFieldProps(field: TanStackFieldLike, controlId?: string): {
|
|
42
|
+
readonly id: string;
|
|
43
|
+
readonly name: string;
|
|
44
|
+
readonly checked: boolean;
|
|
45
|
+
readonly onCheckedChange: (checked: boolean) => void;
|
|
46
|
+
readonly onBlur: () => void;
|
|
47
|
+
readonly "aria-invalid": true | undefined;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Maps a TanStack Form field to props for {@link Select}.
|
|
51
|
+
*/
|
|
52
|
+
declare function getSelectFieldProps(field: TanStackFieldLike, controlId?: string): {
|
|
53
|
+
readonly id: string;
|
|
54
|
+
readonly name: string;
|
|
55
|
+
readonly value: unknown;
|
|
56
|
+
readonly onValueChange: (value: unknown) => void;
|
|
57
|
+
readonly "aria-invalid": true | undefined;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export { type FieldErrorLike, type TanStackFieldLike, getCheckboxFieldProps, getInputFieldProps, getSelectFieldProps, isFieldInvalid, normalizeFieldErrors };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
function normalizeFieldErrors(errors) {
|
|
2
|
+
if (!errors?.length) {
|
|
3
|
+
return [];
|
|
4
|
+
}
|
|
5
|
+
return errors.map(
|
|
6
|
+
(error) => typeof error === "string" ? { message: error } : error ?? void 0
|
|
7
|
+
).filter((error) => Boolean(error?.message));
|
|
8
|
+
}
|
|
9
|
+
function isFieldInvalid(field) {
|
|
10
|
+
return field.state.meta.isTouched && field.state.meta.errors.length > 0;
|
|
11
|
+
}
|
|
12
|
+
function getInputFieldProps(field, controlId) {
|
|
13
|
+
const id = controlId ?? String(field.name);
|
|
14
|
+
const invalid = isFieldInvalid(field);
|
|
15
|
+
return {
|
|
16
|
+
id,
|
|
17
|
+
name: String(field.name),
|
|
18
|
+
value: field.state.value ?? "",
|
|
19
|
+
onBlur: field.handleBlur,
|
|
20
|
+
onChange: (event) => {
|
|
21
|
+
field.handleChange(event.target.value);
|
|
22
|
+
},
|
|
23
|
+
"aria-invalid": invalid ? true : void 0
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function getCheckboxFieldProps(field, controlId) {
|
|
27
|
+
const id = controlId ?? String(field.name);
|
|
28
|
+
const invalid = isFieldInvalid(field);
|
|
29
|
+
return {
|
|
30
|
+
id,
|
|
31
|
+
name: String(field.name),
|
|
32
|
+
checked: Boolean(field.state.value),
|
|
33
|
+
onCheckedChange: (checked) => {
|
|
34
|
+
field.handleChange(checked);
|
|
35
|
+
},
|
|
36
|
+
onBlur: field.handleBlur,
|
|
37
|
+
"aria-invalid": invalid ? true : void 0
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function getSelectFieldProps(field, controlId) {
|
|
41
|
+
const id = controlId ?? String(field.name);
|
|
42
|
+
const invalid = isFieldInvalid(field);
|
|
43
|
+
return {
|
|
44
|
+
id,
|
|
45
|
+
name: String(field.name),
|
|
46
|
+
value: field.state.value,
|
|
47
|
+
onValueChange: (value) => {
|
|
48
|
+
field.handleChange(value);
|
|
49
|
+
},
|
|
50
|
+
"aria-invalid": invalid ? true : void 0
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
getCheckboxFieldProps,
|
|
55
|
+
getInputFieldProps,
|
|
56
|
+
getSelectFieldProps,
|
|
57
|
+
isFieldInvalid,
|
|
58
|
+
normalizeFieldErrors
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=field-props.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/forms/field-props.ts"],"sourcesContent":["export type FieldErrorLike = { message?: string } | string | undefined;\r\n\r\nexport type TanStackFieldLike = {\r\n name: string | number | symbol;\r\n state: {\r\n value: unknown;\r\n meta: {\r\n errors: unknown[];\r\n isTouched: boolean;\r\n };\r\n };\r\n handleBlur: () => void;\r\n handleChange: (value: unknown) => void;\r\n};\r\n\r\n/**\r\n * Normalizes validation errors from TanStack Form, Zod, or manual sources\r\n * into the shape expected by {@link FieldError}.\r\n */\r\nexport function normalizeFieldErrors(\r\n errors: FieldErrorLike[] | undefined,\r\n): Array<{ message?: string }> {\r\n if (!errors?.length) {\r\n return [];\r\n }\r\n\r\n return errors\r\n .map((error) =>\r\n typeof error === \"string\" ? { message: error } : (error ?? undefined),\r\n )\r\n .filter((error): error is { message?: string } => Boolean(error?.message));\r\n}\r\n\r\n/**\r\n * Returns whether a field should be shown in an invalid state.\r\n */\r\nexport function isFieldInvalid(field: TanStackFieldLike): boolean {\r\n return field.state.meta.isTouched && field.state.meta.errors.length > 0;\r\n}\r\n\r\n/**\r\n * Maps a TanStack Form field to props for {@link Input} or {@link Textarea}.\r\n */\r\nexport function getInputFieldProps(\r\n field: TanStackFieldLike,\r\n controlId?: string,\r\n) {\r\n const id = controlId ?? String(field.name);\r\n const invalid = isFieldInvalid(field);\r\n\r\n return {\r\n id,\r\n name: String(field.name),\r\n value: (field.state.value as string | number | readonly string[]) ?? \"\",\r\n onBlur: field.handleBlur,\r\n onChange: (\r\n event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\r\n ) => {\r\n field.handleChange(event.target.value);\r\n },\r\n \"aria-invalid\": invalid ? true : undefined,\r\n } as const;\r\n}\r\n\r\n/**\r\n * Maps a TanStack Form field to props for {@link Checkbox}.\r\n */\r\nexport function getCheckboxFieldProps(\r\n field: TanStackFieldLike,\r\n controlId?: string,\r\n) {\r\n const id = controlId ?? String(field.name);\r\n const invalid = isFieldInvalid(field);\r\n\r\n return {\r\n id,\r\n name: String(field.name),\r\n checked: Boolean(field.state.value),\r\n onCheckedChange: (checked: boolean) => {\r\n field.handleChange(checked);\r\n },\r\n onBlur: field.handleBlur,\r\n \"aria-invalid\": invalid ? true : undefined,\r\n } as const;\r\n}\r\n\r\n/**\r\n * Maps a TanStack Form field to props for {@link Select}.\r\n */\r\nexport function getSelectFieldProps(\r\n field: TanStackFieldLike,\r\n controlId?: string,\r\n) {\r\n const id = controlId ?? String(field.name);\r\n const invalid = isFieldInvalid(field);\r\n\r\n return {\r\n id,\r\n name: String(field.name),\r\n value: field.state.value,\r\n onValueChange: (value: unknown) => {\r\n field.handleChange(value);\r\n },\r\n \"aria-invalid\": invalid ? true : undefined,\r\n } as const;\r\n}\r\n"],"mappings":"AAmBO,SAAS,qBACd,QAC6B;AAC7B,MAAI,CAAC,QAAQ,QAAQ;AACnB,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,OACJ;AAAA,IAAI,CAAC,UACJ,OAAO,UAAU,WAAW,EAAE,SAAS,MAAM,IAAK,SAAS;AAAA,EAC7D,EACC,OAAO,CAAC,UAAyC,QAAQ,OAAO,OAAO,CAAC;AAC7E;AAKO,SAAS,eAAe,OAAmC;AAChE,SAAO,MAAM,MAAM,KAAK,aAAa,MAAM,MAAM,KAAK,OAAO,SAAS;AACxE;AAKO,SAAS,mBACd,OACA,WACA;AACA,QAAM,KAAK,aAAa,OAAO,MAAM,IAAI;AACzC,QAAM,UAAU,eAAe,KAAK;AAEpC,SAAO;AAAA,IACL;AAAA,IACA,MAAM,OAAO,MAAM,IAAI;AAAA,IACvB,OAAQ,MAAM,MAAM,SAAiD;AAAA,IACrE,QAAQ,MAAM;AAAA,IACd,UAAU,CACR,UACG;AACH,YAAM,aAAa,MAAM,OAAO,KAAK;AAAA,IACvC;AAAA,IACA,gBAAgB,UAAU,OAAO;AAAA,EACnC;AACF;AAKO,SAAS,sBACd,OACA,WACA;AACA,QAAM,KAAK,aAAa,OAAO,MAAM,IAAI;AACzC,QAAM,UAAU,eAAe,KAAK;AAEpC,SAAO;AAAA,IACL;AAAA,IACA,MAAM,OAAO,MAAM,IAAI;AAAA,IACvB,SAAS,QAAQ,MAAM,MAAM,KAAK;AAAA,IAClC,iBAAiB,CAAC,YAAqB;AACrC,YAAM,aAAa,OAAO;AAAA,IAC5B;AAAA,IACA,QAAQ,MAAM;AAAA,IACd,gBAAgB,UAAU,OAAO;AAAA,EACnC;AACF;AAKO,SAAS,oBACd,OACA,WACA;AACA,QAAM,KAAK,aAAa,OAAO,MAAM,IAAI;AACzC,QAAM,UAAU,eAAe,KAAK;AAEpC,SAAO;AAAA,IACL;AAAA,IACA,MAAM,OAAO,MAAM,IAAI;AAAA,IACvB,OAAO,MAAM,MAAM;AAAA,IACnB,eAAe,CAAC,UAAmB;AACjC,YAAM,aAAa,KAAK;AAAA,IAC1B;AAAA,IACA,gBAAgB,UAAU,OAAO;AAAA,EACnC;AACF;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { FieldErrorLike, TanStackFieldLike, getCheckboxFieldProps, getInputFieldProps, getSelectFieldProps, isFieldInvalid, normalizeFieldErrors } from './field-props.js';
|
|
2
|
+
export { TanStackCheckboxField, TanStackField, TanStackFormLike, TanStackInputField, TanStackSelectField, TanStackTextareaField } from './tanstack-field.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import '@tanstack/react-form';
|
|
5
|
+
import '../../components/primitives/forms/form-control.js';
|
|
6
|
+
import '../../components/primitives/forms/field.js';
|
|
7
|
+
import 'class-variance-authority/types';
|
|
8
|
+
import 'class-variance-authority';
|
|
9
|
+
import '../../components/primitives/label/label.js';
|
|
10
|
+
import '../../components/primitives/forms/input.js';
|
|
11
|
+
import '../../components/primitives/forms/textarea.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/forms/index.ts"],"sourcesContent":["export * from \"./field-props\";\r\nexport * from \"./tanstack-field\";\r\n"],"mappings":"AAAA,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { TanStackFieldLike, getSelectFieldProps } from './field-props.js';
|
|
2
|
+
export { FieldErrorLike, getCheckboxFieldProps, getInputFieldProps, isFieldInvalid, normalizeFieldErrors } from './field-props.js';
|
|
3
|
+
import * as React$1 from 'react';
|
|
4
|
+
import { DeepKeys } from '@tanstack/react-form';
|
|
5
|
+
import { FormControl } from '../../components/primitives/forms/form-control.js';
|
|
6
|
+
import { Input } from '../../components/primitives/forms/input.js';
|
|
7
|
+
import { Textarea } from '../../components/primitives/forms/textarea.js';
|
|
8
|
+
import '../../components/primitives/forms/field.js';
|
|
9
|
+
import 'class-variance-authority/types';
|
|
10
|
+
import 'class-variance-authority';
|
|
11
|
+
import '../../components/primitives/label/label.js';
|
|
12
|
+
|
|
13
|
+
type TanStackFormFieldComponent<TFormData> = (props: {
|
|
14
|
+
name: DeepKeys<TFormData>;
|
|
15
|
+
validators?: Record<string, unknown>;
|
|
16
|
+
children: (field: TanStackFieldLike) => React.ReactNode;
|
|
17
|
+
}) => React.ReactNode;
|
|
18
|
+
/** Form instance returned by `useForm()` — accepts any TanStack Form API shape. */
|
|
19
|
+
type TanStackFormLike<TFormData> = {
|
|
20
|
+
Field: TanStackFormFieldComponent<TFormData>;
|
|
21
|
+
Subscribe: (props: {
|
|
22
|
+
selector?: (state: unknown) => unknown;
|
|
23
|
+
children: ((state: unknown) => React.ReactNode) | React.ReactNode;
|
|
24
|
+
}) => React.ReactNode;
|
|
25
|
+
handleSubmit: () => void | Promise<void>;
|
|
26
|
+
reset: (values?: Partial<TFormData>) => void;
|
|
27
|
+
};
|
|
28
|
+
type TanStackFieldProps<TFormData, TName extends DeepKeys<TFormData>> = {
|
|
29
|
+
formApi: unknown;
|
|
30
|
+
name: TName;
|
|
31
|
+
label?: React.ReactNode;
|
|
32
|
+
description?: React.ReactNode;
|
|
33
|
+
orientation?: React.ComponentProps<typeof FormControl>["orientation"];
|
|
34
|
+
labelClassName?: string;
|
|
35
|
+
className?: string;
|
|
36
|
+
validators?: Record<string, unknown>;
|
|
37
|
+
children: (field: TanStackFieldLike, controlProps: Record<string, unknown>, controlId: string) => React.ReactNode;
|
|
38
|
+
mapControlProps?: (field: TanStackFieldLike, controlId: string) => Record<string, unknown>;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Connects a TanStack Form field to Singularity {@link FormControl} layout primitives.
|
|
42
|
+
*/
|
|
43
|
+
declare function TanStackField<TFormData, TName extends DeepKeys<TFormData>>({ formApi, name, label, description, orientation, labelClassName, className, validators, children, mapControlProps, }: TanStackFieldProps<TFormData, TName>): React$1.JSX.Element;
|
|
44
|
+
type TanStackInputFieldProps<TFormData, TName extends DeepKeys<TFormData>> = Omit<TanStackFieldProps<TFormData, TName>, "children" | "mapControlProps"> & Omit<React.ComponentProps<typeof Input>, "id" | "name" | "value" | "onChange" | "onBlur" | "form">;
|
|
45
|
+
/**
|
|
46
|
+
* TanStack Form field wired to {@link Input}.
|
|
47
|
+
*/
|
|
48
|
+
declare function TanStackInputField<TFormData, TName extends DeepKeys<TFormData>>({ type, ...props }: TanStackInputFieldProps<TFormData, TName>): React$1.JSX.Element;
|
|
49
|
+
type TanStackTextareaFieldProps<TFormData, TName extends DeepKeys<TFormData>> = Omit<TanStackFieldProps<TFormData, TName>, "children" | "mapControlProps"> & Omit<React.ComponentProps<typeof Textarea>, "id" | "name" | "value" | "onChange" | "onBlur">;
|
|
50
|
+
/**
|
|
51
|
+
* TanStack Form field wired to {@link Textarea}.
|
|
52
|
+
*/
|
|
53
|
+
declare function TanStackTextareaField<TFormData, TName extends DeepKeys<TFormData>>(props: TanStackTextareaFieldProps<TFormData, TName>): React$1.JSX.Element;
|
|
54
|
+
type TanStackCheckboxFieldProps<TFormData, TName extends DeepKeys<TFormData>> = Omit<TanStackFieldProps<TFormData, TName>, "children" | "mapControlProps" | "label"> & {
|
|
55
|
+
label: React.ReactNode;
|
|
56
|
+
checkboxClassName?: string;
|
|
57
|
+
labelClassName?: string;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* TanStack Form field wired to {@link Checkbox} with a horizontal layout by default.
|
|
61
|
+
*/
|
|
62
|
+
declare function TanStackCheckboxField<TFormData, TName extends DeepKeys<TFormData>>({ formApi, name, validators, checkboxClassName, labelClassName, label, description, orientation, className, }: TanStackCheckboxFieldProps<TFormData, TName>): React$1.JSX.Element;
|
|
63
|
+
type TanStackSelectFieldProps<TFormData, TName extends DeepKeys<TFormData>> = Omit<TanStackFieldProps<TFormData, TName>, "children" | "mapControlProps"> & {
|
|
64
|
+
children: (controlProps: ReturnType<typeof getSelectFieldProps>, controlId: string) => React.ReactNode;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* TanStack Form field wired to {@link Select} via a render prop.
|
|
68
|
+
*/
|
|
69
|
+
declare function TanStackSelectField<TFormData, TName extends DeepKeys<TFormData>>({ children, ...props }: TanStackSelectFieldProps<TFormData, TName>): React$1.JSX.Element;
|
|
70
|
+
|
|
71
|
+
export { TanStackCheckboxField, TanStackField, TanStackFieldLike, type TanStackFormLike, TanStackInputField, TanStackSelectField, TanStackTextareaField, getSelectFieldProps };
|