singularity-components 0.1.195 → 0.1.196

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/dist/components/blocks/badges/category-badge.d.ts +11 -0
  2. package/dist/components/blocks/badges/category-badge.js +34 -0
  3. package/dist/components/blocks/badges/category-badge.js.map +1 -0
  4. package/dist/components/blocks/cards/blogpost-card.d.ts +3 -1
  5. package/dist/components/blocks/cards/blogpost-card.js +9 -4
  6. package/dist/components/blocks/cards/blogpost-card.js.map +1 -1
  7. package/dist/components/blocks/directory/author-card.d.ts +10 -0
  8. package/dist/components/blocks/directory/author-card.js +50 -0
  9. package/dist/components/blocks/directory/author-card.js.map +1 -0
  10. package/dist/components/blocks/directory/category-card.d.ts +10 -0
  11. package/dist/components/blocks/directory/category-card.js +26 -0
  12. package/dist/components/blocks/directory/category-card.js.map +1 -0
  13. package/dist/components/blocks/extras/extras-hub-card.d.ts +16 -0
  14. package/dist/components/blocks/extras/extras-hub-card.js +21 -0
  15. package/dist/components/blocks/extras/extras-hub-card.js.map +1 -0
  16. package/dist/components/blocks/gallery/image-gallery.d.ts +14 -0
  17. package/dist/components/blocks/gallery/image-gallery.js +211 -0
  18. package/dist/components/blocks/gallery/image-gallery.js.map +1 -0
  19. package/dist/components/blocks/index.d.ts +11 -0
  20. package/dist/components/blocks/index.js +10 -0
  21. package/dist/components/blocks/index.js.map +1 -1
  22. package/dist/components/blocks/loading/loading-skeletons.d.ts +15 -0
  23. package/dist/components/blocks/loading/loading-skeletons.js +78 -0
  24. package/dist/components/blocks/loading/loading-skeletons.js.map +1 -0
  25. package/dist/components/blocks/marketing/page-hero.d.ts +13 -0
  26. package/dist/components/blocks/marketing/page-hero.js +37 -0
  27. package/dist/components/blocks/marketing/page-hero.js.map +1 -0
  28. package/dist/components/blocks/marketing/stats-grid.d.ts +16 -0
  29. package/dist/components/blocks/marketing/stats-grid.js +30 -0
  30. package/dist/components/blocks/marketing/stats-grid.js.map +1 -0
  31. package/dist/components/blocks/marketing/timeline.d.ts +17 -0
  32. package/dist/components/blocks/marketing/timeline.js +45 -0
  33. package/dist/components/blocks/marketing/timeline.js.map +1 -0
  34. package/dist/components/blocks/marketing/values-grid.d.ts +16 -0
  35. package/dist/components/blocks/marketing/values-grid.js +29 -0
  36. package/dist/components/blocks/marketing/values-grid.js.map +1 -0
  37. package/dist/components/index.d.ts +28 -1
  38. package/dist/components/pages/about/about-page.d.ts +5 -0
  39. package/dist/components/pages/about/about-page.js +161 -0
  40. package/dist/components/pages/about/about-page.js.map +1 -0
  41. package/dist/components/pages/admin/admin-page.js +4 -1
  42. package/dist/components/pages/admin/admin-page.js.map +1 -1
  43. package/dist/components/pages/author/author-page.d.ts +8 -0
  44. package/dist/components/pages/author/author-page.js +107 -0
  45. package/dist/components/pages/author/author-page.js.map +1 -0
  46. package/dist/components/pages/authors/authors-page.d.ts +5 -0
  47. package/dist/components/pages/authors/authors-page.js +25 -0
  48. package/dist/components/pages/authors/authors-page.js.map +1 -0
  49. package/dist/components/pages/blogpost/blogpost.d.ts +4 -1
  50. package/dist/components/pages/blogpost/blogpost.js +38 -18
  51. package/dist/components/pages/blogpost/blogpost.js.map +1 -1
  52. package/dist/components/pages/categories/categories-page.d.ts +5 -0
  53. package/dist/components/pages/categories/categories-page.js +33 -0
  54. package/dist/components/pages/categories/categories-page.js.map +1 -0
  55. package/dist/components/pages/category/category-page.js +3 -1
  56. package/dist/components/pages/category/category-page.js.map +1 -1
  57. package/dist/components/pages/contact/contact-page.d.ts +5 -0
  58. package/dist/components/pages/contact/contact-page.js +173 -0
  59. package/dist/components/pages/contact/contact-page.js.map +1 -0
  60. package/dist/components/pages/content-blocks/content-blocks-page.d.ts +5 -0
  61. package/dist/components/pages/content-blocks/content-blocks-page.js +86 -0
  62. package/dist/components/pages/content-blocks/content-blocks-page.js.map +1 -0
  63. package/dist/components/pages/extras/extras-hub-page.d.ts +10 -0
  64. package/dist/components/pages/extras/extras-hub-page.js +110 -0
  65. package/dist/components/pages/extras/extras-hub-page.js.map +1 -0
  66. package/dist/components/pages/index.d.ts +14 -0
  67. package/dist/components/pages/index.js +12 -0
  68. package/dist/components/pages/index.js.map +1 -1
  69. package/dist/components/pages/membership/membership-page.d.ts +5 -0
  70. package/dist/components/pages/membership/membership-page.js +131 -0
  71. package/dist/components/pages/membership/membership-page.js.map +1 -0
  72. package/dist/components/pages/mosaic/mosaic-page.d.ts +5 -0
  73. package/dist/components/pages/mosaic/mosaic-page.js +81 -0
  74. package/dist/components/pages/mosaic/mosaic-page.js.map +1 -0
  75. package/dist/components/pages/newsletter/newsletter-page.d.ts +5 -0
  76. package/dist/components/pages/newsletter/newsletter-page.js +148 -0
  77. package/dist/components/pages/newsletter/newsletter-page.js.map +1 -0
  78. package/dist/components/pages/resources/resources-page.d.ts +5 -0
  79. package/dist/components/pages/resources/resources-page.js +24 -0
  80. package/dist/components/pages/resources/resources-page.js.map +1 -0
  81. package/dist/components/pages/startpage/startpage.js +6 -4
  82. package/dist/components/pages/startpage/startpage.js.map +1 -1
  83. package/dist/components/primitives/accordion/accordion.js +14 -16
  84. package/dist/components/primitives/accordion/accordion.js.map +1 -1
  85. package/dist/components/primitives/badge/badge.js +1 -1
  86. package/dist/components/primitives/badge/badge.js.map +1 -1
  87. package/dist/components/primitives/buttons/button.d.ts +2 -2
  88. package/dist/components/primitives/buttons/icon-button.d.ts +1 -1
  89. package/dist/components/primitives/collapsible/collapsible.js +4 -1
  90. package/dist/components/primitives/collapsible/collapsible.js.map +1 -1
  91. package/dist/components/primitives/dropdown-menu/dropdown-menu.js +6 -1
  92. package/dist/components/primitives/dropdown-menu/dropdown-menu.js.map +1 -1
  93. package/dist/components/primitives/forms/checkbox.js +1 -1
  94. package/dist/components/primitives/forms/checkbox.js.map +1 -1
  95. package/dist/components/primitives/forms/field.d.ts +4 -2
  96. package/dist/components/primitives/forms/field.js +4 -2
  97. package/dist/components/primitives/forms/field.js.map +1 -1
  98. package/dist/components/primitives/forms/form-control.d.ts +28 -0
  99. package/dist/components/primitives/forms/form-control.js +40 -0
  100. package/dist/components/primitives/forms/form-control.js.map +1 -0
  101. package/dist/components/primitives/forms/form.d.ts +12 -0
  102. package/dist/components/primitives/forms/form.js +30 -0
  103. package/dist/components/primitives/forms/form.js.map +1 -0
  104. package/dist/components/primitives/forms/select.js +12 -12
  105. package/dist/components/primitives/forms/select.js.map +1 -1
  106. package/dist/components/primitives/icon/icon.d.ts +3 -2
  107. package/dist/components/primitives/icon/icon.js +2 -1
  108. package/dist/components/primitives/icon/icon.js.map +1 -1
  109. package/dist/components/primitives/index.d.ts +4 -0
  110. package/dist/components/primitives/index.js +3 -0
  111. package/dist/components/primitives/index.js.map +1 -1
  112. package/dist/components/primitives/layout/layout.d.ts +1 -1
  113. package/dist/components/primitives/link/link.d.ts +2 -2
  114. package/dist/components/primitives/sheet/sheet.js +1 -1
  115. package/dist/components/primitives/sheet/sheet.js.map +1 -1
  116. package/dist/components/primitives/stack/stack.d.ts +2 -2
  117. package/dist/components/primitives/text/internal/text-element.d.ts +8 -2
  118. package/dist/components/primitives/text/internal/text-element.js +3 -0
  119. package/dist/components/primitives/text/internal/text-element.js.map +1 -1
  120. package/dist/components/primitives/text/text-code.d.ts +1 -1
  121. package/dist/components/templates/index.d.ts +1 -0
  122. package/dist/components/templates/index.js +1 -0
  123. package/dist/components/templates/index.js.map +1 -1
  124. package/dist/components/templates/loading-screen/loading-screen.d.ts +10 -0
  125. package/dist/components/templates/loading-screen/loading-screen.js +39 -0
  126. package/dist/components/templates/loading-screen/loading-screen.js.map +1 -0
  127. package/dist/css/variables.css +2 -0
  128. package/dist/css/variables.css.map +1 -1
  129. package/dist/data/posts.d.ts +5 -0
  130. package/dist/data/posts.js +37 -4
  131. package/dist/data/posts.js.map +1 -1
  132. package/dist/index.d.ts +28 -1
  133. package/dist/lib/forms/field-props.d.ts +60 -0
  134. package/dist/lib/forms/field-props.js +60 -0
  135. package/dist/lib/forms/field-props.js.map +1 -0
  136. package/dist/lib/forms/index.d.ts +11 -0
  137. package/dist/lib/forms/index.js +3 -0
  138. package/dist/lib/forms/index.js.map +1 -0
  139. package/dist/lib/forms/tanstack-field.d.ts +56 -0
  140. package/dist/lib/forms/tanstack-field.js +114 -0
  141. package/dist/lib/forms/tanstack-field.js.map +1 -0
  142. package/dist/lib/index.d.ts +11 -0
  143. package/dist/lib/index.js +1 -0
  144. package/dist/lib/index.js.map +1 -1
  145. package/dist/main.css +396 -87
  146. package/dist/main.css.map +1 -1
  147. package/package.json +14 -2
@@ -23,11 +23,12 @@ declare const iconVariants: {
23
23
  "muted-foreground": string;
24
24
  destructive: string;
25
25
  "destructive-foreground": string;
26
+ error: string;
26
27
  };
27
28
  };
28
29
  declare const iconVariantsProps: (props?: ({
29
- size?: "default" | "sm" | "xs" | "lg" | "xl" | "xxl" | null | undefined;
30
- color?: "default" | "foreground" | "primary" | "primary-foreground" | "secondary" | "secondary-foreground" | "muted" | "muted-foreground" | "destructive" | "destructive-foreground" | null | undefined;
30
+ size?: "default" | "xs" | "sm" | "lg" | "xl" | "xxl" | null | undefined;
31
+ color?: "default" | "secondary" | "destructive" | "foreground" | "primary" | "primary-foreground" | "secondary-foreground" | "muted" | "muted-foreground" | "destructive-foreground" | "error" | null | undefined;
31
32
  } & class_variance_authority_types.ClassProp) | undefined) => string;
32
33
  type Props = Omit<React.ComponentProps<LucideIcon>, "size"> & VariantProps<typeof iconVariantsProps> & {
33
34
  icon: keyof typeof icons;
@@ -22,7 +22,8 @@ const iconVariants = {
22
22
  muted: "sg:text-muted",
23
23
  "muted-foreground": "sg:text-muted-foreground",
24
24
  destructive: "sg:text-destructive",
25
- "destructive-foreground": "sg:text-destructive-foreground"
25
+ "destructive-foreground": "sg:text-destructive-foreground",
26
+ error: "sg:text-error"
26
27
  }
27
28
  };
28
29
  const iconVariantsProps = cva("", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/primitives/icon/icon.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { icons, type LucideIcon } from \"lucide-react\";\r\nimport { cn } from \"../../../utils/index\";\r\n\r\nconst iconVariants = {\r\n size: {\r\n xs: \"sg:size-4\",\r\n sm: \"sg:size-8\",\r\n default: \"sg:size-9\",\r\n lg: \"sg:size-10\",\r\n xl: \"sg:size-12\",\r\n xxl: \"sg:size-16\",\r\n },\r\n color: {\r\n default: \"\",\r\n foreground: \"sg:text-foreground\",\r\n primary: \"sg:text-primary\",\r\n \"primary-foreground\": \"sg:text-primary-foreground\",\r\n secondary: \"sg:text-secondary\",\r\n \"secondary-foreground\": \"sg:text-secondary-foreground\",\r\n muted: \"sg:text-muted\",\r\n \"muted-foreground\": \"sg:text-muted-foreground\",\r\n destructive: \"sg:text-destructive\",\r\n \"destructive-foreground\": \"sg:text-destructive-foreground\",\r\n },\r\n};\r\n\r\nconst iconVariantsProps = cva(\"\", {\r\n variants: iconVariants,\r\n defaultVariants: {\r\n size: \"default\",\r\n color: \"default\",\r\n },\r\n});\r\n\r\ntype Props = Omit<React.ComponentProps<LucideIcon>, \"size\"> &\r\n VariantProps<typeof iconVariantsProps> & {\r\n icon: keyof typeof icons;\r\n spin?: boolean;\r\n };\r\n\r\nfunction Icon({ className, size, color, icon, spin, ...props }: Props) {\r\n const LucideIcon = icons[icon];\r\n\r\n return (\r\n <LucideIcon\r\n className={cn(\r\n iconVariantsProps({ color, size }),\r\n className,\r\n spin && \"sg:animate-spin\",\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport { Icon, iconVariantsProps, iconVariants };\r\n"],"mappings":"AA8CI;AA9CJ,YAAY,WAAW;AACvB,SAAS,WAA8B;AACvC,SAAS,aAA8B;AACvC,SAAS,UAAU;AAEnB,MAAM,eAAe;AAAA,EACnB,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,EACP;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,sBAAsB;AAAA,IACtB,WAAW;AAAA,IACX,wBAAwB;AAAA,IACxB,OAAO;AAAA,IACP,oBAAoB;AAAA,IACpB,aAAa;AAAA,IACb,0BAA0B;AAAA,EAC5B;AACF;AAEA,MAAM,oBAAoB,IAAI,IAAI;AAAA,EAChC,UAAU;AAAA,EACV,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AACF,CAAC;AAQD,SAAS,KAAK,EAAE,WAAW,MAAM,OAAO,MAAM,MAAM,GAAG,MAAM,GAAU;AACrE,QAAM,aAAa,MAAM,IAAI;AAE7B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT,kBAAkB,EAAE,OAAO,KAAK,CAAC;AAAA,QACjC;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/primitives/icon/icon.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { icons, type LucideIcon } from \"lucide-react\";\r\nimport { cn } from \"../../../utils/index\";\r\n\r\nconst iconVariants = {\r\n size: {\r\n xs: \"sg:size-4\",\r\n sm: \"sg:size-8\",\r\n default: \"sg:size-9\",\r\n lg: \"sg:size-10\",\r\n xl: \"sg:size-12\",\r\n xxl: \"sg:size-16\",\r\n },\r\n color: {\r\n default: \"\",\r\n foreground: \"sg:text-foreground\",\r\n primary: \"sg:text-primary\",\r\n \"primary-foreground\": \"sg:text-primary-foreground\",\r\n secondary: \"sg:text-secondary\",\r\n \"secondary-foreground\": \"sg:text-secondary-foreground\",\r\n muted: \"sg:text-muted\",\r\n \"muted-foreground\": \"sg:text-muted-foreground\",\r\n destructive: \"sg:text-destructive\",\r\n \"destructive-foreground\": \"sg:text-destructive-foreground\",\r\n error: \"sg:text-error\",\r\n },\r\n};\r\n\r\nconst iconVariantsProps = cva(\"\", {\r\n variants: iconVariants,\r\n defaultVariants: {\r\n size: \"default\",\r\n color: \"default\",\r\n },\r\n});\r\n\r\ntype Props = Omit<React.ComponentProps<LucideIcon>, \"size\"> &\r\n VariantProps<typeof iconVariantsProps> & {\r\n icon: keyof typeof icons;\r\n spin?: boolean;\r\n };\r\n\r\nfunction Icon({ className, size, color, icon, spin, ...props }: Props) {\r\n const LucideIcon = icons[icon];\r\n\r\n return (\r\n <LucideIcon\r\n className={cn(\r\n iconVariantsProps({ color, size }),\r\n className,\r\n spin && \"sg:animate-spin\",\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport { Icon, iconVariantsProps, iconVariants };\r\n"],"mappings":"AA+CI;AA/CJ,YAAY,WAAW;AACvB,SAAS,WAA8B;AACvC,SAAS,aAA8B;AACvC,SAAS,UAAU;AAEnB,MAAM,eAAe;AAAA,EACnB,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,EACP;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,sBAAsB;AAAA,IACtB,WAAW;AAAA,IACX,wBAAwB;AAAA,IACxB,OAAO;AAAA,IACP,oBAAoB;AAAA,IACpB,aAAa;AAAA,IACb,0BAA0B;AAAA,IAC1B,OAAO;AAAA,EACT;AACF;AAEA,MAAM,oBAAoB,IAAI,IAAI;AAAA,EAChC,UAAU;AAAA,EACV,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AACF,CAAC;AAQD,SAAS,KAAK,EAAE,WAAW,MAAM,OAAO,MAAM,MAAM,GAAG,MAAM,GAAU;AACrE,QAAM,aAAa,MAAM,IAAI;AAE7B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT,kBAAkB,EAAE,OAAO,KAAK,CAAC;AAAA,QACjC;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
@@ -8,6 +8,9 @@ export { LinkButton } from './buttons/link-button.js';
8
8
  export { Collapsible, CollapsibleContent, CollapsibleTrigger } from './collapsible/collapsible.js';
9
9
  export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './dropdown-menu/dropdown-menu.js';
10
10
  export { Checkbox } from './forms/checkbox.js';
11
+ export { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle } from './forms/field.js';
12
+ export { Form, FormActions } from './forms/form.js';
13
+ export { FormControl } from './forms/form-control.js';
11
14
  export { Input } from './forms/input.js';
12
15
  export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue } from './forms/select.js';
13
16
  export { Textarea } from './forms/textarea.js';
@@ -41,6 +44,7 @@ import '../providers/LinkContext.js';
41
44
  import '@radix-ui/react-collapsible';
42
45
  import '@radix-ui/react-dropdown-menu';
43
46
  import '@base-ui/react';
47
+ import '../../lib/forms/field-props.js';
44
48
  import '@base-ui/react/separator';
45
49
  import '@radix-ui/react-dialog';
46
50
  import './text/internal/text-element.js';
@@ -8,6 +8,9 @@ export * from "./buttons/link-button.js";
8
8
  export * from "./collapsible/collapsible.js";
9
9
  export * from "./dropdown-menu/dropdown-menu.js";
10
10
  export * from "./forms/checkbox.js";
11
+ export * from "./forms/field.js";
12
+ export * from "./forms/form.js";
13
+ export * from "./forms/form-control.js";
11
14
  export * from "./forms/input.js";
12
15
  export * from "./forms/select.js";
13
16
  export * from "./forms/textarea.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/primitives/index.ts"],"sourcesContent":["/**\n * Primitives index\n *\n * Please keep exports sorted alphabetically by path!\n */\n\nexport * from \"./accordion/accordion\";\nexport * from \"./alert/alert\";\nexport * from \"./badge/badge\";\nexport * from \"./badge/badges\";\nexport * from \"./buttons/button\";\nexport * from \"./buttons/icon-button\";\nexport * from \"./buttons/link-button\";\nexport * from \"./collapsible/collapsible\";\nexport * from \"./dropdown-menu/dropdown-menu\";\nexport * from \"./forms/checkbox\";\nexport * from \"./forms/input\";\nexport * from \"./forms/select\";\nexport * from \"./forms/textarea\";\nexport * from \"./icon/icon\";\nexport * from \"./label/label\";\nexport * from \"./layout/layout\";\nexport * from \"./link/link\";\nexport * from \"./separator/separator\";\nexport * from \"./sheet/sheet\";\nexport * from \"./skeleton/skeleton\";\nexport * from \"./sonner/sonner\";\nexport * from \"./spinner/spinner\";\nexport * from \"./stack/stack\";\n// export * from \"./table/table\";\nexport * from \"./text/heading\";\nexport * from \"./text/text-code\";\nexport * from \"./text/text-div\";\nexport * from \"./text/text-span\";\nexport * from \"./text/text-time\";\nexport * from \"./text/text\";\nexport * from \"./ui-image/ui-image\";\nexport * from \"./ui-link/ui-link\";\n"],"mappings":"AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAEd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/primitives/index.ts"],"sourcesContent":["/**\n * Primitives index\n *\n * Please keep exports sorted alphabetically by path!\n */\n\nexport * from \"./accordion/accordion\";\nexport * from \"./alert/alert\";\nexport * from \"./badge/badge\";\nexport * from \"./badge/badges\";\nexport * from \"./buttons/button\";\nexport * from \"./buttons/icon-button\";\nexport * from \"./buttons/link-button\";\nexport * from \"./collapsible/collapsible\";\nexport * from \"./dropdown-menu/dropdown-menu\";\nexport * from \"./forms/checkbox\";\nexport * from \"./forms/field\";\nexport * from \"./forms/form\";\nexport * from \"./forms/form-control\";\nexport * from \"./forms/input\";\nexport * from \"./forms/select\";\nexport * from \"./forms/textarea\";\nexport * from \"./icon/icon\";\nexport * from \"./label/label\";\nexport * from \"./layout/layout\";\nexport * from \"./link/link\";\nexport * from \"./separator/separator\";\nexport * from \"./sheet/sheet\";\nexport * from \"./skeleton/skeleton\";\nexport * from \"./sonner/sonner\";\nexport * from \"./spinner/spinner\";\nexport * from \"./stack/stack\";\n// export * from \"./table/table\";\nexport * from \"./text/heading\";\nexport * from \"./text/text-code\";\nexport * from \"./text/text-div\";\nexport * from \"./text/text-span\";\nexport * from \"./text/text-time\";\nexport * from \"./text/text\";\nexport * from \"./ui-image/ui-image\";\nexport * from \"./ui-link/ui-link\";\n"],"mappings":"AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAEd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -33,7 +33,7 @@ declare const layoutVariants: {
33
33
  declare const layoutVariantsProps: (props?: ({
34
34
  type?: "col" | "container" | "full" | "wide" | "narrow" | null | undefined;
35
35
  cols?: "100" | "66-33" | "50-50" | "33-33-33" | "25-25-25-25" | null | undefined;
36
- bgColor?: "primary" | "secondary" | "muted" | "accent" | "transparent" | "background" | "gradient1" | "gradient2" | "gradient-masks-and-opacity" | "gradient-primary-primarymuted-secondary" | null | undefined;
36
+ bgColor?: "secondary" | "primary" | "muted" | "accent" | "transparent" | "background" | "gradient1" | "gradient2" | "gradient-masks-and-opacity" | "gradient-primary-primarymuted-secondary" | null | undefined;
37
37
  } & class_variance_authority_types.ClassProp) | undefined) => string;
38
38
  interface LayoutProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof layoutVariantsProps> {
39
39
  /** Semantic HTML element for the outer wrapper. Defaults to `div`. */
@@ -29,8 +29,8 @@ declare const linkVariants: {
29
29
  };
30
30
  };
31
31
  declare const linkVariantsProps: (props?: ({
32
- variant?: "footer" | "default" | "no-decoration" | "logo" | "nav-mobile" | "nav-mobile-active" | "nav-desktop" | "nav-desktop-active" | null | undefined;
33
- size?: "base" | "sm" | "xs" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | null | undefined;
32
+ variant?: "default" | "footer" | "no-decoration" | "logo" | "nav-mobile" | "nav-mobile-active" | "nav-desktop" | "nav-desktop-active" | null | undefined;
33
+ size?: "base" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | null | undefined;
34
34
  } & class_variance_authority_types.ClassProp) | undefined) => string;
35
35
  type Props = BaseLinkProps & VariantProps<typeof linkVariantsProps> & {
36
36
  iconStart?: keyof typeof icons;
@@ -46,7 +46,7 @@ const SheetContent = React.forwardRef(({ side = "right", className, children, ..
46
46
  className: cn(sheetVariants({ side }), className),
47
47
  ...props,
48
48
  children: [
49
- /* @__PURE__ */ jsxs(SheetPrimitive.Close, { className: "sg:absolute sg:right-4 sg:top-4 sg:rounded-sm sg:opacity-70 sg:ring-offset-background sg:transition-opacity sg:hover:opacity-100 sg:focus:outline-none sg:focus:ring-2 sg:focus:ring-ring sg:focus:ring-offset-2 sg:disabled:pointer-events-none sg:data-[state=open]:bg-secondary", children: [
49
+ /* @__PURE__ */ jsxs(SheetPrimitive.Close, { className: "sg:absolute sg:right-4 sg:top-4 sg:rounded-sm sg:opacity-70 sg:ring-offset-background sg:transition-opacity sg:hover:opacity-100 sg:focus-visible:outline-none sg:focus-visible:ring-2 sg:focus-visible:ring-ring sg:focus-visible:ring-offset-2 sg:disabled:pointer-events-none sg:data-[state=open]:bg-secondary", children: [
50
50
  /* @__PURE__ */ jsx(icons.X, { className: "sg:h-4 sg:w-4" }),
51
51
  /* @__PURE__ */ jsx("span", { className: "sg:sr-only", children: "Close" })
52
52
  ] }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/primitives/sheet/sheet.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { icons } from \"lucide-react\";\n\nimport { cn } from \"singularity-components/utils\";\n\nconst Sheet = SheetPrimitive.Root;\n\nconst SheetTrigger = SheetPrimitive.Trigger;\n\nconst SheetClose = SheetPrimitive.Close;\n\nconst SheetPortal = SheetPrimitive.Portal;\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n \"sg:fixed sg:inset-0 sg:z-50 sg:bg-black/80 sg:data-[state=open]:animate-in sg:data-[state=closed]:animate-out sg:data-[state=closed]:fade-out-0 sg:data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetVariants = cva(\n \"sg:fixed sg:z-50 sg:gap-4 sg:bg-background sg:p-6 sg:shadow-lg sg:transition sg:ease-in-out sg:data-[state=open]:animate-in sg:data-[state=closed]:animate-out sg:data-[state=closed]:duration-300 sg:data-[state=open]:duration-500\",\n {\n variants: {\n side: {\n top: \"sg:inset-x-0 sg:top-0 sg:border-b sg:data-[state=closed]:slide-out-to-top sg:data-[state=open]:slide-in-from-top\",\n bottom:\n \"sg:inset-x-0 sg:bottom-0 sg:border-t sg:data-[state=closed]:slide-out-to-bottom sg:data-[state=open]:slide-in-from-bottom\",\n left: \"sg:inset-y-0 sg:left-0 sg:h-full sg:w-3/4 sg:border-r sg:data-[state=closed]:slide-out-to-left sg:data-[state=open]:slide-in-from-left sg:sm:max-w-sm\",\n right:\n \"sg:inset-y-0 sg:right-0 sg:h-full sg:w-3/4 sg:border-l sg:data-[state=closed]:slide-out-to-right sg:data-[state=open]:slide-in-from-right sg:sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n },\n);\n\ninterface SheetContentProps\n extends\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = \"right\", className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n <SheetPrimitive.Close className=\"sg:absolute sg:right-4 sg:top-4 sg:rounded-sm sg:opacity-70 sg:ring-offset-background sg:transition-opacity sg:hover:opacity-100 sg:focus:outline-none sg:focus:ring-2 sg:focus:ring-ring sg:focus:ring-offset-2 sg:disabled:pointer-events-none sg:data-[state=open]:bg-secondary\">\n <icons.X className=\"sg:h-4 sg:w-4\" />\n <span className=\"sg:sr-only\">Close</span>\n </SheetPrimitive.Close>\n {children}\n </SheetPrimitive.Content>\n </SheetPortal>\n));\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"sg:flex sg:flex-col sg:space-y-2 sg:text-center sg:sm:text-left\",\n className,\n )}\n {...props}\n />\n);\nSheetHeader.displayName = \"SheetHeader\";\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"sg:flex sg:flex-col-reverse sg:sm:flex-row sg:sm:justify-end sg:sm:space-x-2\",\n className,\n )}\n {...props}\n />\n);\nSheetFooter.displayName = \"SheetFooter\";\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn(\"sg:text-lg sg:font-semibold sg:text-foreground\", className)}\n {...props}\n />\n));\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description\n ref={ref}\n className={cn(\"sg:text-sm sg:text-muted-foreground\", className)}\n {...props}\n />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n"],"mappings":";AAqBE,cA8CI,YA9CJ;AAnBF,YAAY,WAAW;AACvB,YAAY,oBAAoB;AAChC,SAAS,WAA8B;AACvC,SAAS,aAAa;AAEtB,SAAS,UAAU;AAEnB,MAAM,QAAQ,eAAe;AAE7B,MAAM,eAAe,eAAe;AAEpC,MAAM,aAAa,eAAe;AAElC,MAAM,cAAc,eAAe;AAEnC,MAAM,eAAe,MAAM,WAGzB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC,eAAe;AAAA,EAAf;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA,IACJ;AAAA;AACF,CACD;AACD,aAAa,cAAc,eAAe,QAAQ;AAElD,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,KAAK;AAAA,QACL,QACE;AAAA,QACF,MAAM;AAAA,QACN,OACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAOA,MAAM,eAAe,MAAM,WAGzB,CAAC,EAAE,OAAO,SAAS,WAAW,UAAU,GAAG,MAAM,GAAG,QACpD,qBAAC,eACC;AAAA,sBAAC,gBAAa;AAAA,EACd;AAAA,IAAC,eAAe;AAAA,IAAf;AAAA,MACC;AAAA,MACA,WAAW,GAAG,cAAc,EAAE,KAAK,CAAC,GAAG,SAAS;AAAA,MAC/C,GAAG;AAAA,MAEJ;AAAA,6BAAC,eAAe,OAAf,EAAqB,WAAU,sRAC9B;AAAA,8BAAC,MAAM,GAAN,EAAQ,WAAU,iBAAgB;AAAA,UACnC,oBAAC,UAAK,WAAU,cAAa,mBAAK;AAAA,WACpC;AAAA,QACC;AAAA;AAAA;AAAA,EACH;AAAA,GACF,CACD;AACD,aAAa,cAAc,eAAe,QAAQ;AAElD,MAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,YAAY,cAAc;AAE1B,MAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,YAAY,cAAc;AAE1B,MAAM,aAAa,MAAM,WAGvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC,eAAe;AAAA,EAAf;AAAA,IACC;AAAA,IACA,WAAW,GAAG,kDAAkD,SAAS;AAAA,IACxE,GAAG;AAAA;AACN,CACD;AACD,WAAW,cAAc,eAAe,MAAM;AAE9C,MAAM,mBAAmB,MAAM,WAG7B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC,eAAe;AAAA,EAAf;AAAA,IACC;AAAA,IACA,WAAW,GAAG,uCAAuC,SAAS;AAAA,IAC7D,GAAG;AAAA;AACN,CACD;AACD,iBAAiB,cAAc,eAAe,YAAY;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/primitives/sheet/sheet.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { icons } from \"lucide-react\";\n\nimport { cn } from \"singularity-components/utils\";\n\nconst Sheet = SheetPrimitive.Root;\n\nconst SheetTrigger = SheetPrimitive.Trigger;\n\nconst SheetClose = SheetPrimitive.Close;\n\nconst SheetPortal = SheetPrimitive.Portal;\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n \"sg:fixed sg:inset-0 sg:z-50 sg:bg-black/80 sg:data-[state=open]:animate-in sg:data-[state=closed]:animate-out sg:data-[state=closed]:fade-out-0 sg:data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetVariants = cva(\n \"sg:fixed sg:z-50 sg:gap-4 sg:bg-background sg:p-6 sg:shadow-lg sg:transition sg:ease-in-out sg:data-[state=open]:animate-in sg:data-[state=closed]:animate-out sg:data-[state=closed]:duration-300 sg:data-[state=open]:duration-500\",\n {\n variants: {\n side: {\n top: \"sg:inset-x-0 sg:top-0 sg:border-b sg:data-[state=closed]:slide-out-to-top sg:data-[state=open]:slide-in-from-top\",\n bottom:\n \"sg:inset-x-0 sg:bottom-0 sg:border-t sg:data-[state=closed]:slide-out-to-bottom sg:data-[state=open]:slide-in-from-bottom\",\n left: \"sg:inset-y-0 sg:left-0 sg:h-full sg:w-3/4 sg:border-r sg:data-[state=closed]:slide-out-to-left sg:data-[state=open]:slide-in-from-left sg:sm:max-w-sm\",\n right:\n \"sg:inset-y-0 sg:right-0 sg:h-full sg:w-3/4 sg:border-l sg:data-[state=closed]:slide-out-to-right sg:data-[state=open]:slide-in-from-right sg:sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n },\n);\n\ninterface SheetContentProps\n extends\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = \"right\", className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n <SheetPrimitive.Close className=\"sg:absolute sg:right-4 sg:top-4 sg:rounded-sm sg:opacity-70 sg:ring-offset-background sg:transition-opacity sg:hover:opacity-100 sg:focus-visible:outline-none sg:focus-visible:ring-2 sg:focus-visible:ring-ring sg:focus-visible:ring-offset-2 sg:disabled:pointer-events-none sg:data-[state=open]:bg-secondary\">\n <icons.X className=\"sg:h-4 sg:w-4\" />\n <span className=\"sg:sr-only\">Close</span>\n </SheetPrimitive.Close>\n {children}\n </SheetPrimitive.Content>\n </SheetPortal>\n));\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"sg:flex sg:flex-col sg:space-y-2 sg:text-center sg:sm:text-left\",\n className,\n )}\n {...props}\n />\n);\nSheetHeader.displayName = \"SheetHeader\";\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"sg:flex sg:flex-col-reverse sg:sm:flex-row sg:sm:justify-end sg:sm:space-x-2\",\n className,\n )}\n {...props}\n />\n);\nSheetFooter.displayName = \"SheetFooter\";\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn(\"sg:text-lg sg:font-semibold sg:text-foreground\", className)}\n {...props}\n />\n));\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description\n ref={ref}\n className={cn(\"sg:text-sm sg:text-muted-foreground\", className)}\n {...props}\n />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n"],"mappings":";AAqBE,cA8CI,YA9CJ;AAnBF,YAAY,WAAW;AACvB,YAAY,oBAAoB;AAChC,SAAS,WAA8B;AACvC,SAAS,aAAa;AAEtB,SAAS,UAAU;AAEnB,MAAM,QAAQ,eAAe;AAE7B,MAAM,eAAe,eAAe;AAEpC,MAAM,aAAa,eAAe;AAElC,MAAM,cAAc,eAAe;AAEnC,MAAM,eAAe,MAAM,WAGzB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC,eAAe;AAAA,EAAf;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA,IACJ;AAAA;AACF,CACD;AACD,aAAa,cAAc,eAAe,QAAQ;AAElD,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,KAAK;AAAA,QACL,QACE;AAAA,QACF,MAAM;AAAA,QACN,OACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAOA,MAAM,eAAe,MAAM,WAGzB,CAAC,EAAE,OAAO,SAAS,WAAW,UAAU,GAAG,MAAM,GAAG,QACpD,qBAAC,eACC;AAAA,sBAAC,gBAAa;AAAA,EACd;AAAA,IAAC,eAAe;AAAA,IAAf;AAAA,MACC;AAAA,MACA,WAAW,GAAG,cAAc,EAAE,KAAK,CAAC,GAAG,SAAS;AAAA,MAC/C,GAAG;AAAA,MAEJ;AAAA,6BAAC,eAAe,OAAf,EAAqB,WAAU,sTAC9B;AAAA,8BAAC,MAAM,GAAN,EAAQ,WAAU,iBAAgB;AAAA,UACnC,oBAAC,UAAK,WAAU,cAAa,mBAAK;AAAA,WACpC;AAAA,QACC;AAAA;AAAA;AAAA,EACH;AAAA,GACF,CACD;AACD,aAAa,cAAc,eAAe,QAAQ;AAElD,MAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,YAAY,cAAc;AAE1B,MAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA;AACN;AAEF,YAAY,cAAc;AAE1B,MAAM,aAAa,MAAM,WAGvB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC,eAAe;AAAA,EAAf;AAAA,IACC;AAAA,IACA,WAAW,GAAG,kDAAkD,SAAS;AAAA,IACxE,GAAG;AAAA;AACN,CACD;AACD,WAAW,cAAc,eAAe,MAAM;AAE9C,MAAM,mBAAmB,MAAM,WAG7B,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAC1B;AAAA,EAAC,eAAe;AAAA,EAAf;AAAA,IACC;AAAA,IACA,WAAW,GAAG,uCAAuC,SAAS;AAAA,IAC7D,GAAG;AAAA;AACN,CACD;AACD,iBAAiB,cAAc,eAAe,YAAY;","names":[]}
@@ -48,8 +48,8 @@ declare const stackVariants: (props?: ({
48
48
  gap?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | null | undefined;
49
49
  direction?: "row" | "column" | null | undefined;
50
50
  wrap?: "default" | "wrap" | "nowrap" | null | undefined;
51
- alignItems?: "center" | "default" | "end" | "start" | null | undefined;
52
- justifyContent?: "center" | "default" | "end" | "start" | null | undefined;
51
+ alignItems?: "default" | "center" | "end" | "start" | null | undefined;
52
+ justifyContent?: "default" | "center" | "end" | "start" | null | undefined;
53
53
  } & class_variance_authority_types.ClassProp) | undefined) => string;
54
54
  interface StackProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof stackVariants> {
55
55
  /** Merge props onto the child via Radix Slot instead of rendering a wrapper div. */
@@ -15,6 +15,9 @@ declare const textElementForeground: {
15
15
  "accent-foreground": string;
16
16
  card: string;
17
17
  "card-foreground": string;
18
+ destructive: string;
19
+ "destructive-foreground": string;
20
+ error: string;
18
21
  "primary-light-to-dark": string;
19
22
  "primary-dark-to-light": string;
20
23
  "multi-color": string;
@@ -57,6 +60,9 @@ declare const textElementVariants: {
57
60
  "accent-foreground": string;
58
61
  card: string;
59
62
  "card-foreground": string;
63
+ destructive: string;
64
+ "destructive-foreground": string;
65
+ error: string;
60
66
  "primary-light-to-dark": string;
61
67
  "primary-dark-to-light": string;
62
68
  "multi-color": string;
@@ -69,8 +75,8 @@ declare const textElementVariants: {
69
75
  };
70
76
  };
71
77
  declare const textElementVariantsProps: (props?: ({
72
- size?: "base" | "sm" | "xs" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | null | undefined;
73
- foreground?: "default" | "card" | "foreground" | "primary" | "primary-foreground" | "secondary" | "secondary-foreground" | "muted" | "muted-foreground" | "accent" | "accent-foreground" | "card-foreground" | "primary-light-to-dark" | "primary-dark-to-light" | "multi-color" | null | undefined;
78
+ size?: "base" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | null | undefined;
79
+ foreground?: "default" | "secondary" | "destructive" | "foreground" | "primary" | "primary-foreground" | "secondary-foreground" | "muted" | "muted-foreground" | "accent" | "accent-foreground" | "card" | "card-foreground" | "destructive-foreground" | "error" | "primary-light-to-dark" | "primary-dark-to-light" | "multi-color" | null | undefined;
74
80
  fontweight?: "bold" | "normal" | "medium" | "semibold" | null | undefined;
75
81
  } & class_variance_authority_types.ClassProp) | undefined) => string;
76
82
  interface TextElementProps extends React__default.HTMLAttributes<HTMLElement>, VariantProps<typeof textElementVariantsProps> {
@@ -15,6 +15,9 @@ const textElementForeground = {
15
15
  "accent-foreground": "sg:text-accent-foreground",
16
16
  card: "sg:text-card",
17
17
  "card-foreground": "sg:text-card-foreground",
18
+ destructive: "sg:text-destructive",
19
+ "destructive-foreground": "sg:text-destructive-foreground",
20
+ error: "sg:text-error",
18
21
  "primary-light-to-dark": "sg:bg-gradient-to-r sg:from-primary-light sg:to-primary-dark sg:bg-clip-text sg:text-transparent",
19
22
  "primary-dark-to-light": "sg:bg-gradient-to-r sg:from-primary-dark sg:to-primary-light sg:bg-clip-text sg:text-transparent",
20
23
  "multi-color": "sg:bg-gradient-to-r sg:from-primary sg:via-destructive sg:to-primary-dark sg:bg-clip-text sg:text-transparent"
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/primitives/text/internal/text-element.tsx"],"sourcesContent":["import React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"../../../../utils/index\";\r\n\r\nexport const textElementForeground = {\r\n default: \"\",\r\n foreground: \"sg:text-foreground\",\r\n primary: \"sg:text-primary\",\r\n \"primary-foreground\": \"sg:text-primary-foreground\",\r\n secondary: \"sg:text-secondary\",\r\n \"secondary-foreground\": \"sg:text-secondary-foreground\",\r\n muted: \"sg:text-muted\",\r\n \"muted-foreground\": \"sg:text-muted-foreground\",\r\n accent: \"sg:text-accent\",\r\n \"accent-foreground\": \"sg:text-accent-foreground\",\r\n card: \"sg:text-card\",\r\n \"card-foreground\": \"sg:text-card-foreground\",\r\n\r\n \"primary-light-to-dark\":\r\n \"sg:bg-gradient-to-r sg:from-primary-light sg:to-primary-dark sg:bg-clip-text sg:text-transparent\",\r\n \"primary-dark-to-light\":\r\n \"sg:bg-gradient-to-r sg:from-primary-dark sg:to-primary-light sg:bg-clip-text sg:text-transparent\",\r\n \"multi-color\":\r\n \"sg:bg-gradient-to-r sg:from-primary sg:via-destructive sg:to-primary-dark sg:bg-clip-text sg:text-transparent\",\r\n};\r\n\r\nexport const textElementSize = {\r\n xs: \"sg:text-xs\",\r\n sm: \"sg:text-sm\",\r\n md: \"sg:text-md\",\r\n base: \"sg:text-base\",\r\n lg: \"sg:text-lg\",\r\n xl: \"sg:text-xl\",\r\n \"2xl\": \"sg:text-2xl\",\r\n \"3xl\": \"sg:text-3xl\",\r\n \"4xl\": \"sg:text-4xl\",\r\n \"5xl\": \"sg:text-5xl\",\r\n};\r\n\r\nexport const textElementVariants = {\r\n size: textElementSize,\r\n foreground: textElementForeground,\r\n fontweight: {\r\n normal: \"sg:font-normal\",\r\n medium: \"sg:font-medium\",\r\n semibold: \"sg:font-semibold\",\r\n bold: \"sg:font-bold\",\r\n },\r\n};\r\n\r\nexport const textElementVariantsProps = cva(\"\", {\r\n variants: textElementVariants,\r\n defaultVariants: {\r\n size: \"base\",\r\n foreground: \"default\",\r\n fontweight: \"normal\",\r\n },\r\n});\r\n\r\nexport interface TextElementProps\r\n extends\r\n React.HTMLAttributes<HTMLElement>,\r\n VariantProps<typeof textElementVariantsProps> {\r\n as?: \"p\" | \"div\" | \"span\" | \"time\" | \"code\";\r\n}\r\n\r\nexport const TextElement = ({\r\n as = \"div\",\r\n children,\r\n size,\r\n foreground,\r\n fontweight,\r\n className,\r\n ...props\r\n}: TextElementProps) => {\r\n const Component = as;\r\n return (\r\n <Component\r\n className={cn(\r\n textElementVariantsProps({\r\n size,\r\n foreground,\r\n fontweight,\r\n }),\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </Component>\r\n );\r\n};\r\n"],"mappings":"AA6EI;AA7EJ,OAAO,WAAW;AAClB,SAAS,WAA8B;AACvC,SAAS,UAAU;AAEZ,MAAM,wBAAwB;AAAA,EACnC,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,sBAAsB;AAAA,EACtB,WAAW;AAAA,EACX,wBAAwB;AAAA,EACxB,OAAO;AAAA,EACP,oBAAoB;AAAA,EACpB,QAAQ;AAAA,EACR,qBAAqB;AAAA,EACrB,MAAM;AAAA,EACN,mBAAmB;AAAA,EAEnB,yBACE;AAAA,EACF,yBACE;AAAA,EACF,eACE;AACJ;AAEO,MAAM,kBAAkB;AAAA,EAC7B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACT;AAEO,MAAM,sBAAsB;AAAA,EACjC,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,EACR;AACF;AAEO,MAAM,2BAA2B,IAAI,IAAI;AAAA,EAC9C,UAAU;AAAA,EACV,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AACF,CAAC;AASM,MAAM,cAAc,CAAC;AAAA,EAC1B,KAAK;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAwB;AACtB,QAAM,YAAY;AAClB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT,yBAAyB;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/components/primitives/text/internal/text-element.tsx"],"sourcesContent":["import React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"../../../../utils/index\";\r\n\r\nexport const textElementForeground = {\r\n default: \"\",\r\n foreground: \"sg:text-foreground\",\r\n primary: \"sg:text-primary\",\r\n \"primary-foreground\": \"sg:text-primary-foreground\",\r\n secondary: \"sg:text-secondary\",\r\n \"secondary-foreground\": \"sg:text-secondary-foreground\",\r\n muted: \"sg:text-muted\",\r\n \"muted-foreground\": \"sg:text-muted-foreground\",\r\n accent: \"sg:text-accent\",\r\n \"accent-foreground\": \"sg:text-accent-foreground\",\r\n card: \"sg:text-card\",\r\n \"card-foreground\": \"sg:text-card-foreground\",\r\n destructive: \"sg:text-destructive\",\r\n \"destructive-foreground\": \"sg:text-destructive-foreground\",\r\n error: \"sg:text-error\",\r\n\r\n \"primary-light-to-dark\":\r\n \"sg:bg-gradient-to-r sg:from-primary-light sg:to-primary-dark sg:bg-clip-text sg:text-transparent\",\r\n \"primary-dark-to-light\":\r\n \"sg:bg-gradient-to-r sg:from-primary-dark sg:to-primary-light sg:bg-clip-text sg:text-transparent\",\r\n \"multi-color\":\r\n \"sg:bg-gradient-to-r sg:from-primary sg:via-destructive sg:to-primary-dark sg:bg-clip-text sg:text-transparent\",\r\n};\r\n\r\nexport const textElementSize = {\r\n xs: \"sg:text-xs\",\r\n sm: \"sg:text-sm\",\r\n md: \"sg:text-md\",\r\n base: \"sg:text-base\",\r\n lg: \"sg:text-lg\",\r\n xl: \"sg:text-xl\",\r\n \"2xl\": \"sg:text-2xl\",\r\n \"3xl\": \"sg:text-3xl\",\r\n \"4xl\": \"sg:text-4xl\",\r\n \"5xl\": \"sg:text-5xl\",\r\n};\r\n\r\nexport const textElementVariants = {\r\n size: textElementSize,\r\n foreground: textElementForeground,\r\n fontweight: {\r\n normal: \"sg:font-normal\",\r\n medium: \"sg:font-medium\",\r\n semibold: \"sg:font-semibold\",\r\n bold: \"sg:font-bold\",\r\n },\r\n};\r\n\r\nexport const textElementVariantsProps = cva(\"\", {\r\n variants: textElementVariants,\r\n defaultVariants: {\r\n size: \"base\",\r\n foreground: \"default\",\r\n fontweight: \"normal\",\r\n },\r\n});\r\n\r\nexport interface TextElementProps\r\n extends\r\n React.HTMLAttributes<HTMLElement>,\r\n VariantProps<typeof textElementVariantsProps> {\r\n as?: \"p\" | \"div\" | \"span\" | \"time\" | \"code\";\r\n}\r\n\r\nexport const TextElement = ({\r\n as = \"div\",\r\n children,\r\n size,\r\n foreground,\r\n fontweight,\r\n className,\r\n ...props\r\n}: TextElementProps) => {\r\n const Component = as;\r\n return (\r\n <Component\r\n className={cn(\r\n textElementVariantsProps({\r\n size,\r\n foreground,\r\n fontweight,\r\n }),\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n </Component>\r\n );\r\n};\r\n"],"mappings":"AAgFI;AAhFJ,OAAO,WAAW;AAClB,SAAS,WAA8B;AACvC,SAAS,UAAU;AAEZ,MAAM,wBAAwB;AAAA,EACnC,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,sBAAsB;AAAA,EACtB,WAAW;AAAA,EACX,wBAAwB;AAAA,EACxB,OAAO;AAAA,EACP,oBAAoB;AAAA,EACpB,QAAQ;AAAA,EACR,qBAAqB;AAAA,EACrB,MAAM;AAAA,EACN,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb,0BAA0B;AAAA,EAC1B,OAAO;AAAA,EAEP,yBACE;AAAA,EACF,yBACE;AAAA,EACF,eACE;AACJ;AAEO,MAAM,kBAAkB;AAAA,EAC7B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACT;AAEO,MAAM,sBAAsB;AAAA,EACjC,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,EACR;AACF;AAEO,MAAM,2BAA2B,IAAI,IAAI;AAAA,EAC9C,UAAU;AAAA,EACV,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AACF,CAAC;AASM,MAAM,cAAc,CAAC;AAAA,EAC1B,KAAK;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAwB;AACtB,QAAM,YAAY;AAClB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT,yBAAyB;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;","names":[]}
@@ -17,7 +17,7 @@ declare const textCodeVariants: {
17
17
  };
18
18
  };
19
19
  declare const textCodeVariantsProps: (props?: ({
20
- size?: "base" | "sm" | "xs" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | null | undefined;
20
+ size?: "base" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | null | undefined;
21
21
  } & class_variance_authority_types.ClassProp) | undefined) => string;
22
22
  interface TextCodeProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof textCodeVariantsProps> {
23
23
  }
@@ -1,4 +1,5 @@
1
1
  export { Container } from './container/container.js';
2
2
  export { Footer } from './footer/footer.js';
3
+ export { LoadingScreen } from './loading-screen/loading-screen.js';
3
4
  export { Header, HeaderProps, NavLink } from './navigation/header.js';
4
5
  import 'react';
@@ -1,5 +1,6 @@
1
1
  export * from "./container/container.js";
2
2
  export * from "./footer/footer.js";
3
3
  export * from "./hero/hero.js";
4
+ export * from "./loading-screen/loading-screen.js";
4
5
  export * from "./navigation/index.js";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/templates/index.ts"],"sourcesContent":["/**\n * Templates index\n *\n * Please keep exports sorted alphabetically by path!\n */\n\nexport * from \"./container/container\";\nexport * from \"./footer/footer\";\nexport * from \"./hero/hero\";\nexport * from \"./navigation/index\";\n"],"mappings":"AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/templates/index.ts"],"sourcesContent":["/**\n * Templates index\n *\n * Please keep exports sorted alphabetically by path!\n */\n\nexport * from \"./container/container\";\nexport * from \"./footer/footer\";\nexport * from \"./hero/hero\";\nexport * from \"./loading-screen/loading-screen\";\nexport * from \"./navigation/index\";\n"],"mappings":"AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+
3
+ type Props = {
4
+ brand?: string;
5
+ message?: string;
6
+ };
7
+ /** Full-screen branded loading overlay. */
8
+ declare function LoadingScreen({ brand, message, }: Props): React.JSX.Element;
9
+
10
+ export { LoadingScreen };
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { motion } from "framer-motion";
4
+ import { Heading, Text } from "../../primitives/index.js";
5
+ function LoadingScreen({
6
+ brand = "filion.",
7
+ message = "Loading\u2026"
8
+ }) {
9
+ const [name, accent] = brand.includes(".") ? [brand.replace(".", ""), "."] : [brand, ""];
10
+ return /* @__PURE__ */ jsx("div", { className: "sg:fixed sg:inset-0 sg:z-[100] sg:flex sg:flex-col sg:items-center sg:justify-center sg:bg-background", children: /* @__PURE__ */ jsxs(
11
+ motion.div,
12
+ {
13
+ initial: { opacity: 0, scale: 0.9 },
14
+ animate: { opacity: 1, scale: 1 },
15
+ transition: { duration: 0.3 },
16
+ className: "sg:text-center",
17
+ children: [
18
+ /* @__PURE__ */ jsxs(Heading, { variant: "h3", className: "sg:text-primary", children: [
19
+ name,
20
+ accent && /* @__PURE__ */ jsx("span", { className: "sg:text-secondary", children: accent })
21
+ ] }),
22
+ /* @__PURE__ */ jsx("div", { className: "sg:mt-6 sg:flex sg:items-center sg:justify-center sg:gap-1.5", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx(
23
+ motion.div,
24
+ {
25
+ className: "sg:h-2 sg:w-2 sg:rounded-full sg:bg-primary",
26
+ animate: { opacity: [0.3, 1, 0.3], scale: [0.8, 1.2, 0.8] },
27
+ transition: { duration: 1, repeat: Infinity, delay: i * 0.2 }
28
+ },
29
+ i
30
+ )) }),
31
+ /* @__PURE__ */ jsx(Text, { size: "sm", foreground: "muted-foreground", className: "sg:mt-4", children: message })
32
+ ]
33
+ }
34
+ ) });
35
+ }
36
+ export {
37
+ LoadingScreen
38
+ };
39
+ //# sourceMappingURL=loading-screen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/templates/loading-screen/loading-screen.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { motion } from \"framer-motion\";\r\nimport { Heading, Text } from \"../../primitives/index\";\r\n\r\ntype Props = {\r\n\tbrand?: string;\r\n\tmessage?: string;\r\n};\r\n\r\n/** Full-screen branded loading overlay. */\r\nexport function LoadingScreen({\r\n\tbrand = \"filion.\",\r\n\tmessage = \"Loading…\",\r\n}: Props) {\r\n\tconst [name, accent] = brand.includes(\".\")\r\n\t\t? [brand.replace(\".\", \"\"), \".\"]\r\n\t\t: [brand, \"\"];\r\n\r\n\treturn (\r\n\t\t<div className=\"sg:fixed sg:inset-0 sg:z-[100] sg:flex sg:flex-col sg:items-center sg:justify-center sg:bg-background\">\r\n\t\t\t<motion.div\r\n\t\t\t\tinitial={{ opacity: 0, scale: 0.9 }}\r\n\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\r\n\t\t\t\ttransition={{ duration: 0.3 }}\r\n\t\t\t\tclassName=\"sg:text-center\"\r\n\t\t\t>\r\n\t\t\t\t<Heading variant=\"h3\" className=\"sg:text-primary\">\r\n\t\t\t\t\t{name}\r\n\t\t\t\t\t{accent && (\r\n\t\t\t\t\t\t<span className=\"sg:text-secondary\">{accent}</span>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</Heading>\r\n\t\t\t\t<div className=\"sg:mt-6 sg:flex sg:items-center sg:justify-center sg:gap-1.5\">\r\n\t\t\t\t\t{[0, 1, 2].map((i) => (\r\n\t\t\t\t\t\t<motion.div\r\n\t\t\t\t\t\t\tkey={i}\r\n\t\t\t\t\t\t\tclassName=\"sg:h-2 sg:w-2 sg:rounded-full sg:bg-primary\"\r\n\t\t\t\t\t\t\tanimate={{ opacity: [0.3, 1, 0.3], scale: [0.8, 1.2, 0.8] }}\r\n\t\t\t\t\t\t\ttransition={{ duration: 1, repeat: Infinity, delay: i * 0.2 }}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t))}\r\n\t\t\t\t</div>\r\n\t\t\t\t<Text size=\"sm\" foreground=\"muted-foreground\" className=\"sg:mt-4\">\r\n\t\t\t\t\t{message}\r\n\t\t\t\t</Text>\r\n\t\t\t</motion.div>\r\n\t\t</div>\r\n\t);\r\n}\r\n"],"mappings":";AA2BI,SAGE,KAHF;AAzBJ,SAAS,cAAc;AACvB,SAAS,SAAS,YAAY;AAQvB,SAAS,cAAc;AAAA,EAC7B,QAAQ;AAAA,EACR,UAAU;AACX,GAAU;AACT,QAAM,CAAC,MAAM,MAAM,IAAI,MAAM,SAAS,GAAG,IACtC,CAAC,MAAM,QAAQ,KAAK,EAAE,GAAG,GAAG,IAC5B,CAAC,OAAO,EAAE;AAEb,SACC,oBAAC,SAAI,WAAU,yGACd;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACA,SAAS,EAAE,SAAS,GAAG,OAAO,IAAI;AAAA,MAClC,SAAS,EAAE,SAAS,GAAG,OAAO,EAAE;AAAA,MAChC,YAAY,EAAE,UAAU,IAAI;AAAA,MAC5B,WAAU;AAAA,MAEV;AAAA,6BAAC,WAAQ,SAAQ,MAAK,WAAU,mBAC9B;AAAA;AAAA,UACA,UACA,oBAAC,UAAK,WAAU,qBAAqB,kBAAO;AAAA,WAE9C;AAAA,QACA,oBAAC,SAAI,WAAU,gEACb,WAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,MACf;AAAA,UAAC,OAAO;AAAA,UAAP;AAAA,YAEA,WAAU;AAAA,YACV,SAAS,EAAE,SAAS,CAAC,KAAK,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,KAAK,GAAG,EAAE;AAAA,YAC1D,YAAY,EAAE,UAAU,GAAG,QAAQ,UAAU,OAAO,IAAI,IAAI;AAAA;AAAA,UAHvD;AAAA,QAIN,CACA,GACF;AAAA,QACA,oBAAC,QAAK,MAAK,MAAK,YAAW,oBAAmB,WAAU,WACtD,mBACF;AAAA;AAAA;AAAA,EACD,GACD;AAEF;","names":[]}
@@ -35,6 +35,7 @@
35
35
  --sg-accent-foreground: var(--sg-charcoal);
36
36
  --sg-destructive: var(--sg-crimson);
37
37
  --sg-destructive-foreground: var(--sg-cream);
38
+ --sg-error: var(--sg-crimson);
38
39
  --sg-border: var(--sg-silver);
39
40
  --sg-input: var(--sg-silver);
40
41
  --sg-ring: var(--sg-terracotta);
@@ -65,6 +66,7 @@
65
66
  --sg-accent-foreground: var(--sg-cloud);
66
67
  --sg-destructive: var(--sg-crimson-light);
67
68
  --sg-destructive-foreground: var(--sg-cream);
69
+ --sg-error: var(--sg-crimson-light);
68
70
  --sg-border: var(--sg-slate);
69
71
  --sg-input: var(--sg-slate);
70
72
  --sg-ring: var(--sg-terracotta-light);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/css/variables.css"],"sourcesContent":[":root {\n /* Neutrals */\n --sg-black: oklch(0.25 0 0);\n --sg-charcoal: oklch(0.35 0.01 60);\n --sg-ash: oklch(0.44 0 0);\n --sg-silver: oklch(0.78 0.01 60);\n --sg-fog: oklch(0.92 0.005 240);\n --sg-cream: oklch(0.97 0.01 80);\n --sg-white: oklch(0.99 0.005 80);\n --sg-pure-white: oklch(1 0 0);\n\n /* Brand colors */\n --sg-terracotta: oklch(0.52 0.15 35);\n --sg-terracotta-light: oklch(0.65 0.16 35);\n --sg-amber: oklch(0.72 0.15 75);\n --sg-amber-dark: oklch(0.45 0.08 75);\n --sg-sand: oklch(0.93 0.03 80);\n\n /* Feedback */\n --sg-crimson: oklch(0.55 0.22 25);\n --sg-crimson-light: oklch(0.6 0.2 25);\n\n /* Dark mode neutrals */\n --sg-night: oklch(0.22 0.01 60);\n --sg-onyx: oklch(0.28 0 0);\n --sg-slate: oklch(0.43 0 0);\n --sg-dove: oklch(0.82 0.01 60);\n --sg-cloud: oklch(0.88 0.01 60);\n\n /* ── Semantic mapping – Light mode ── */\n --sg-background: var(--sg-cream);\n --sg-foreground: var(--sg-black);\n\n --sg-card: var(--sg-pure-white);\n --sg-card-foreground: var(--sg-black);\n\n --sg-popover: var(--sg-pure-white);\n --sg-popover-foreground: var(--sg-black);\n\n --sg-primary: var(--sg-terracotta);\n --sg-primary-foreground: var(--sg-cream);\n\n --sg-secondary: var(--sg-amber);\n --sg-secondary-foreground: var(--sg-black);\n\n --sg-muted: var(--sg-fog);\n --sg-muted-foreground: var(--sg-ash);\n\n --sg-accent: var(--sg-sand);\n --sg-accent-foreground: var(--sg-charcoal);\n\n --sg-destructive: var(--sg-crimson);\n --sg-destructive-foreground: var(--sg-cream);\n\n --sg-border: var(--sg-silver);\n --sg-input: var(--sg-silver);\n --sg-ring: var(--sg-terracotta);\n\n --sg-radius: 0.5rem;\n\n --sg-sidebar-background: var(--sg-cream);\n --sg-sidebar-foreground: var(--sg-black);\n --sg-sidebar-primary: var(--sg-terracotta);\n --sg-sidebar-primary-foreground: var(--sg-cream);\n --sg-sidebar-accent: var(--sg-fog);\n --sg-sidebar-accent-foreground: var(--sg-charcoal);\n --sg-sidebar-border: var(--sg-silver);\n --sg-sidebar-ring: var(--sg-terracotta);\n}\n\n.dark {\n --sg-background: var(--sg-charcoal);\n --sg-foreground: var(--sg-cloud);\n\n --sg-card: var(--sg-night);\n --sg-card-foreground: var(--sg-cloud);\n\n --sg-popover: var(--sg-night);\n --sg-popover-foreground: var(--sg-cloud);\n\n --sg-primary: var(--sg-terracotta-light);\n --sg-primary-foreground: var(--sg-night);\n\n --sg-secondary: var(--sg-amber);\n --sg-secondary-foreground: var(--sg-night);\n\n --sg-muted: var(--sg-slate);\n --sg-muted-foreground: var(--sg-dove);\n\n --sg-accent: var(--sg-onyx);\n --sg-accent-foreground: var(--sg-cloud);\n\n --sg-destructive: var(--sg-crimson-light);\n --sg-destructive-foreground: var(--sg-cream);\n\n --sg-border: var(--sg-slate);\n --sg-input: var(--sg-slate);\n --sg-ring: var(--sg-terracotta-light);\n\n --sg-sidebar-background: var(--sg-night);\n --sg-sidebar-foreground: var(--sg-cloud);\n --sg-sidebar-primary: var(--sg-terracotta-light);\n --sg-sidebar-primary-foreground: var(--sg-night);\n --sg-sidebar-accent: var(--sg-onyx);\n --sg-sidebar-accent-foreground: var(--sg-cloud);\n --sg-sidebar-border: var(--sg-slate);\n --sg-sidebar-ring: var(--sg-terracotta-light);\n}\n"],"mappings":"AAAA;AAEE,cAAY,MAAM,KAAK,EAAE;AACzB,iBAAe,MAAM,KAAK,KAAK;AAC/B,YAAU,MAAM,KAAK,EAAE;AACvB,eAAa,MAAM,KAAK,KAAK;AAC7B,YAAU,MAAM,KAAK,MAAM;AAC3B,cAAY,MAAM,KAAK,KAAK;AAC5B,cAAY,MAAM,KAAK,MAAM;AAC7B,mBAAiB,MAAM,EAAE,EAAE;AAG3B,mBAAiB,MAAM,KAAK,KAAK;AACjC,yBAAuB,MAAM,KAAK,KAAK;AACvC,cAAY,MAAM,KAAK,KAAK;AAC5B,mBAAiB,MAAM,KAAK,KAAK;AACjC,aAAW,MAAM,KAAK,KAAK;AAG3B,gBAAc,MAAM,KAAK,KAAK;AAC9B,sBAAoB,MAAM,IAAI,IAAI;AAGlC,cAAY,MAAM,KAAK,KAAK;AAC5B,aAAW,MAAM,KAAK,EAAE;AACxB,cAAY,MAAM,KAAK,EAAE;AACzB,aAAW,MAAM,KAAK,KAAK;AAC3B,cAAY,MAAM,KAAK,KAAK;AAG5B,mBAAiB,IAAI;AACrB,mBAAiB,IAAI;AAErB,aAAW,IAAI;AACf,wBAAsB,IAAI;AAE1B,gBAAc,IAAI;AAClB,2BAAyB,IAAI;AAE7B,gBAAc,IAAI;AAClB,2BAAyB,IAAI;AAE7B,kBAAgB,IAAI;AACpB,6BAA2B,IAAI;AAE/B,cAAY,IAAI;AAChB,yBAAuB,IAAI;AAE3B,eAAa,IAAI;AACjB,0BAAwB,IAAI;AAE5B,oBAAkB,IAAI;AACtB,+BAA6B,IAAI;AAEjC,eAAa,IAAI;AACjB,cAAY,IAAI;AAChB,aAAW,IAAI;AAEf,eAAa;AAEb,2BAAyB,IAAI;AAC7B,2BAAyB,IAAI;AAC7B,wBAAsB,IAAI;AAC1B,mCAAiC,IAAI;AACrC,uBAAqB,IAAI;AACzB,kCAAgC,IAAI;AACpC,uBAAqB,IAAI;AACzB,qBAAmB,IAAI;AACzB;AAEA,CAAC;AACC,mBAAiB,IAAI;AACrB,mBAAiB,IAAI;AAErB,aAAW,IAAI;AACf,wBAAsB,IAAI;AAE1B,gBAAc,IAAI;AAClB,2BAAyB,IAAI;AAE7B,gBAAc,IAAI;AAClB,2BAAyB,IAAI;AAE7B,kBAAgB,IAAI;AACpB,6BAA2B,IAAI;AAE/B,cAAY,IAAI;AAChB,yBAAuB,IAAI;AAE3B,eAAa,IAAI;AACjB,0BAAwB,IAAI;AAE5B,oBAAkB,IAAI;AACtB,+BAA6B,IAAI;AAEjC,eAAa,IAAI;AACjB,cAAY,IAAI;AAChB,aAAW,IAAI;AAEf,2BAAyB,IAAI;AAC7B,2BAAyB,IAAI;AAC7B,wBAAsB,IAAI;AAC1B,mCAAiC,IAAI;AACrC,uBAAqB,IAAI;AACzB,kCAAgC,IAAI;AACpC,uBAAqB,IAAI;AACzB,qBAAmB,IAAI;AACzB;","names":[]}
1
+ {"version":3,"sources":["../../src/css/variables.css"],"sourcesContent":[":root {\n /* Neutrals */\n --sg-black: oklch(0.25 0 0);\n --sg-charcoal: oklch(0.35 0.01 60);\n --sg-ash: oklch(0.44 0 0);\n --sg-silver: oklch(0.78 0.01 60);\n --sg-fog: oklch(0.92 0.005 240);\n --sg-cream: oklch(0.97 0.01 80);\n --sg-white: oklch(0.99 0.005 80);\n --sg-pure-white: oklch(1 0 0);\n\n /* Brand colors */\n --sg-terracotta: oklch(0.52 0.15 35);\n --sg-terracotta-light: oklch(0.65 0.16 35);\n --sg-amber: oklch(0.72 0.15 75);\n --sg-amber-dark: oklch(0.45 0.08 75);\n --sg-sand: oklch(0.93 0.03 80);\n\n /* Feedback */\n --sg-crimson: oklch(0.55 0.22 25);\n --sg-crimson-light: oklch(0.6 0.2 25);\n\n /* Dark mode neutrals */\n --sg-night: oklch(0.22 0.01 60);\n --sg-onyx: oklch(0.28 0 0);\n --sg-slate: oklch(0.43 0 0);\n --sg-dove: oklch(0.82 0.01 60);\n --sg-cloud: oklch(0.88 0.01 60);\n\n /* ── Semantic mapping – Light mode ── */\n --sg-background: var(--sg-cream);\n --sg-foreground: var(--sg-black);\n\n --sg-card: var(--sg-pure-white);\n --sg-card-foreground: var(--sg-black);\n\n --sg-popover: var(--sg-pure-white);\n --sg-popover-foreground: var(--sg-black);\n\n --sg-primary: var(--sg-terracotta);\n --sg-primary-foreground: var(--sg-cream);\n\n --sg-secondary: var(--sg-amber);\n --sg-secondary-foreground: var(--sg-black);\n\n --sg-muted: var(--sg-fog);\n --sg-muted-foreground: var(--sg-ash);\n\n --sg-accent: var(--sg-sand);\n --sg-accent-foreground: var(--sg-charcoal);\n\n --sg-destructive: var(--sg-crimson);\n --sg-destructive-foreground: var(--sg-cream);\n --sg-error: var(--sg-crimson);\n\n --sg-border: var(--sg-silver);\n --sg-input: var(--sg-silver);\n --sg-ring: var(--sg-terracotta);\n\n --sg-radius: 0.5rem;\n\n --sg-sidebar-background: var(--sg-cream);\n --sg-sidebar-foreground: var(--sg-black);\n --sg-sidebar-primary: var(--sg-terracotta);\n --sg-sidebar-primary-foreground: var(--sg-cream);\n --sg-sidebar-accent: var(--sg-fog);\n --sg-sidebar-accent-foreground: var(--sg-charcoal);\n --sg-sidebar-border: var(--sg-silver);\n --sg-sidebar-ring: var(--sg-terracotta);\n}\n\n.dark {\n --sg-background: var(--sg-charcoal);\n --sg-foreground: var(--sg-cloud);\n\n --sg-card: var(--sg-night);\n --sg-card-foreground: var(--sg-cloud);\n\n --sg-popover: var(--sg-night);\n --sg-popover-foreground: var(--sg-cloud);\n\n --sg-primary: var(--sg-terracotta-light);\n --sg-primary-foreground: var(--sg-night);\n\n --sg-secondary: var(--sg-amber);\n --sg-secondary-foreground: var(--sg-night);\n\n --sg-muted: var(--sg-slate);\n --sg-muted-foreground: var(--sg-dove);\n\n --sg-accent: var(--sg-onyx);\n --sg-accent-foreground: var(--sg-cloud);\n\n --sg-destructive: var(--sg-crimson-light);\n --sg-destructive-foreground: var(--sg-cream);\n --sg-error: var(--sg-crimson-light);\n\n --sg-border: var(--sg-slate);\n --sg-input: var(--sg-slate);\n --sg-ring: var(--sg-terracotta-light);\n\n --sg-sidebar-background: var(--sg-night);\n --sg-sidebar-foreground: var(--sg-cloud);\n --sg-sidebar-primary: var(--sg-terracotta-light);\n --sg-sidebar-primary-foreground: var(--sg-night);\n --sg-sidebar-accent: var(--sg-onyx);\n --sg-sidebar-accent-foreground: var(--sg-cloud);\n --sg-sidebar-border: var(--sg-slate);\n --sg-sidebar-ring: var(--sg-terracotta-light);\n}\n"],"mappings":"AAAA;AAEE,cAAY,MAAM,KAAK,EAAE;AACzB,iBAAe,MAAM,KAAK,KAAK;AAC/B,YAAU,MAAM,KAAK,EAAE;AACvB,eAAa,MAAM,KAAK,KAAK;AAC7B,YAAU,MAAM,KAAK,MAAM;AAC3B,cAAY,MAAM,KAAK,KAAK;AAC5B,cAAY,MAAM,KAAK,MAAM;AAC7B,mBAAiB,MAAM,EAAE,EAAE;AAG3B,mBAAiB,MAAM,KAAK,KAAK;AACjC,yBAAuB,MAAM,KAAK,KAAK;AACvC,cAAY,MAAM,KAAK,KAAK;AAC5B,mBAAiB,MAAM,KAAK,KAAK;AACjC,aAAW,MAAM,KAAK,KAAK;AAG3B,gBAAc,MAAM,KAAK,KAAK;AAC9B,sBAAoB,MAAM,IAAI,IAAI;AAGlC,cAAY,MAAM,KAAK,KAAK;AAC5B,aAAW,MAAM,KAAK,EAAE;AACxB,cAAY,MAAM,KAAK,EAAE;AACzB,aAAW,MAAM,KAAK,KAAK;AAC3B,cAAY,MAAM,KAAK,KAAK;AAG5B,mBAAiB,IAAI;AACrB,mBAAiB,IAAI;AAErB,aAAW,IAAI;AACf,wBAAsB,IAAI;AAE1B,gBAAc,IAAI;AAClB,2BAAyB,IAAI;AAE7B,gBAAc,IAAI;AAClB,2BAAyB,IAAI;AAE7B,kBAAgB,IAAI;AACpB,6BAA2B,IAAI;AAE/B,cAAY,IAAI;AAChB,yBAAuB,IAAI;AAE3B,eAAa,IAAI;AACjB,0BAAwB,IAAI;AAE5B,oBAAkB,IAAI;AACtB,+BAA6B,IAAI;AACjC,cAAY,IAAI;AAEhB,eAAa,IAAI;AACjB,cAAY,IAAI;AAChB,aAAW,IAAI;AAEf,eAAa;AAEb,2BAAyB,IAAI;AAC7B,2BAAyB,IAAI;AAC7B,wBAAsB,IAAI;AAC1B,mCAAiC,IAAI;AACrC,uBAAqB,IAAI;AACzB,kCAAgC,IAAI;AACpC,uBAAqB,IAAI;AACzB,qBAAmB,IAAI;AACzB;AAEA,CAAC;AACC,mBAAiB,IAAI;AACrB,mBAAiB,IAAI;AAErB,aAAW,IAAI;AACf,wBAAsB,IAAI;AAE1B,gBAAc,IAAI;AAClB,2BAAyB,IAAI;AAE7B,gBAAc,IAAI;AAClB,2BAAyB,IAAI;AAE7B,kBAAgB,IAAI;AACpB,6BAA2B,IAAI;AAE/B,cAAY,IAAI;AAChB,yBAAuB,IAAI;AAE3B,eAAa,IAAI;AACjB,0BAAwB,IAAI;AAE5B,oBAAkB,IAAI;AACtB,+BAA6B,IAAI;AACjC,cAAY,IAAI;AAEhB,eAAa,IAAI;AACjB,cAAY,IAAI;AAChB,aAAW,IAAI;AAEf,2BAAyB,IAAI;AAC7B,2BAAyB,IAAI;AAC7B,wBAAsB,IAAI;AAC1B,mCAAiC,IAAI;AACrC,uBAAqB,IAAI;AACzB,kCAAgC,IAAI;AACpC,uBAAqB,IAAI;AACzB,qBAAmB,IAAI;AACzB;","names":[]}
@@ -1,5 +1,6 @@
1
1
  interface BlogPost {
2
2
  id: number;
3
+ slug: string;
3
4
  title: string;
4
5
  excerpt: string;
5
6
  content: string;
@@ -9,6 +10,10 @@ interface BlogPost {
9
10
  author: string;
10
11
  featured?: boolean;
11
12
  categories: string[];
13
+ gallery?: {
14
+ src: string;
15
+ alt?: string;
16
+ }[];
12
17
  }
13
18
  interface Comment {
14
19
  id: string;
@@ -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.
@@ -50,10 +61,12 @@ The beauty of slow living is that it doesn't require a complete lifestyle overha
50
61
  originalImage: "https://images.unsplash.com/photo-1558618666-fcd25c85f82e?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.
@@ -104,10 +125,16 @@ The cracked pot, the faded photograph, the well-worn book \u2014 these carry sto
104
125
  originalImage: "https://images.unsplash.com/photo-1493106819501-66d381c466f3?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.