singularity-components 0.1.193 → 0.1.195
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/blocks/cards/blogpost-card.d.ts +2 -2
- package/dist/components/blocks/cards/card.d.ts +7 -8
- package/dist/components/blocks/empty-state/EmptyState.d.ts +2 -2
- package/dist/components/blocks/index.d.ts +1 -1
- package/dist/components/blocks/index.js +1 -0
- package/dist/components/blocks/index.js.map +1 -1
- package/dist/components/blocks/login/login.d.ts +78 -0
- package/dist/components/blocks/login/login.js +95 -0
- package/dist/components/blocks/login/login.js.map +1 -0
- package/dist/components/blocks/post-list/post-filters.d.ts +2 -2
- package/dist/components/blocks/post-list/post-list-with-filters.d.ts +2 -2
- package/dist/components/index.d.ts +2 -2
- package/dist/components/pages/admin/admin-page.d.ts +2 -2
- package/dist/components/pages/blogpost/blogpost.d.ts +2 -2
- package/dist/components/pages/category/category-page.d.ts +2 -2
- package/dist/components/pages/chat/chat-page.d.ts +2 -2
- package/dist/components/pages/index.d.ts +1 -1
- package/dist/components/pages/login/login-page.d.ts +2 -2
- package/dist/components/pages/login/login-page.js +19 -69
- package/dist/components/pages/login/login-page.js.map +1 -1
- package/dist/components/pages/maintenance/maintenance-page.d.ts +2 -2
- package/dist/components/pages/not-found/not-found.d.ts +2 -2
- package/dist/components/pages/privacy/privacy-page.d.ts +2 -2
- package/dist/components/pages/search/search-page.d.ts +2 -2
- package/dist/components/pages/startpage/startpage.d.ts +2 -2
- package/dist/components/pages/terms/terms-page.d.ts +2 -2
- package/dist/components/primitives/accordion/accordion.d.ts +5 -5
- package/dist/components/primitives/alert/alert.d.ts +4 -5
- package/dist/components/primitives/avatar/avatar.d.ts +6 -7
- package/dist/components/primitives/badge/badges.d.ts +1 -2
- package/dist/components/primitives/buttons/button.d.ts +2 -2
- package/dist/components/primitives/buttons/icon-button.d.ts +2 -2
- package/dist/components/primitives/buttons/link-button.d.ts +2 -3
- package/dist/components/primitives/collapsible/collapsible.d.ts +3 -4
- package/dist/components/primitives/dropdown-menu/dropdown-menu.d.ts +1 -2
- package/dist/components/primitives/forms/checkbox.d.ts +2 -2
- package/dist/components/primitives/forms/field.d.ts +11 -12
- package/dist/components/primitives/forms/input.d.ts +1 -2
- package/dist/components/primitives/forms/select.d.ts +7 -8
- package/dist/components/primitives/forms/textarea.d.ts +1 -2
- package/dist/components/primitives/icon/icon.d.ts +1 -2
- package/dist/components/primitives/index.d.ts +2 -3
- package/dist/components/primitives/label/label.d.ts +1 -2
- package/dist/components/primitives/layout/layout.d.ts +4 -3
- package/dist/components/primitives/layout/layout.js.map +1 -1
- package/dist/components/primitives/link/link.d.ts +2 -3
- package/dist/components/primitives/separator/separator.d.ts +2 -2
- package/dist/components/primitives/sheet/sheet.d.ts +2 -3
- package/dist/components/primitives/skeleton/skeleton.d.ts +2 -2
- package/dist/components/primitives/sonner/sonner.d.ts +2 -2
- package/dist/components/primitives/spinner/spinner.d.ts +2 -2
- package/dist/components/primitives/stack/stack.d.ts +45 -1
- package/dist/components/primitives/stack/stack.js +44 -42
- package/dist/components/primitives/stack/stack.js.map +1 -1
- package/dist/components/primitives/text/heading.d.ts +2 -3
- package/dist/components/primitives/text/internal/text-element.d.ts +1 -2
- package/dist/components/primitives/text/text-code.d.ts +2 -2
- package/dist/components/primitives/text/text-div.d.ts +2 -3
- package/dist/components/primitives/text/text-span.d.ts +2 -3
- package/dist/components/primitives/text/text-time.d.ts +2 -3
- package/dist/components/primitives/text/text.d.ts +2 -3
- package/dist/components/primitives/ui-image/ui-image.d.ts +2 -3
- package/dist/components/primitives/ui-link/ui-link.d.ts +2 -3
- package/dist/components/providers/SingularityContext.d.ts +0 -1
- package/dist/components/providers/auth-provider.d.ts +2 -2
- package/dist/components/providers/index.d.ts +0 -1
- package/dist/components/providers/theme-provider.d.ts +1 -2
- package/dist/components/templates/container/container.d.ts +4 -5
- package/dist/components/templates/footer/footer.d.ts +2 -2
- package/dist/components/templates/form/form.d.ts +2 -2
- package/dist/components/templates/hero/hero.d.ts +2 -2
- package/dist/components/templates/hero/hero.js +2 -2
- package/dist/components/templates/hero/hero.js.map +1 -1
- package/dist/components/templates/index.d.ts +0 -1
- package/dist/components/templates/navigation/header.d.ts +1 -2
- package/dist/components/templates/navigation/index.d.ts +0 -1
- package/dist/index.d.ts +2 -2
- package/dist/main.css +50 -32
- package/dist/main.css.map +1 -1
- package/package.json +52 -39
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React$1 from 'react';
|
|
2
2
|
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
@@ -21,6 +21,6 @@ declare const textCodeVariantsProps: (props?: ({
|
|
|
21
21
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
22
22
|
interface TextCodeProps extends React.HTMLAttributes<HTMLElement>, VariantProps<typeof textCodeVariantsProps> {
|
|
23
23
|
}
|
|
24
|
-
declare const TextCode: ({ children, size, className, ...props }: TextCodeProps) =>
|
|
24
|
+
declare const TextCode: ({ children, size, className, ...props }: TextCodeProps) => React$1.JSX.Element;
|
|
25
25
|
|
|
26
26
|
export { TextCode, type TextCodeProps, textCodeVariants, textCodeVariantsProps };
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
import { OmitClassProperty } from '../../../lib/types.js';
|
|
3
3
|
import { TextElementProps } from './internal/text-element.js';
|
|
4
4
|
import 'class-variance-authority/types';
|
|
5
|
-
import 'react';
|
|
6
5
|
import 'class-variance-authority';
|
|
7
6
|
|
|
8
|
-
declare const TextDiv: ({ children, size, foreground, fontweight, className, ...props }: OmitClassProperty<TextElementProps, "as">) =>
|
|
7
|
+
declare const TextDiv: ({ children, size, foreground, fontweight, className, ...props }: OmitClassProperty<TextElementProps, "as">) => React.JSX.Element;
|
|
9
8
|
|
|
10
9
|
export { TextDiv };
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
import { OmitClassProperty } from '../../../lib/types.js';
|
|
3
3
|
import { TextElementProps } from './internal/text-element.js';
|
|
4
4
|
import 'class-variance-authority/types';
|
|
5
|
-
import 'react';
|
|
6
5
|
import 'class-variance-authority';
|
|
7
6
|
|
|
8
|
-
declare const TextSpan: ({ children, size, foreground, fontweight, className, ...props }: OmitClassProperty<TextElementProps, "as">) =>
|
|
7
|
+
declare const TextSpan: ({ children, size, foreground, fontweight, className, ...props }: OmitClassProperty<TextElementProps, "as">) => React.JSX.Element;
|
|
9
8
|
|
|
10
9
|
export { TextSpan };
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
import { TextElementProps } from './internal/text-element.js';
|
|
3
3
|
import { OmitClassProperty } from '../../../lib/types.js';
|
|
4
4
|
import 'class-variance-authority/types';
|
|
5
|
-
import 'react';
|
|
6
5
|
import 'class-variance-authority';
|
|
7
6
|
|
|
8
|
-
declare const TextTime: ({ children, size, foreground, fontweight, className, ...props }: OmitClassProperty<TextElementProps, "as">) =>
|
|
7
|
+
declare const TextTime: ({ children, size, foreground, fontweight, className, ...props }: OmitClassProperty<TextElementProps, "as">) => React.JSX.Element;
|
|
9
8
|
|
|
10
9
|
export { TextTime };
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
3
|
import { OmitClassProperty } from '../../../lib/types.js';
|
|
4
4
|
import { TextElementProps } from './internal/text-element.js';
|
|
5
|
-
import 'react';
|
|
6
5
|
import 'class-variance-authority';
|
|
7
6
|
|
|
8
7
|
declare const textVariants: {
|
|
@@ -11,6 +10,6 @@ declare const textVariants: {
|
|
|
11
10
|
declare const textVariantsProps: (props?: ({
|
|
12
11
|
variant?: null | undefined;
|
|
13
12
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
14
|
-
declare const Text: ({ children, size, foreground, fontweight, className, ...props }: OmitClassProperty<TextElementProps, "as">) =>
|
|
13
|
+
declare const Text: ({ children, size, foreground, fontweight, className, ...props }: OmitClassProperty<TextElementProps, "as">) => React.JSX.Element;
|
|
15
14
|
|
|
16
15
|
export { Text, textVariants, textVariantsProps };
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
import { BaseImageProps } from '../../providers/ImageContext.js';
|
|
3
|
-
import 'react';
|
|
4
3
|
|
|
5
4
|
type Props = {
|
|
6
5
|
showServerSideDefaultImageComponent?: boolean;
|
|
7
6
|
} & BaseImageProps;
|
|
8
|
-
declare function UiImage({ showServerSideDefaultImageComponent, ...props }: Props):
|
|
7
|
+
declare function UiImage({ showServerSideDefaultImageComponent, ...props }: Props): React.JSX.Element;
|
|
9
8
|
|
|
10
9
|
export { UiImage };
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
import { BaseLinkProps } from '../../providers/LinkContext.js';
|
|
3
|
-
import 'react';
|
|
4
3
|
|
|
5
4
|
type Props = BaseLinkProps;
|
|
6
|
-
declare const UiLink: ({ ...props }: Props) =>
|
|
5
|
+
declare const UiLink: ({ ...props }: Props) => React.JSX.Element;
|
|
7
6
|
|
|
8
7
|
export { UiLink };
|
|
@@ -2,7 +2,6 @@ import React__default, { ReactNode } from 'react';
|
|
|
2
2
|
import { ImageComponentType } from './ImageContext.js';
|
|
3
3
|
import { LinkComponentType } from './LinkContext.js';
|
|
4
4
|
import { Theme } from './theme-provider.js';
|
|
5
|
-
import 'react/jsx-runtime';
|
|
6
5
|
|
|
7
6
|
interface SingularityProviderProps {
|
|
8
7
|
ImageComponent?: ImageComponentType;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
|
|
4
4
|
interface AuthContextType {
|
|
@@ -9,7 +9,7 @@ interface AuthContextType {
|
|
|
9
9
|
}
|
|
10
10
|
declare function AuthProvider({ children }: {
|
|
11
11
|
children: ReactNode;
|
|
12
|
-
}):
|
|
12
|
+
}): React.JSX.Element;
|
|
13
13
|
declare const useAuth: () => AuthContextType;
|
|
14
14
|
|
|
15
15
|
export { AuthProvider, useAuth };
|
|
@@ -4,4 +4,3 @@ export { SingularityProvider } from './SingularityContext.js';
|
|
|
4
4
|
export { AuthProvider, useAuth } from './auth-provider.js';
|
|
5
5
|
export { Theme, ThemeProvider, ThemeProviderProps, ThemeProviderState, useTheme } from './theme-provider.js';
|
|
6
6
|
import 'react';
|
|
7
|
-
import 'react/jsx-runtime';
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
1
|
import * as React from 'react';
|
|
3
2
|
|
|
4
3
|
type Theme = "dark" | "light" | "system";
|
|
@@ -18,7 +17,7 @@ type ThemeProviderState = {
|
|
|
18
17
|
* Supports "light", "dark", and "system" modes.
|
|
19
18
|
* Default is "system" with a fallback to "dark".
|
|
20
19
|
*/
|
|
21
|
-
declare function ThemeProvider({ children, defaultTheme, ...props }: ThemeProviderProps):
|
|
20
|
+
declare function ThemeProvider({ children, defaultTheme, ...props }: ThemeProviderProps): React.JSX.Element;
|
|
22
21
|
/**
|
|
23
22
|
* Hook to access the current theme and setTheme function.
|
|
24
23
|
*/
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
1
|
import * as React from 'react';
|
|
3
2
|
import { PropsWithChildren } from 'react';
|
|
4
3
|
|
|
@@ -6,11 +5,11 @@ type Prop = {
|
|
|
6
5
|
children?: React.ReactNode;
|
|
7
6
|
as?: "body" | "div";
|
|
8
7
|
} & React.HTMLAttributes<HTMLElement>;
|
|
9
|
-
declare function Container({ children, as: Component, className, ...rest }: PropsWithChildren<Prop>):
|
|
8
|
+
declare function Container({ children, as: Component, className, ...rest }: PropsWithChildren<Prop>): React.JSX.Element;
|
|
10
9
|
declare namespace Container {
|
|
11
|
-
var Header: ({ children, as: Component, ...props }: ChildProp) =>
|
|
12
|
-
var Content: ({ children, as: Component, ...props }: ChildProp) =>
|
|
13
|
-
var Footer: ({ children, as: Component, ...props }: ChildProp) =>
|
|
10
|
+
var Header: ({ children, as: Component, ...props }: ChildProp) => React.JSX.Element;
|
|
11
|
+
var Content: ({ children, as: Component, ...props }: ChildProp) => React.JSX.Element;
|
|
12
|
+
var Footer: ({ children, as: Component, ...props }: ChildProp) => React.JSX.Element;
|
|
14
13
|
}
|
|
15
14
|
type ChildProp = {
|
|
16
15
|
children?: React.ReactNode;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React$1 from 'react';
|
|
2
2
|
|
|
3
3
|
interface HeroProps {
|
|
4
4
|
title?: React.ReactNode;
|
|
@@ -13,6 +13,6 @@ interface HeroProps {
|
|
|
13
13
|
href: string;
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
declare function Hero({ title, titleAccent, description, primaryCTA, secondaryCTA, }: HeroProps):
|
|
16
|
+
declare function Hero({ title, titleAccent, description, primaryCTA, secondaryCTA, }: HeroProps): React$1.JSX.Element;
|
|
17
17
|
|
|
18
18
|
export { Hero as default };
|
|
@@ -266,7 +266,7 @@ function Hero({
|
|
|
266
266
|
primaryCTA && /* @__PURE__ */ jsx(
|
|
267
267
|
LinkButton,
|
|
268
268
|
{
|
|
269
|
-
|
|
269
|
+
size: "lg",
|
|
270
270
|
to: primaryCTA.href,
|
|
271
271
|
className: "sg:z-1",
|
|
272
272
|
children: primaryCTA.label
|
|
@@ -276,7 +276,7 @@ function Hero({
|
|
|
276
276
|
LinkButton,
|
|
277
277
|
{
|
|
278
278
|
variant: "secondary",
|
|
279
|
-
|
|
279
|
+
size: "lg",
|
|
280
280
|
to: secondaryCTA.href,
|
|
281
281
|
className: "sg:z-1",
|
|
282
282
|
children: secondaryCTA.label
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/templates/hero/hero.tsx"],"sourcesContent":["\"use client\";\r\nimport {\r\n Layout,\r\n LinkButton,\r\n Stack,\r\n Heading,\r\n Text,\r\n TextSpan,\r\n} from \"../../primitives/index\";\r\nimport { useCallback, useMemo, useRef, useState } from \"react\";\r\n\r\nfunction seededRandom(seed: number) {\r\n const x = Math.sin(seed * 9999) * 10000;\r\n return x - Math.floor(x);\r\n}\r\n\r\nfunction round(num: number, decimals = 4) {\r\n return Number(num.toFixed(decimals));\r\n}\r\n\r\nfunction generateSparkles(count: number) {\r\n return Array.from({ length: count }, (_, i) => ({\r\n id: i,\r\n left: round(seededRandom(i) * 100),\r\n top: round(seededRandom(i + 1) * 100),\r\n size: round(seededRandom(i + 2) * 4 + 2),\r\n delay: round(seededRandom(i + 3) * 5),\r\n duration: round(seededRandom(i + 4) * 2 + 1.5),\r\n }));\r\n}\r\n\r\ninterface BurstParticle {\r\n id: number;\r\n x: number;\r\n y: number;\r\n angle: number;\r\n speed: number;\r\n hue: number;\r\n size: number;\r\n}\r\n\r\ninterface HeroProps {\r\n title?: React.ReactNode;\r\n titleAccent?: string;\r\n description?: string;\r\n primaryCTA?: { label: string; href: string };\r\n secondaryCTA?: { label: string; href: string };\r\n}\r\n\r\nexport default function Hero({\r\n title,\r\n titleAccent,\r\n description,\r\n primaryCTA,\r\n secondaryCTA,\r\n}: HeroProps) {\r\n const heroRef = useRef<HTMLElement>(null);\r\n const [mouse, setMouse] = useState({ x: 0.5, y: 0.5 });\r\n const [mousePixel, setMousePixel] = useState({ x: 0, y: 0 });\r\n const sparkles = useMemo(() => generateSparkles(40), []);\r\n const [bursts, setBursts] = useState<BurstParticle[]>([]);\r\n const burstIdRef = useRef(0);\r\n\r\n const handleMouseMove = useCallback((e: React.MouseEvent<HTMLElement>) => {\r\n const rect = heroRef.current?.getBoundingClientRect();\r\n if (!rect) return;\r\n setMouse({\r\n x: (e.clientX - rect.left) / rect.width,\r\n y: (e.clientY - rect.top) / rect.height,\r\n });\r\n setMousePixel({\r\n x: e.clientX - rect.left,\r\n y: e.clientY - rect.top,\r\n });\r\n }, []);\r\n\r\n const handleClick = useCallback((e: React.MouseEvent<HTMLElement>) => {\r\n const rect = heroRef.current?.getBoundingClientRect();\r\n if (!rect) return;\r\n const cx = e.clientX - rect.left;\r\n const cy = e.clientY - rect.top;\r\n const count = 18;\r\n\r\n const newBursts: BurstParticle[] = Array.from(\r\n { length: count },\r\n (_, i) => ({\r\n id: burstIdRef.current++,\r\n x: cx,\r\n y: cy,\r\n angle: (360 / count) * i + Math.random() * 20 - 10,\r\n speed: Math.random() * 120 + 60,\r\n hue: Math.random() * 360,\r\n size: Math.random() * 5 + 3,\r\n }),\r\n );\r\n\r\n setBursts((prev) => [...prev, ...newBursts]);\r\n setTimeout(() => {\r\n setBursts((prev) => prev.filter((b) => !newBursts.includes(b)));\r\n }, 800);\r\n }, []);\r\n\r\n return (\r\n <Layout type=\"container\">\r\n <Layout.Col1 hideDiv>\r\n <section\r\n ref={heroRef}\r\n onMouseMove={handleMouseMove}\r\n onClick={handleClick}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n handleClick(e as any);\r\n }\r\n }}\r\n role=\"button\"\r\n tabIndex={0}\r\n data-testid=\"hero-section\"\r\n className=\"sg:relative sg:overflow-hidden sg:bg-background sg:cursor-crosshair sg:focus-visible:outline-none sg:focus-visible:ring-2 sg:focus-visible:ring-primary sg:focus-visible:ring-offset-2\"\r\n >\r\n {/* Colorful gradient blobs — follow mouse */}\r\n <div\r\n className=\"sg:absolute sg:inset-0 sg:overflow-hidden sg:pointer-events-none\"\r\n aria-hidden=\"true\"\r\n >\r\n {/* Hot pink / magenta */}\r\n <div\r\n className=\"sg:absolute sg:h-175 sg:w-175 sg:rounded-full sg:opacity-35 sg:blur-[90px] sg:transition-transform sg:duration-500 sg:ease-out\"\r\n style={{\r\n background: \"hsl(330, 90%, 55%)\",\r\n transform: `translate(${mouse.x * 70 - 35}%, ${mouse.y * 60 - 50}%)`,\r\n top: \"-10%\",\r\n right: \"-5%\",\r\n }}\r\n />\r\n {/* Electric blue */}\r\n <div\r\n className=\"sg:absolute sg:h-150 sg:w-150 sg:rounded-full sg:opacity-30 sg:blur-[80px] sg:transition-transform sg:duration-700 sg:ease-out\"\r\n style={{\r\n background: \"hsl(220, 95%, 55%)\",\r\n transform: `translate(${mouse.x * -60 + 30}%, ${mouse.y * 50 - 25}%)`,\r\n top: \"20%\",\r\n left: \"-8%\",\r\n }}\r\n />\r\n {/* Vivid orange */}\r\n <div\r\n className=\"sg:absolute sg:h-137.5 sg:w-137.5 sg:rounded-full sg:opacity-30 sg:blur-[70px] sg:transition-transform sg:duration-900 sg:ease-out\"\r\n style={{\r\n background: \"hsl(25, 95%, 55%)\",\r\n transform: `translate(${mouse.x * 55 - 28}%, ${mouse.y * -55 + 28}%)`,\r\n bottom: \"-5%\",\r\n right: \"15%\",\r\n }}\r\n />\r\n {/* Lime / green */}\r\n <div\r\n className=\"sg:absolute sg:h-100 sg:w-100 sg:rounded-full sg:opacity-25 sg:blur-[60px] sg:transition-transform sg:duration-400 sg:ease-out\"\r\n style={{\r\n background: \"hsl(145, 80%, 45%)\",\r\n transform: `translate(${mouse.x * 80 - 40}%, ${mouse.y * 80 - 40}%)`,\r\n top: \"5%\",\r\n left: \"20%\",\r\n }}\r\n />\r\n {/* Purple / violet */}\r\n <div\r\n className=\"sg:absolute sg:h-125 sg:w-125 sg:rounded-full sg:opacity-25 sg:blur-[75px] sg:transition-transform sg:duration-600 sg:ease-out\"\r\n style={{\r\n background: \"hsl(270, 85%, 55%)\",\r\n transform: `translate(${mouse.x * -45 + 22}%, ${mouse.y * 65 - 32}%)`,\r\n bottom: \"10%\",\r\n left: \"30%\",\r\n }}\r\n />\r\n {/* Yellow / gold accent */}\r\n <div\r\n className=\"sg:absolute sg:h-87.5 sg:w-87.5 sg:rounded-full sg:opacity-20 sg:blur-[50px] sg:transition-transform sg:duration-350 sg:ease-out\"\r\n style={{\r\n background: \"hsl(50, 95%, 55%)\",\r\n transform: `translate(${mouse.x * 90 - 45}%, ${mouse.y * -70 + 35}%)`,\r\n top: \"40%\",\r\n right: \"5%\",\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Sparkle / glitter particles */}\r\n <div\r\n className=\"sg:absolute sg:inset-0 sg:overflow-hidden sg:pointer-events-none\"\r\n aria-hidden=\"true\"\r\n >\r\n {sparkles.map((s) => (\r\n <div\r\n key={s.id}\r\n className=\"sg:absolute sg:rounded-full\"\r\n style={{\r\n left: `${s.left}%`,\r\n top: `${s.top}%`,\r\n width: s.size,\r\n height: s.size,\r\n background: `hsl(${(s.id * 47) % 360}, 90%, 70%)`,\r\n boxShadow: `0 0 ${s.size * 2}px hsl(${(s.id * 47) % 360}, 90%, 70%)`,\r\n animation: `sparkle ${s.duration}s ${s.delay}s ease-in-out infinite`,\r\n transform: `translate(${(mouse.x - 0.5) * s.size * 8}px, ${(mouse.y - 0.5) * s.size * 8}px)`,\r\n transition: \"transform 0.3s ease-out\",\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Cursor spotlight */}\r\n <div\r\n className=\"sg:absolute sg:pointer-events-none\"\r\n style={{\r\n left: mousePixel.x - 150,\r\n top: mousePixel.y - 150,\r\n width: 300,\r\n height: 300,\r\n background:\r\n \"radial-gradient(circle, hsla(0, 0%, 100%, 0.15) 0%, transparent 60%)\",\r\n transition: \"left 0.1s ease-out, top 0.1s ease-out\",\r\n }}\r\n aria-hidden=\"true\"\r\n />\r\n\r\n {/* Click burst particles */}\r\n <div\r\n className=\"sg:absolute sg:inset-0 sg:pointer-events-none sg:overflow-hidden\"\r\n aria-hidden=\"true\"\r\n >\r\n {bursts.map((b) => (\r\n <div\r\n key={b.id}\r\n className=\"sg:absolute sg:rounded-full\"\r\n style={\r\n {\r\n left: b.x,\r\n top: b.y,\r\n width: b.size,\r\n height: b.size,\r\n background: `hsl(${b.hue}, 90%, 65%)`,\r\n boxShadow: `0 0 ${b.size * 3}px hsl(${b.hue}, 90%, 65%)`,\r\n animation: `burst 0.7s ease-out forwards`,\r\n \"--burst-x\": `${Math.cos((b.angle * Math.PI) / 180) * b.speed}px`,\r\n \"--burst-y\": `${Math.sin((b.angle * Math.PI) / 180) * b.speed}px`,\r\n } as React.CSSProperties\r\n }\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Subtle grain texture overlay */}\r\n <div\r\n className=\"sg:absolute sg:inset-0 sg:opacity-[0.02] sg:dark:opacity-[0.04] sg:pointer-events-none\"\r\n style={{\r\n backgroundImage:\r\n \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E\\\")\",\r\n }}\r\n aria-hidden=\"true\"\r\n />\r\n\r\n <Layout type=\"col\" className=\"sg:py-20 sg:md:py-32\">\r\n <Layout.Col1 hideDiv>\r\n {(title || titleAccent) && (\r\n <Heading variant=\"h1\">\r\n {title}{\" \"}\r\n {titleAccent && (\r\n <TextSpan size=\"4xl\" foreground=\"primary\">\r\n {titleAccent}\r\n </TextSpan>\r\n )}\r\n </Heading>\r\n )}\r\n\r\n {description && (\r\n <Text\r\n size=\"lg\"\r\n foreground=\"muted-foreground\"\r\n className=\"sg:mt-6 sg:max-w-xl\"\r\n >\r\n {description}\r\n </Text>\r\n )}\r\n\r\n {(primaryCTA || secondaryCTA) && (\r\n <Stack gap={3} direction=\"row\" wrap=\"wrap\" className=\"sg:mt-8\">\r\n {primaryCTA && (\r\n <LinkButton\r\n buttonSize=\"lg\"\r\n to={primaryCTA.href}\r\n className=\"sg:z-1\"\r\n >\r\n {primaryCTA.label}\r\n </LinkButton>\r\n )}\r\n {secondaryCTA && (\r\n <LinkButton\r\n variant=\"secondary\"\r\n buttonSize=\"lg\"\r\n to={secondaryCTA.href}\r\n className=\"sg:z-1\"\r\n >\r\n {secondaryCTA.label}\r\n </LinkButton>\r\n )}\r\n </Stack>\r\n )}\r\n </Layout.Col1>\r\n </Layout>\r\n\r\n {/* Bottom fade to background */}\r\n <div\r\n className=\"sg:absolute sg:bottom-0 sg:left-0 sg:right-0 sg:h-32 sg:bg-linear-to-t sg:from-background sg:to-transparent sg:pointer-events-none\"\r\n aria-hidden=\"true\"\r\n />\r\n </section>\r\n </Layout.Col1>\r\n </Layout>\r\n );\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/templates/hero/hero.tsx"],"sourcesContent":["\"use client\";\r\nimport {\r\n Layout,\r\n LinkButton,\r\n Stack,\r\n Heading,\r\n Text,\r\n TextSpan,\r\n} from \"../../primitives/index\";\r\nimport { useCallback, useMemo, useRef, useState } from \"react\";\r\n\r\nfunction seededRandom(seed: number) {\r\n const x = Math.sin(seed * 9999) * 10000;\r\n return x - Math.floor(x);\r\n}\r\n\r\nfunction round(num: number, decimals = 4) {\r\n return Number(num.toFixed(decimals));\r\n}\r\n\r\nfunction generateSparkles(count: number) {\r\n return Array.from({ length: count }, (_, i) => ({\r\n id: i,\r\n left: round(seededRandom(i) * 100),\r\n top: round(seededRandom(i + 1) * 100),\r\n size: round(seededRandom(i + 2) * 4 + 2),\r\n delay: round(seededRandom(i + 3) * 5),\r\n duration: round(seededRandom(i + 4) * 2 + 1.5),\r\n }));\r\n}\r\n\r\ninterface BurstParticle {\r\n id: number;\r\n x: number;\r\n y: number;\r\n angle: number;\r\n speed: number;\r\n hue: number;\r\n size: number;\r\n}\r\n\r\ninterface HeroProps {\r\n title?: React.ReactNode;\r\n titleAccent?: string;\r\n description?: string;\r\n primaryCTA?: { label: string; href: string };\r\n secondaryCTA?: { label: string; href: string };\r\n}\r\n\r\nexport default function Hero({\r\n title,\r\n titleAccent,\r\n description,\r\n primaryCTA,\r\n secondaryCTA,\r\n}: HeroProps) {\r\n const heroRef = useRef<HTMLElement>(null);\r\n const [mouse, setMouse] = useState({ x: 0.5, y: 0.5 });\r\n const [mousePixel, setMousePixel] = useState({ x: 0, y: 0 });\r\n const sparkles = useMemo(() => generateSparkles(40), []);\r\n const [bursts, setBursts] = useState<BurstParticle[]>([]);\r\n const burstIdRef = useRef(0);\r\n\r\n const handleMouseMove = useCallback((e: React.MouseEvent<HTMLElement>) => {\r\n const rect = heroRef.current?.getBoundingClientRect();\r\n if (!rect) return;\r\n setMouse({\r\n x: (e.clientX - rect.left) / rect.width,\r\n y: (e.clientY - rect.top) / rect.height,\r\n });\r\n setMousePixel({\r\n x: e.clientX - rect.left,\r\n y: e.clientY - rect.top,\r\n });\r\n }, []);\r\n\r\n const handleClick = useCallback((e: React.MouseEvent<HTMLElement>) => {\r\n const rect = heroRef.current?.getBoundingClientRect();\r\n if (!rect) return;\r\n const cx = e.clientX - rect.left;\r\n const cy = e.clientY - rect.top;\r\n const count = 18;\r\n\r\n const newBursts: BurstParticle[] = Array.from(\r\n { length: count },\r\n (_, i) => ({\r\n id: burstIdRef.current++,\r\n x: cx,\r\n y: cy,\r\n angle: (360 / count) * i + Math.random() * 20 - 10,\r\n speed: Math.random() * 120 + 60,\r\n hue: Math.random() * 360,\r\n size: Math.random() * 5 + 3,\r\n }),\r\n );\r\n\r\n setBursts((prev) => [...prev, ...newBursts]);\r\n setTimeout(() => {\r\n setBursts((prev) => prev.filter((b) => !newBursts.includes(b)));\r\n }, 800);\r\n }, []);\r\n\r\n return (\r\n <Layout type=\"container\">\r\n <Layout.Col1 hideDiv>\r\n <section\r\n ref={heroRef}\r\n onMouseMove={handleMouseMove}\r\n onClick={handleClick}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n handleClick(e as any);\r\n }\r\n }}\r\n role=\"button\"\r\n tabIndex={0}\r\n data-testid=\"hero-section\"\r\n className=\"sg:relative sg:overflow-hidden sg:bg-background sg:cursor-crosshair sg:focus-visible:outline-none sg:focus-visible:ring-2 sg:focus-visible:ring-primary sg:focus-visible:ring-offset-2\"\r\n >\r\n {/* Colorful gradient blobs — follow mouse */}\r\n <div\r\n className=\"sg:absolute sg:inset-0 sg:overflow-hidden sg:pointer-events-none\"\r\n aria-hidden=\"true\"\r\n >\r\n {/* Hot pink / magenta */}\r\n <div\r\n className=\"sg:absolute sg:h-175 sg:w-175 sg:rounded-full sg:opacity-35 sg:blur-[90px] sg:transition-transform sg:duration-500 sg:ease-out\"\r\n style={{\r\n background: \"hsl(330, 90%, 55%)\",\r\n transform: `translate(${mouse.x * 70 - 35}%, ${mouse.y * 60 - 50}%)`,\r\n top: \"-10%\",\r\n right: \"-5%\",\r\n }}\r\n />\r\n {/* Electric blue */}\r\n <div\r\n className=\"sg:absolute sg:h-150 sg:w-150 sg:rounded-full sg:opacity-30 sg:blur-[80px] sg:transition-transform sg:duration-700 sg:ease-out\"\r\n style={{\r\n background: \"hsl(220, 95%, 55%)\",\r\n transform: `translate(${mouse.x * -60 + 30}%, ${mouse.y * 50 - 25}%)`,\r\n top: \"20%\",\r\n left: \"-8%\",\r\n }}\r\n />\r\n {/* Vivid orange */}\r\n <div\r\n className=\"sg:absolute sg:h-137.5 sg:w-137.5 sg:rounded-full sg:opacity-30 sg:blur-[70px] sg:transition-transform sg:duration-900 sg:ease-out\"\r\n style={{\r\n background: \"hsl(25, 95%, 55%)\",\r\n transform: `translate(${mouse.x * 55 - 28}%, ${mouse.y * -55 + 28}%)`,\r\n bottom: \"-5%\",\r\n right: \"15%\",\r\n }}\r\n />\r\n {/* Lime / green */}\r\n <div\r\n className=\"sg:absolute sg:h-100 sg:w-100 sg:rounded-full sg:opacity-25 sg:blur-[60px] sg:transition-transform sg:duration-400 sg:ease-out\"\r\n style={{\r\n background: \"hsl(145, 80%, 45%)\",\r\n transform: `translate(${mouse.x * 80 - 40}%, ${mouse.y * 80 - 40}%)`,\r\n top: \"5%\",\r\n left: \"20%\",\r\n }}\r\n />\r\n {/* Purple / violet */}\r\n <div\r\n className=\"sg:absolute sg:h-125 sg:w-125 sg:rounded-full sg:opacity-25 sg:blur-[75px] sg:transition-transform sg:duration-600 sg:ease-out\"\r\n style={{\r\n background: \"hsl(270, 85%, 55%)\",\r\n transform: `translate(${mouse.x * -45 + 22}%, ${mouse.y * 65 - 32}%)`,\r\n bottom: \"10%\",\r\n left: \"30%\",\r\n }}\r\n />\r\n {/* Yellow / gold accent */}\r\n <div\r\n className=\"sg:absolute sg:h-87.5 sg:w-87.5 sg:rounded-full sg:opacity-20 sg:blur-[50px] sg:transition-transform sg:duration-350 sg:ease-out\"\r\n style={{\r\n background: \"hsl(50, 95%, 55%)\",\r\n transform: `translate(${mouse.x * 90 - 45}%, ${mouse.y * -70 + 35}%)`,\r\n top: \"40%\",\r\n right: \"5%\",\r\n }}\r\n />\r\n </div>\r\n\r\n {/* Sparkle / glitter particles */}\r\n <div\r\n className=\"sg:absolute sg:inset-0 sg:overflow-hidden sg:pointer-events-none\"\r\n aria-hidden=\"true\"\r\n >\r\n {sparkles.map((s) => (\r\n <div\r\n key={s.id}\r\n className=\"sg:absolute sg:rounded-full\"\r\n style={{\r\n left: `${s.left}%`,\r\n top: `${s.top}%`,\r\n width: s.size,\r\n height: s.size,\r\n background: `hsl(${(s.id * 47) % 360}, 90%, 70%)`,\r\n boxShadow: `0 0 ${s.size * 2}px hsl(${(s.id * 47) % 360}, 90%, 70%)`,\r\n animation: `sparkle ${s.duration}s ${s.delay}s ease-in-out infinite`,\r\n transform: `translate(${(mouse.x - 0.5) * s.size * 8}px, ${(mouse.y - 0.5) * s.size * 8}px)`,\r\n transition: \"transform 0.3s ease-out\",\r\n }}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Cursor spotlight */}\r\n <div\r\n className=\"sg:absolute sg:pointer-events-none\"\r\n style={{\r\n left: mousePixel.x - 150,\r\n top: mousePixel.y - 150,\r\n width: 300,\r\n height: 300,\r\n background:\r\n \"radial-gradient(circle, hsla(0, 0%, 100%, 0.15) 0%, transparent 60%)\",\r\n transition: \"left 0.1s ease-out, top 0.1s ease-out\",\r\n }}\r\n aria-hidden=\"true\"\r\n />\r\n\r\n {/* Click burst particles */}\r\n <div\r\n className=\"sg:absolute sg:inset-0 sg:pointer-events-none sg:overflow-hidden\"\r\n aria-hidden=\"true\"\r\n >\r\n {bursts.map((b) => (\r\n <div\r\n key={b.id}\r\n className=\"sg:absolute sg:rounded-full\"\r\n style={\r\n {\r\n left: b.x,\r\n top: b.y,\r\n width: b.size,\r\n height: b.size,\r\n background: `hsl(${b.hue}, 90%, 65%)`,\r\n boxShadow: `0 0 ${b.size * 3}px hsl(${b.hue}, 90%, 65%)`,\r\n animation: `burst 0.7s ease-out forwards`,\r\n \"--burst-x\": `${Math.cos((b.angle * Math.PI) / 180) * b.speed}px`,\r\n \"--burst-y\": `${Math.sin((b.angle * Math.PI) / 180) * b.speed}px`,\r\n } as React.CSSProperties\r\n }\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Subtle grain texture overlay */}\r\n <div\r\n className=\"sg:absolute sg:inset-0 sg:opacity-[0.02] sg:dark:opacity-[0.04] sg:pointer-events-none\"\r\n style={{\r\n backgroundImage:\r\n \"url(\\\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E\\\")\",\r\n }}\r\n aria-hidden=\"true\"\r\n />\r\n\r\n <Layout type=\"col\" className=\"sg:py-20 sg:md:py-32\">\r\n <Layout.Col1 hideDiv>\r\n {(title || titleAccent) && (\r\n <Heading variant=\"h1\">\r\n {title}{\" \"}\r\n {titleAccent && (\r\n <TextSpan size=\"4xl\" foreground=\"primary\">\r\n {titleAccent}\r\n </TextSpan>\r\n )}\r\n </Heading>\r\n )}\r\n\r\n {description && (\r\n <Text\r\n size=\"lg\"\r\n foreground=\"muted-foreground\"\r\n className=\"sg:mt-6 sg:max-w-xl\"\r\n >\r\n {description}\r\n </Text>\r\n )}\r\n\r\n {(primaryCTA || secondaryCTA) && (\r\n <Stack gap={3} direction=\"row\" wrap=\"wrap\" className=\"sg:mt-8\">\r\n {primaryCTA && (\r\n <LinkButton\r\n size=\"lg\"\r\n to={primaryCTA.href}\r\n className=\"sg:z-1\"\r\n >\r\n {primaryCTA.label}\r\n </LinkButton>\r\n )}\r\n {secondaryCTA && (\r\n <LinkButton\r\n variant=\"secondary\"\r\n size=\"lg\"\r\n to={secondaryCTA.href}\r\n className=\"sg:z-1\"\r\n >\r\n {secondaryCTA.label}\r\n </LinkButton>\r\n )}\r\n </Stack>\r\n )}\r\n </Layout.Col1>\r\n </Layout>\r\n\r\n {/* Bottom fade to background */}\r\n <div\r\n className=\"sg:absolute sg:bottom-0 sg:left-0 sg:right-0 sg:h-32 sg:bg-linear-to-t sg:from-background sg:to-transparent sg:pointer-events-none\"\r\n aria-hidden=\"true\"\r\n />\r\n </section>\r\n </Layout.Col1>\r\n </Layout>\r\n );\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
1
|
import * as React from 'react';
|
|
3
2
|
|
|
4
3
|
interface NavLink {
|
|
@@ -14,6 +13,6 @@ interface HeaderProps {
|
|
|
14
13
|
loginLabel?: string;
|
|
15
14
|
extrasLabel?: string;
|
|
16
15
|
}
|
|
17
|
-
declare function Header({ navLinks, extrasLinks, logo, currentPath, loginPath, loginLabel, extrasLabel, }: HeaderProps):
|
|
16
|
+
declare function Header({ navLinks, extrasLinks, logo, currentPath, loginPath, loginLabel, extrasLabel, }: HeaderProps): React.JSX.Element;
|
|
18
17
|
|
|
19
18
|
export { Header, type HeaderProps, type NavLink };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './components/blocks/cards/card.js';
|
|
2
|
+
export { Login, LoginCredentials, LoginProps } from './components/blocks/login/login.js';
|
|
2
3
|
export { PostListWithFilters } from './components/blocks/post-list/post-list-with-filters.js';
|
|
3
4
|
export { AdminPage, AdminPageProps } from './components/pages/admin/admin-page.js';
|
|
4
5
|
export { BlogPost } from './components/pages/blogpost/blogpost.js';
|
|
@@ -32,7 +33,7 @@ export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHe
|
|
|
32
33
|
export { Skeleton } from './components/primitives/skeleton/skeleton.js';
|
|
33
34
|
export { Toaster } from './components/primitives/sonner/sonner.js';
|
|
34
35
|
export { Spinner } from './components/primitives/spinner/spinner.js';
|
|
35
|
-
export { Stack, StackProps, stackVariants } from './components/primitives/stack/stack.js';
|
|
36
|
+
export { Stack, StackProps, stackVariantOptions, stackVariants } from './components/primitives/stack/stack.js';
|
|
36
37
|
export { Heading, HeadingProps, headingVariants, headingVariantsProps } from './components/primitives/text/heading.js';
|
|
37
38
|
export { TextCode, TextCodeProps, textCodeVariants, textCodeVariantsProps } from './components/primitives/text/text-code.js';
|
|
38
39
|
export { TextDiv } from './components/primitives/text/text-div.js';
|
|
@@ -50,7 +51,6 @@ export { Container } from './components/templates/container/container.js';
|
|
|
50
51
|
export { Footer } from './components/templates/footer/footer.js';
|
|
51
52
|
export { Header, HeaderProps, NavLink } from './components/templates/navigation/header.js';
|
|
52
53
|
export { toast } from 'sonner';
|
|
53
|
-
import 'react/jsx-runtime';
|
|
54
54
|
import 'react';
|
|
55
55
|
import './data/posts.js';
|
|
56
56
|
import '@base-ui/react/accordion';
|
package/dist/main.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! tailwindcss v4.
|
|
1
|
+
/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
|
|
2
2
|
@layer properties;
|
|
3
3
|
:root {
|
|
4
4
|
--sg-black: oklch(0.25 0 0);
|
|
@@ -84,6 +84,7 @@
|
|
|
84
84
|
:root,
|
|
85
85
|
:host {
|
|
86
86
|
--sg-spacing: 0.25rem;
|
|
87
|
+
--sg-container-xs: 20rem;
|
|
87
88
|
--sg-container-sm: 24rem;
|
|
88
89
|
--sg-container-md: 28rem;
|
|
89
90
|
--sg-container-lg: 32rem;
|
|
@@ -354,13 +355,13 @@
|
|
|
354
355
|
position: sticky;
|
|
355
356
|
}
|
|
356
357
|
.sg\:inset-0 {
|
|
357
|
-
inset:
|
|
358
|
+
inset: 0;
|
|
358
359
|
}
|
|
359
360
|
.sg\:inset-x-0 {
|
|
360
|
-
inset-inline:
|
|
361
|
+
inset-inline: 0;
|
|
361
362
|
}
|
|
362
363
|
.sg\:inset-y-0 {
|
|
363
|
-
inset-block:
|
|
364
|
+
inset-block: 0;
|
|
364
365
|
}
|
|
365
366
|
.sg\:end-3 {
|
|
366
367
|
inset-inline-end: calc(var(--sg-spacing) * 3);
|
|
@@ -369,7 +370,7 @@
|
|
|
369
370
|
top: calc(var(--sg-spacing) * -1.5);
|
|
370
371
|
}
|
|
371
372
|
.sg\:top-0 {
|
|
372
|
-
top:
|
|
373
|
+
top: 0;
|
|
373
374
|
}
|
|
374
375
|
.sg\:top-1\/2 {
|
|
375
376
|
top: calc(1 / 2 * 100%);
|
|
@@ -387,16 +388,16 @@
|
|
|
387
388
|
right: calc(var(--sg-spacing) * -1.5);
|
|
388
389
|
}
|
|
389
390
|
.sg\:right-0 {
|
|
390
|
-
right:
|
|
391
|
+
right: 0;
|
|
391
392
|
}
|
|
392
393
|
.sg\:right-4 {
|
|
393
394
|
right: calc(var(--sg-spacing) * 4);
|
|
394
395
|
}
|
|
395
396
|
.sg\:bottom-0 {
|
|
396
|
-
bottom:
|
|
397
|
+
bottom: 0;
|
|
397
398
|
}
|
|
398
399
|
.sg\:left-0 {
|
|
399
|
-
left:
|
|
400
|
+
left: 0;
|
|
400
401
|
}
|
|
401
402
|
.sg\:left-2 {
|
|
402
403
|
left: calc(var(--sg-spacing) * 2);
|
|
@@ -456,7 +457,7 @@
|
|
|
456
457
|
margin-block: calc(var(--sg-spacing) * -2);
|
|
457
458
|
}
|
|
458
459
|
.sg\:my-1 {
|
|
459
|
-
margin-block:
|
|
460
|
+
margin-block: var(--sg-spacing);
|
|
460
461
|
}
|
|
461
462
|
.sg\:my-4 {
|
|
462
463
|
margin-block: calc(var(--sg-spacing) * 4);
|
|
@@ -465,7 +466,7 @@
|
|
|
465
466
|
margin-top: calc(var(--sg-spacing) * 0.5);
|
|
466
467
|
}
|
|
467
468
|
.sg\:mt-1 {
|
|
468
|
-
margin-top:
|
|
469
|
+
margin-top: var(--sg-spacing);
|
|
469
470
|
}
|
|
470
471
|
.sg\:mt-1\.5 {
|
|
471
472
|
margin-top: calc(var(--sg-spacing) * 1.5);
|
|
@@ -501,13 +502,13 @@
|
|
|
501
502
|
margin-top: auto;
|
|
502
503
|
}
|
|
503
504
|
.sg\:mr-1 {
|
|
504
|
-
margin-right:
|
|
505
|
+
margin-right: var(--sg-spacing);
|
|
505
506
|
}
|
|
506
507
|
.sg\:mr-2 {
|
|
507
508
|
margin-right: calc(var(--sg-spacing) * 2);
|
|
508
509
|
}
|
|
509
510
|
.sg\:mb-1 {
|
|
510
|
-
margin-bottom:
|
|
511
|
+
margin-bottom: var(--sg-spacing);
|
|
511
512
|
}
|
|
512
513
|
.sg\:mb-2 {
|
|
513
514
|
margin-bottom: calc(var(--sg-spacing) * 2);
|
|
@@ -531,7 +532,7 @@
|
|
|
531
532
|
margin-bottom: calc(var(--sg-spacing) * 12);
|
|
532
533
|
}
|
|
533
534
|
.sg\:ml-1 {
|
|
534
|
-
margin-left:
|
|
535
|
+
margin-left: var(--sg-spacing);
|
|
535
536
|
}
|
|
536
537
|
.sg\:ml-4 {
|
|
537
538
|
margin-left: calc(var(--sg-spacing) * 4);
|
|
@@ -623,7 +624,7 @@
|
|
|
623
624
|
height: var(--accordion-panel-height);
|
|
624
625
|
}
|
|
625
626
|
.sg\:h-1 {
|
|
626
|
-
height:
|
|
627
|
+
height: var(--sg-spacing);
|
|
627
628
|
}
|
|
628
629
|
.sg\:h-2 {
|
|
629
630
|
height: calc(var(--sg-spacing) * 2);
|
|
@@ -658,6 +659,9 @@
|
|
|
658
659
|
.sg\:h-32 {
|
|
659
660
|
height: calc(var(--sg-spacing) * 32);
|
|
660
661
|
}
|
|
662
|
+
.sg\:h-48 {
|
|
663
|
+
height: calc(var(--sg-spacing) * 48);
|
|
664
|
+
}
|
|
661
665
|
.sg\:h-56 {
|
|
662
666
|
height: calc(var(--sg-spacing) * 56);
|
|
663
667
|
}
|
|
@@ -695,7 +699,10 @@
|
|
|
695
699
|
max-height: var(--available-height);
|
|
696
700
|
}
|
|
697
701
|
.sg\:min-h-0 {
|
|
698
|
-
min-height:
|
|
702
|
+
min-height: 0;
|
|
703
|
+
}
|
|
704
|
+
.sg\:min-h-\[24rem\] {
|
|
705
|
+
min-height: 24rem;
|
|
699
706
|
}
|
|
700
707
|
.sg\:min-h-\[60vh\] {
|
|
701
708
|
min-height: 60vh;
|
|
@@ -713,7 +720,7 @@
|
|
|
713
720
|
width: var(--anchor-width);
|
|
714
721
|
}
|
|
715
722
|
.sg\:w-1 {
|
|
716
|
-
width:
|
|
723
|
+
width: var(--sg-spacing);
|
|
717
724
|
}
|
|
718
725
|
.sg\:w-1\/2 {
|
|
719
726
|
width: calc(1 / 2 * 100%);
|
|
@@ -820,8 +827,11 @@
|
|
|
820
827
|
.sg\:max-w-xl {
|
|
821
828
|
max-width: var(--sg-container-xl);
|
|
822
829
|
}
|
|
830
|
+
.sg\:max-w-xs {
|
|
831
|
+
max-width: var(--sg-container-xs);
|
|
832
|
+
}
|
|
823
833
|
.sg\:min-w-0 {
|
|
824
|
-
min-width:
|
|
834
|
+
min-width: 0;
|
|
825
835
|
}
|
|
826
836
|
.sg\:min-w-6 {
|
|
827
837
|
min-width: calc(var(--sg-spacing) * 6);
|
|
@@ -951,7 +961,7 @@
|
|
|
951
961
|
gap: calc(var(--sg-spacing) * 0.5);
|
|
952
962
|
}
|
|
953
963
|
.sg\:gap-1 {
|
|
954
|
-
gap:
|
|
964
|
+
gap: var(--sg-spacing);
|
|
955
965
|
}
|
|
956
966
|
.sg\:gap-1\.5 {
|
|
957
967
|
gap: calc(var(--sg-spacing) * 1.5);
|
|
@@ -1004,8 +1014,8 @@
|
|
|
1004
1014
|
.sg\:space-y-1 {
|
|
1005
1015
|
:where(& > :not(:last-child)) {
|
|
1006
1016
|
--tw-space-y-reverse: 0;
|
|
1007
|
-
margin-block-start: calc(
|
|
1008
|
-
margin-block-end: calc(
|
|
1017
|
+
margin-block-start: calc(var(--sg-spacing) * var(--tw-space-y-reverse));
|
|
1018
|
+
margin-block-end: calc(var(--sg-spacing) * calc(1 - var(--tw-space-y-reverse)));
|
|
1009
1019
|
}
|
|
1010
1020
|
}
|
|
1011
1021
|
.sg\:space-y-1\.5 {
|
|
@@ -1270,7 +1280,7 @@
|
|
|
1270
1280
|
object-fit: cover;
|
|
1271
1281
|
}
|
|
1272
1282
|
.sg\:p-1 {
|
|
1273
|
-
padding:
|
|
1283
|
+
padding: var(--sg-spacing);
|
|
1274
1284
|
}
|
|
1275
1285
|
.sg\:p-2 {
|
|
1276
1286
|
padding: calc(var(--sg-spacing) * 2);
|
|
@@ -1306,7 +1316,7 @@
|
|
|
1306
1316
|
padding-block: calc(var(--sg-spacing) * 0.5);
|
|
1307
1317
|
}
|
|
1308
1318
|
.sg\:py-1 {
|
|
1309
|
-
padding-block:
|
|
1319
|
+
padding-block: var(--sg-spacing);
|
|
1310
1320
|
}
|
|
1311
1321
|
.sg\:py-1\.5 {
|
|
1312
1322
|
padding-block: calc(var(--sg-spacing) * 1.5);
|
|
@@ -1339,7 +1349,7 @@
|
|
|
1339
1349
|
padding-block: calc(var(--sg-spacing) * 32);
|
|
1340
1350
|
}
|
|
1341
1351
|
.sg\:pt-0 {
|
|
1342
|
-
padding-top:
|
|
1352
|
+
padding-top: 0;
|
|
1343
1353
|
}
|
|
1344
1354
|
.sg\:pt-2 {
|
|
1345
1355
|
padding-top: calc(var(--sg-spacing) * 2);
|
|
@@ -1350,11 +1360,14 @@
|
|
|
1350
1360
|
.sg\:pt-4 {
|
|
1351
1361
|
padding-top: calc(var(--sg-spacing) * 4);
|
|
1352
1362
|
}
|
|
1363
|
+
.sg\:pt-6 {
|
|
1364
|
+
padding-top: calc(var(--sg-spacing) * 6);
|
|
1365
|
+
}
|
|
1353
1366
|
.sg\:pt-8 {
|
|
1354
1367
|
padding-top: calc(var(--sg-spacing) * 8);
|
|
1355
1368
|
}
|
|
1356
1369
|
.sg\:pr-1 {
|
|
1357
|
-
padding-right:
|
|
1370
|
+
padding-right: var(--sg-spacing);
|
|
1358
1371
|
}
|
|
1359
1372
|
.sg\:pr-2 {
|
|
1360
1373
|
padding-right: calc(var(--sg-spacing) * 2);
|
|
@@ -1561,6 +1574,9 @@
|
|
|
1561
1574
|
.sg\:italic {
|
|
1562
1575
|
font-style: italic;
|
|
1563
1576
|
}
|
|
1577
|
+
.sg\:underline {
|
|
1578
|
+
text-decoration-line: underline;
|
|
1579
|
+
}
|
|
1564
1580
|
.sg\:decoration-primary\/40 {
|
|
1565
1581
|
text-decoration-color: var(--sg-primary);
|
|
1566
1582
|
@supports (color: color-mix(in lab, red, red)) {
|
|
@@ -2050,7 +2066,7 @@
|
|
|
2050
2066
|
}
|
|
2051
2067
|
.sg\:last\:mt-0 {
|
|
2052
2068
|
&:last-child {
|
|
2053
|
-
margin-top:
|
|
2069
|
+
margin-top: 0;
|
|
2054
2070
|
}
|
|
2055
2071
|
}
|
|
2056
2072
|
.sg\:hover\:border-primary {
|
|
@@ -2368,7 +2384,7 @@
|
|
|
2368
2384
|
}
|
|
2369
2385
|
.sg\:has-\[\>img\:first-child\]\:pt-0 {
|
|
2370
2386
|
&:has(> img:first-child) {
|
|
2371
|
-
padding-top:
|
|
2387
|
+
padding-top: 0;
|
|
2372
2388
|
}
|
|
2373
2389
|
}
|
|
2374
2390
|
.sg\:has-\[\>svg\]\:grid-cols-\[auto_1fr\] {
|
|
@@ -2414,7 +2430,7 @@
|
|
|
2414
2430
|
}
|
|
2415
2431
|
.sg\:data-ending-style\:h-0 {
|
|
2416
2432
|
&[data-ending-style] {
|
|
2417
|
-
height:
|
|
2433
|
+
height: 0;
|
|
2418
2434
|
}
|
|
2419
2435
|
}
|
|
2420
2436
|
.sg\:data-open\:bg-muted\/50 {
|
|
@@ -2448,7 +2464,7 @@
|
|
|
2448
2464
|
}
|
|
2449
2465
|
.sg\:data-starting-style\:h-0 {
|
|
2450
2466
|
&[data-starting-style] {
|
|
2451
|
-
height:
|
|
2467
|
+
height: 0;
|
|
2452
2468
|
}
|
|
2453
2469
|
}
|
|
2454
2470
|
.sg\:data-\[align-trigger\=true\]\:animate-none {
|
|
@@ -2742,17 +2758,17 @@
|
|
|
2742
2758
|
}
|
|
2743
2759
|
.sg\:min-\[442px\]\:px-0 {
|
|
2744
2760
|
@media (width >= 442px) {
|
|
2745
|
-
padding-inline:
|
|
2761
|
+
padding-inline: 0;
|
|
2746
2762
|
}
|
|
2747
2763
|
}
|
|
2748
2764
|
.sg\:min-\[800px\]\:px-0 {
|
|
2749
2765
|
@media (width >= 800px) {
|
|
2750
|
-
padding-inline:
|
|
2766
|
+
padding-inline: 0;
|
|
2751
2767
|
}
|
|
2752
2768
|
}
|
|
2753
2769
|
.sg\:min-\[1056px\]\:px-0 {
|
|
2754
2770
|
@media (width >= 1056px) {
|
|
2755
|
-
padding-inline:
|
|
2771
|
+
padding-inline: 0;
|
|
2756
2772
|
}
|
|
2757
2773
|
}
|
|
2758
2774
|
.sg\:sm\:max-w-sm {
|
|
@@ -3170,9 +3186,11 @@
|
|
|
3170
3186
|
}
|
|
3171
3187
|
html {
|
|
3172
3188
|
color-scheme: dark light;
|
|
3189
|
+
scrollbar-gutter: stable;
|
|
3190
|
+
interpolate-size: allow-keywords;
|
|
3173
3191
|
}
|
|
3174
3192
|
body {
|
|
3175
|
-
min-
|
|
3193
|
+
min-block-size: 100svh;
|
|
3176
3194
|
}
|
|
3177
3195
|
picture,
|
|
3178
3196
|
svg,
|