@lssm/lib.design-system 0.0.0-canary-20251210082611 → 0.0.0-canary-20251212004227
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/atoms/Input.js +1 -1
- package/dist/components/atoms/Textarea.js +2 -2
- package/dist/components/forms/ActionForm.js +18 -0
- package/dist/components/legal/molecules/ContactFields.js +8 -8
- package/dist/components/marketing/MarketingCard.js +20 -0
- package/dist/components/marketing/MarketingCardsSection.js +28 -0
- package/dist/components/marketing/MarketingComparisonSection.js +52 -0
- package/dist/components/marketing/MarketingIconCard.js +73 -0
- package/dist/components/marketing/MarketingSection.js +61 -0
- package/dist/components/marketing/MarketingStepCard.js +36 -0
- package/dist/components/molecules/FiltersToolbar.js +1 -1
- package/dist/components/organisms/EmptySearchResult.js +3 -3
- package/dist/components/organisms/Footer.js +2 -4
- package/dist/components/organisms/MarketingHeader.js +3 -3
- package/dist/components/organisms/MarketingLayout.js +1 -0
- package/dist/index.js +8 -1
- package/package.json +1 -1
|
@@ -6,10 +6,10 @@ import { Textarea } from "@lssm/lib.ui-kit-web/ui/textarea";
|
|
|
6
6
|
//#region src/components/atoms/Textarea.tsx
|
|
7
7
|
function Textarea$1({ value, defaultValue, onChange, onSubmit, onFocus, onBlur, placeholder, disabled, readOnly, maxLength, name, className, rows, keyboard, ...rest }) {
|
|
8
8
|
const webKeyboard = mapKeyboardToWeb(keyboard);
|
|
9
|
-
const handleChange = React.useCallback((e) => onChange?.(e
|
|
9
|
+
const handleChange = React.useCallback((e) => onChange?.(e), [onChange]);
|
|
10
10
|
const handleKeyDown = React.useCallback((e) => {
|
|
11
11
|
if (e.key === "Enter" && webKeyboard.type !== "search") {
|
|
12
|
-
if (e.metaKey || e.ctrlKey) onSubmit?.();
|
|
12
|
+
if (e.metaKey || e.ctrlKey) onSubmit?.(e);
|
|
13
13
|
}
|
|
14
14
|
}, [onSubmit, webKeyboard.type]);
|
|
15
15
|
return /* @__PURE__ */ jsx(Textarea, {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import "react";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
|
|
6
|
+
|
|
7
|
+
//#region src/components/forms/ActionForm.tsx
|
|
8
|
+
function ActionForm({ action, children, className, ...rest }) {
|
|
9
|
+
return /* @__PURE__ */ jsx("form", {
|
|
10
|
+
action,
|
|
11
|
+
className: cn("space-y-3", className),
|
|
12
|
+
...rest,
|
|
13
|
+
children
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { ActionForm };
|
|
@@ -13,9 +13,9 @@ function ContactFields({ value, onChange, disabled }) {
|
|
|
13
13
|
className: "space-y-2",
|
|
14
14
|
children: [/* @__PURE__ */ jsx(Label, { children: "Nom" }), /* @__PURE__ */ jsx(Input, {
|
|
15
15
|
value: value.name,
|
|
16
|
-
onChange: (
|
|
16
|
+
onChange: (e) => onChange({
|
|
17
17
|
...value,
|
|
18
|
-
name:
|
|
18
|
+
name: e.target.value
|
|
19
19
|
}),
|
|
20
20
|
disabled
|
|
21
21
|
})]
|
|
@@ -25,9 +25,9 @@ function ContactFields({ value, onChange, disabled }) {
|
|
|
25
25
|
children: [/* @__PURE__ */ jsx(Label, { children: "Email" }), /* @__PURE__ */ jsx(Input, {
|
|
26
26
|
type: "email",
|
|
27
27
|
value: value.email,
|
|
28
|
-
onChange: (
|
|
28
|
+
onChange: (e) => onChange({
|
|
29
29
|
...value,
|
|
30
|
-
email:
|
|
30
|
+
email: e.target.value
|
|
31
31
|
}),
|
|
32
32
|
disabled
|
|
33
33
|
})]
|
|
@@ -36,9 +36,9 @@ function ContactFields({ value, onChange, disabled }) {
|
|
|
36
36
|
className: "space-y-2",
|
|
37
37
|
children: [/* @__PURE__ */ jsx(Label, { children: "Objet" }), /* @__PURE__ */ jsx(Input, {
|
|
38
38
|
value: value.subject,
|
|
39
|
-
onChange: (
|
|
39
|
+
onChange: (e) => onChange({
|
|
40
40
|
...value,
|
|
41
|
-
subject:
|
|
41
|
+
subject: e.target.value
|
|
42
42
|
}),
|
|
43
43
|
disabled
|
|
44
44
|
})]
|
|
@@ -47,9 +47,9 @@ function ContactFields({ value, onChange, disabled }) {
|
|
|
47
47
|
className: "space-y-2",
|
|
48
48
|
children: [/* @__PURE__ */ jsx(Label, { children: "Message" }), /* @__PURE__ */ jsx(Textarea, {
|
|
49
49
|
value: value.message,
|
|
50
|
-
onChange: (
|
|
50
|
+
onChange: (e) => onChange({
|
|
51
51
|
...value,
|
|
52
|
-
message:
|
|
52
|
+
message: e.target.value
|
|
53
53
|
}),
|
|
54
54
|
disabled,
|
|
55
55
|
rows: 6
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import "react";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
|
|
4
|
+
import { Card, CardContent as CardContent$1, CardDescription, CardHeader as CardHeader$1, CardTitle as CardTitle$1 } from "@lssm/lib.ui-kit-web/ui/card";
|
|
5
|
+
|
|
6
|
+
//#region src/components/marketing/MarketingCard.tsx
|
|
7
|
+
const toneClasses = {
|
|
8
|
+
default: "border-border/60 bg-card/90",
|
|
9
|
+
muted: "border-border/50 bg-muted/50",
|
|
10
|
+
elevated: "border-border/50 bg-card shadow-lg shadow-black/5"
|
|
11
|
+
};
|
|
12
|
+
function MarketingCard({ tone = "default", className, ...props }) {
|
|
13
|
+
return /* @__PURE__ */ jsx(Card, {
|
|
14
|
+
className: cn("backdrop-blur transition-shadow", toneClasses[tone], className),
|
|
15
|
+
...props
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { CardContent$1 as CardContent, CardDescription, CardHeader$1 as CardHeader, CardTitle$1 as CardTitle, MarketingCard };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { MarketingSection } from "./MarketingSection.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
|
|
6
|
+
|
|
7
|
+
//#region src/components/marketing/MarketingCardsSection.tsx
|
|
8
|
+
const gridVariants = cva("grid gap-6", {
|
|
9
|
+
variants: { columns: {
|
|
10
|
+
1: "grid-cols-1",
|
|
11
|
+
2: "grid-cols-1 md:grid-cols-2",
|
|
12
|
+
3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
|
|
13
|
+
4: "grid-cols-1 md:grid-cols-2 lg:grid-cols-4"
|
|
14
|
+
} },
|
|
15
|
+
defaultVariants: { columns: 3 }
|
|
16
|
+
});
|
|
17
|
+
function MarketingCardsSection({ children, columns, gridClassName, ...sectionProps }) {
|
|
18
|
+
return /* @__PURE__ */ jsx(MarketingSection, {
|
|
19
|
+
...sectionProps,
|
|
20
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
21
|
+
className: cn(gridVariants({ columns }), gridClassName),
|
|
22
|
+
children
|
|
23
|
+
})
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
export { MarketingCardsSection };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { MarketingSection } from "./MarketingSection.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { CheckCircle } from "lucide-react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { HStack, VStack } from "@lssm/lib.ui-kit-web/ui/stack";
|
|
6
|
+
import { Muted, Small } from "@lssm/lib.ui-kit-web/ui/typography";
|
|
7
|
+
|
|
8
|
+
//#region src/components/marketing/MarketingComparisonSection.tsx
|
|
9
|
+
function MarketingComparisonSection({ eyebrow, title, subtitle, left, right, tone = "default", padding = "comfortable" }) {
|
|
10
|
+
return /* @__PURE__ */ jsx(MarketingSection, {
|
|
11
|
+
tone,
|
|
12
|
+
padding,
|
|
13
|
+
eyebrow,
|
|
14
|
+
title,
|
|
15
|
+
subtitle,
|
|
16
|
+
align: "center",
|
|
17
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
18
|
+
className: "grid gap-8 md:grid-cols-2",
|
|
19
|
+
children: [left, right].map((col) => /* @__PURE__ */ jsxs(VStack, {
|
|
20
|
+
gap: "md",
|
|
21
|
+
align: "start",
|
|
22
|
+
className: "border-border/50 bg-card/50 rounded-xl border p-6",
|
|
23
|
+
children: [/* @__PURE__ */ jsx(Small, {
|
|
24
|
+
className: "text-sm font-semibold",
|
|
25
|
+
children: col.title
|
|
26
|
+
}), /* @__PURE__ */ jsx(VStack, {
|
|
27
|
+
as: "div",
|
|
28
|
+
role: "list",
|
|
29
|
+
gap: "sm",
|
|
30
|
+
align: "start",
|
|
31
|
+
className: "list-none p-0",
|
|
32
|
+
children: col.items.map((item, idx) => /* @__PURE__ */ jsxs(HStack, {
|
|
33
|
+
as: "div",
|
|
34
|
+
role: "listitem",
|
|
35
|
+
gap: "sm",
|
|
36
|
+
align: "start",
|
|
37
|
+
children: [/* @__PURE__ */ jsx(CheckCircle, {
|
|
38
|
+
className: "mt-0.5 text-violet-400",
|
|
39
|
+
size: 18
|
|
40
|
+
}), /* @__PURE__ */ jsx(Muted, {
|
|
41
|
+
className: "text-sm leading-relaxed",
|
|
42
|
+
children: item
|
|
43
|
+
})]
|
|
44
|
+
}, idx))
|
|
45
|
+
})]
|
|
46
|
+
}, col.title))
|
|
47
|
+
})
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
//#endregion
|
|
52
|
+
export { MarketingComparisonSection };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { CardContent, CardTitle, MarketingCard } from "./MarketingCard.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import { HStack, VStack } from "@lssm/lib.ui-kit-web/ui/stack";
|
|
6
|
+
import { Muted, Small } from "@lssm/lib.ui-kit-web/ui/typography";
|
|
7
|
+
|
|
8
|
+
//#region src/components/marketing/MarketingIconCard.tsx
|
|
9
|
+
const layoutVariants = cva("w-full", {
|
|
10
|
+
variants: { variant: {
|
|
11
|
+
iconFirst: "space-y-3",
|
|
12
|
+
listing: "",
|
|
13
|
+
support: ""
|
|
14
|
+
} },
|
|
15
|
+
defaultVariants: { variant: "iconFirst" }
|
|
16
|
+
});
|
|
17
|
+
function MarketingIconCard({ icon: Icon, title, description, tone = "default", iconClassName, headerAction, variant = "iconFirst", className }) {
|
|
18
|
+
return /* @__PURE__ */ jsx(MarketingCard, {
|
|
19
|
+
tone,
|
|
20
|
+
className,
|
|
21
|
+
children: /* @__PURE__ */ jsx(CardContent, {
|
|
22
|
+
className: layoutVariants({ variant }),
|
|
23
|
+
children: variant === "iconFirst" ? /* @__PURE__ */ jsxs(VStack, {
|
|
24
|
+
gap: "sm",
|
|
25
|
+
align: "start",
|
|
26
|
+
children: [
|
|
27
|
+
/* @__PURE__ */ jsxs(HStack, {
|
|
28
|
+
gap: "sm",
|
|
29
|
+
align: "center",
|
|
30
|
+
justify: "between",
|
|
31
|
+
className: "w-full",
|
|
32
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
33
|
+
className: iconClassName,
|
|
34
|
+
size: 24
|
|
35
|
+
}), headerAction]
|
|
36
|
+
}),
|
|
37
|
+
/* @__PURE__ */ jsx(CardTitle, {
|
|
38
|
+
className: "text-xl",
|
|
39
|
+
children: title
|
|
40
|
+
}),
|
|
41
|
+
description ? /* @__PURE__ */ jsx(Muted, {
|
|
42
|
+
className: "text-sm leading-relaxed",
|
|
43
|
+
children: description
|
|
44
|
+
}) : null
|
|
45
|
+
]
|
|
46
|
+
}) : /* @__PURE__ */ jsxs(HStack, {
|
|
47
|
+
gap: "md",
|
|
48
|
+
align: "start",
|
|
49
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
50
|
+
className: iconClassName,
|
|
51
|
+
size: variant === "listing" ? 18 : 20
|
|
52
|
+
}), /* @__PURE__ */ jsxs(VStack, {
|
|
53
|
+
gap: "xs",
|
|
54
|
+
align: "start",
|
|
55
|
+
children: [
|
|
56
|
+
/* @__PURE__ */ jsx(CardTitle, {
|
|
57
|
+
className: "text-base font-semibold",
|
|
58
|
+
children: title
|
|
59
|
+
}),
|
|
60
|
+
description ? /* @__PURE__ */ jsx(Muted, {
|
|
61
|
+
className: "text-sm leading-relaxed",
|
|
62
|
+
children: description
|
|
63
|
+
}) : null,
|
|
64
|
+
headerAction ? /* @__PURE__ */ jsx(Small, { children: headerAction }) : null
|
|
65
|
+
]
|
|
66
|
+
})]
|
|
67
|
+
})
|
|
68
|
+
})
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
//#endregion
|
|
73
|
+
export { MarketingIconCard };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import "react";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { VStack } from "@lssm/lib.ui-kit-web/ui/stack";
|
|
5
|
+
import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
|
|
6
|
+
import { Muted } from "@lssm/lib.ui-kit-web/ui/typography";
|
|
7
|
+
|
|
8
|
+
//#region src/components/marketing/MarketingSection.tsx
|
|
9
|
+
const sectionVariants = cva("w-full", {
|
|
10
|
+
variants: {
|
|
11
|
+
tone: {
|
|
12
|
+
default: "bg-background",
|
|
13
|
+
muted: "bg-muted/40 border-b border-border/60",
|
|
14
|
+
panel: "bg-card/60 shadow-[0_10px_60px_-45px_rgba(0,0,0,0.35)] backdrop-blur",
|
|
15
|
+
gradient: "bg-gradient-to-br from-violet-500/10 via-indigo-500/5 to-blue-500/5"
|
|
16
|
+
},
|
|
17
|
+
padding: {
|
|
18
|
+
compact: "py-10",
|
|
19
|
+
comfortable: "py-16 sm:py-20",
|
|
20
|
+
spacious: "py-20 sm:py-24"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
tone: "default",
|
|
25
|
+
padding: "comfortable"
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
function MarketingSection({ children, eyebrow, title, subtitle, align = "center", maxWidth = "xl", tone, padding, className }) {
|
|
29
|
+
const contentWidth = maxWidth === "lg" ? "max-w-5xl" : "max-w-6xl";
|
|
30
|
+
const headerAlign = align === "center" ? "items-center text-center" : "items-start text-left";
|
|
31
|
+
return /* @__PURE__ */ jsx("section", {
|
|
32
|
+
className: cn(sectionVariants({
|
|
33
|
+
tone,
|
|
34
|
+
padding
|
|
35
|
+
}), "transition-colors", className),
|
|
36
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
37
|
+
className: cn("mx-auto w-full px-4 sm:px-6 lg:px-8", contentWidth),
|
|
38
|
+
children: [(eyebrow || title || subtitle) && /* @__PURE__ */ jsxs(VStack, {
|
|
39
|
+
gap: "sm",
|
|
40
|
+
className: cn("mb-10", headerAlign),
|
|
41
|
+
children: [
|
|
42
|
+
eyebrow ? /* @__PURE__ */ jsx(Muted, {
|
|
43
|
+
className: "text-[11px] font-semibold tracking-[0.2em] uppercase",
|
|
44
|
+
children: eyebrow
|
|
45
|
+
}) : null,
|
|
46
|
+
title ? /* @__PURE__ */ jsx("div", {
|
|
47
|
+
className: "text-3xl leading-tight font-bold md:text-4xl",
|
|
48
|
+
children: title
|
|
49
|
+
}) : null,
|
|
50
|
+
subtitle ? /* @__PURE__ */ jsx(Muted, {
|
|
51
|
+
className: "text-base md:text-lg",
|
|
52
|
+
children: subtitle
|
|
53
|
+
}) : null
|
|
54
|
+
]
|
|
55
|
+
}), children]
|
|
56
|
+
})
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
//#endregion
|
|
61
|
+
export { MarketingSection };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { CardContent, CardHeader, CardTitle, MarketingCard } from "./MarketingCard.js";
|
|
2
|
+
import "react";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { HStack, VStack } from "@lssm/lib.ui-kit-web/ui/stack";
|
|
5
|
+
import { Muted, Small } from "@lssm/lib.ui-kit-web/ui/typography";
|
|
6
|
+
|
|
7
|
+
//#region src/components/marketing/MarketingStepCard.tsx
|
|
8
|
+
function MarketingStepCard({ step, title, description, tone = "default" }) {
|
|
9
|
+
return /* @__PURE__ */ jsxs(MarketingCard, {
|
|
10
|
+
tone,
|
|
11
|
+
children: [/* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(HStack, {
|
|
12
|
+
gap: "md",
|
|
13
|
+
align: "center",
|
|
14
|
+
className: "w-full",
|
|
15
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
16
|
+
className: "bg-primary/15 flex h-10 w-10 items-center justify-center rounded-lg",
|
|
17
|
+
children: /* @__PURE__ */ jsx(Small, {
|
|
18
|
+
className: "text-primary font-semibold",
|
|
19
|
+
children: step
|
|
20
|
+
})
|
|
21
|
+
}), /* @__PURE__ */ jsx(CardTitle, {
|
|
22
|
+
className: "text-lg",
|
|
23
|
+
children: title
|
|
24
|
+
})]
|
|
25
|
+
}) }), description ? /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(VStack, {
|
|
26
|
+
gap: "sm",
|
|
27
|
+
children: /* @__PURE__ */ jsx(Muted, {
|
|
28
|
+
className: "text-sm leading-relaxed",
|
|
29
|
+
children: description
|
|
30
|
+
})
|
|
31
|
+
}) }) : null]
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
export { MarketingStepCard };
|
|
@@ -30,7 +30,7 @@ function FiltersToolbar({ className, children, right, searchPlaceholder, searchV
|
|
|
30
30
|
className: "flex flex-1 items-center gap-2",
|
|
31
31
|
children: [/* @__PURE__ */ jsx(Input, {
|
|
32
32
|
value: q,
|
|
33
|
-
onChange: setQ,
|
|
33
|
+
onChange: (e) => setQ(e.target.value),
|
|
34
34
|
onKeyDown: (e) => {
|
|
35
35
|
if (e.key === "Enter") onSearchSubmit?.();
|
|
36
36
|
},
|
|
@@ -13,9 +13,9 @@ function EmptySearchResult({ emptySearchTitle, emtptySearchTitle, emptySearchDes
|
|
|
13
13
|
className,
|
|
14
14
|
children: [/* @__PURE__ */ jsxs(EmptyHeader, { children: [/* @__PURE__ */ jsx(EmptyTitle, { children: title }), description ? /* @__PURE__ */ jsx(EmptyDescription, { children: description }) : null] }), /* @__PURE__ */ jsx(EmptyContent, { children: /* @__PURE__ */ jsx(Input, {
|
|
15
15
|
value: q,
|
|
16
|
-
onChange: (
|
|
17
|
-
setQ(
|
|
18
|
-
onChange?.(
|
|
16
|
+
onChange: (e) => {
|
|
17
|
+
setQ(e.target.value);
|
|
18
|
+
onChange?.(e.target.value);
|
|
19
19
|
},
|
|
20
20
|
placeholder: "Search…",
|
|
21
21
|
keyboard: { kind: "search" }
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "react";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { cva } from "class-variance-authority";
|
|
4
|
+
import { HStack, VStack } from "@lssm/lib.ui-kit-web/ui/stack";
|
|
4
5
|
import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
|
|
5
6
|
|
|
6
7
|
//#region src/components/organisms/Footer.tsx
|
|
@@ -34,10 +35,7 @@ function Footer({ left, center, right, links, className, variant }) {
|
|
|
34
35
|
className: "text-muted-foreground text-center",
|
|
35
36
|
children: center
|
|
36
37
|
}),
|
|
37
|
-
/* @__PURE__ */ jsx(
|
|
38
|
-
className: "flex items-center justify-end gap-3",
|
|
39
|
-
children: right
|
|
40
|
-
})
|
|
38
|
+
/* @__PURE__ */ jsx(VStack, { children: right })
|
|
41
39
|
]
|
|
42
40
|
}), links && links.length > 0 && /* @__PURE__ */ jsx("div", {
|
|
43
41
|
className: "text-muted-foreground mt-4 flex flex-wrap items-center justify-center gap-3 text-base",
|
|
@@ -51,7 +51,7 @@ function MarketingHeader({ logo, nav = [], userMenu, cta, className, density, ri
|
|
|
51
51
|
side: "left",
|
|
52
52
|
className: "w-[320px] p-4",
|
|
53
53
|
children: [
|
|
54
|
-
/* @__PURE__ */ jsx(SheetHeader, { children: /* @__PURE__ */ jsx(CommandSearchTrigger, { groups: commandPaletteGroups }) }),
|
|
54
|
+
!!commandPaletteGroups?.length && /* @__PURE__ */ jsx(SheetHeader, { children: /* @__PURE__ */ jsx(CommandSearchTrigger, { groups: commandPaletteGroups }) }),
|
|
55
55
|
cta && /* @__PURE__ */ jsx(VStack, {
|
|
56
56
|
className: "mb-3",
|
|
57
57
|
children: /* @__PURE__ */ jsx(ButtonLink, {
|
|
@@ -87,11 +87,11 @@ function MarketingHeader({ logo, nav = [], userMenu, cta, className, density, ri
|
|
|
87
87
|
/* @__PURE__ */ jsxs(HStack, {
|
|
88
88
|
className: "flex items-center gap-2",
|
|
89
89
|
children: [
|
|
90
|
-
/* @__PURE__ */ jsx(Box, {
|
|
90
|
+
!!commandPaletteGroups?.length && /* @__PURE__ */ jsx(Box, {
|
|
91
91
|
className: "hidden items-center gap-2 md:flex",
|
|
92
92
|
children: /* @__PURE__ */ jsx(CommandSearchTrigger, { groups: commandPaletteGroups })
|
|
93
93
|
}),
|
|
94
|
-
/* @__PURE__ */ jsx(LangSwitchDropdown, {
|
|
94
|
+
!!(langSwitchProps?.options?.length > 1) && /* @__PURE__ */ jsx(LangSwitchDropdown, {
|
|
95
95
|
value: langSwitchProps.value,
|
|
96
96
|
onChange: langSwitchProps.onChange,
|
|
97
97
|
options: langSwitchProps.options
|
|
@@ -8,6 +8,7 @@ import { cn } from "@lssm/lib.ui-kit-web/ui/utils";
|
|
|
8
8
|
//#region src/components/organisms/MarketingLayout.tsx
|
|
9
9
|
function MarketingLayout({ header, children, footer, className }) {
|
|
10
10
|
return /* @__PURE__ */ jsxs(VStack, {
|
|
11
|
+
gap: "none",
|
|
11
12
|
className: cn("bg-background min-h-svh", className),
|
|
12
13
|
children: [
|
|
13
14
|
header,
|
package/dist/index.js
CHANGED
|
@@ -23,6 +23,12 @@ import { MarketingHeader } from "./components/organisms/MarketingHeader.js";
|
|
|
23
23
|
import { MarketingHeaderDesktop } from "./components/organisms/MarketingHeaderDesktop.js";
|
|
24
24
|
import { MarketingHeaderMobile } from "./components/organisms/MarketingHeaderMobile.js";
|
|
25
25
|
import { MarketingLayout } from "./components/organisms/MarketingLayout.js";
|
|
26
|
+
import { MarketingSection } from "./components/marketing/MarketingSection.js";
|
|
27
|
+
import { MarketingCardsSection } from "./components/marketing/MarketingCardsSection.js";
|
|
28
|
+
import { CardContent, CardDescription, CardHeader, CardTitle, MarketingCard } from "./components/marketing/MarketingCard.js";
|
|
29
|
+
import { MarketingIconCard } from "./components/marketing/MarketingIconCard.js";
|
|
30
|
+
import { MarketingStepCard } from "./components/marketing/MarketingStepCard.js";
|
|
31
|
+
import { MarketingComparisonSection } from "./components/marketing/MarketingComparisonSection.js";
|
|
26
32
|
import { AppLayout } from "./components/organisms/AppLayout.js";
|
|
27
33
|
import { AcademyLayout } from "./components/organisms/AcademyLayout.js";
|
|
28
34
|
import { AppHeader } from "./components/organisms/AppHeader.js";
|
|
@@ -95,6 +101,7 @@ import { FormGrid, FormRow, FormSection } from "./components/forms/FormLayout.js
|
|
|
95
101
|
import { FormCardLayout } from "./components/forms/FormCardLayout.js";
|
|
96
102
|
import { FormStepsLayout } from "./components/forms/FormStepsLayout.js";
|
|
97
103
|
import { FormOneByOneLayout } from "./components/forms/FormOneByOneLayout.js";
|
|
104
|
+
import { ActionForm } from "./components/forms/ActionForm.js";
|
|
98
105
|
import { DataViewList } from "./components/data-view/DataViewList.js";
|
|
99
106
|
import { DataViewTable } from "./components/data-view/DataViewTable.js";
|
|
100
107
|
import { DataViewDetail } from "./components/data-view/DataViewDetail.js";
|
|
@@ -104,4 +111,4 @@ import { DataViewRenderer } from "./components/data-view/DataViewRenderer.js";
|
|
|
104
111
|
init_HoverPreview();
|
|
105
112
|
|
|
106
113
|
//#endregion
|
|
107
|
-
export { AcademyLayout, AgentMonitor, AiLinkButton, AppHeader, AppLayout, AppSidebar, ApprovalQueue, Breadcrumbs, Button, ButtonLink_default as ButtonLink, CommandPalette, CommandSearchTrigger, ConsentItem, ConsentList, ContactFields, ContactForm, ContactTemplate, CookiesTemplate, Cta, DEFAULT_BREAKPOINTS, DataViewDetail, DataViewList, DataViewRenderer, DataViewTable, DateChip, DefinitionList, DeleteButton, DesktopHeader, DurationChip, EditButton, EmptyDataList, EmptySearchResult, EmptyState, EntityCard, ErrorState, FAQSection, FeatureCarousel, FeaturesSection, FiltersToolbar, Footer, FormCardLayout, FormDialog, FormGrid, FormOneByOneLayout, FormRow, FormSection, FormStepsLayout, GDPRDataRequest, GDPRRights, Header, HeroResponsive, HeroSection, HoverPreview, HoverPreviewDoc, HoverPreviewMedia, HoverPreviewSimple, HoverPreviewStats, HoverPreviewUser, Input, KeyValueList, LangSwitch, LegalCallout, LegalHeading, LegalList, LegalMeta, LegalPageLayout, LegalSection, LegalTOC, LegalText, Link, ListCardPage, ListGridPage, ListPageResponsive, ListPageTemplate, ListTablePage, LoaderBlock, LoaderCircular, MarketingHeader, MarketingHeaderDesktop, MarketingHeaderMobile, MarketingLayout, MobileHeader, NavBrand, NavMain, NavUser, PageHeaderResponsive, PlaceChip, PricingCarousel, PricingSection, PrivacyTemplate, SalesTermsTemplate, SkeletonBlock, SkeletonCircle, SkeletonList, StatCard, StatCardGroup, StatusChip, Stepper, TermsTemplate, TestimonialCarousel, Textarea, TimeChip, ToggleButton, ToggleLeftButton, ToggleRightButton, ViewButton, ZodForm, defaultTokens, dsBaseVariants, formRenderer, mapTokensForPlatform, useColorScheme, useListUrlState, useReducedMotion, useResponsive, withPlatformUI };
|
|
114
|
+
export { AcademyLayout, ActionForm, AgentMonitor, AiLinkButton, AppHeader, AppLayout, AppSidebar, ApprovalQueue, Breadcrumbs, Button, ButtonLink_default as ButtonLink, CommandPalette, CommandSearchTrigger, ConsentItem, ConsentList, ContactFields, ContactForm, ContactTemplate, CookiesTemplate, Cta, DEFAULT_BREAKPOINTS, DataViewDetail, DataViewList, DataViewRenderer, DataViewTable, DateChip, DefinitionList, DeleteButton, DesktopHeader, DurationChip, EditButton, EmptyDataList, EmptySearchResult, EmptyState, EntityCard, ErrorState, FAQSection, FeatureCarousel, FeaturesSection, FiltersToolbar, Footer, FormCardLayout, FormDialog, FormGrid, FormOneByOneLayout, FormRow, FormSection, FormStepsLayout, GDPRDataRequest, GDPRRights, Header, HeroResponsive, HeroSection, HoverPreview, HoverPreviewDoc, HoverPreviewMedia, HoverPreviewSimple, HoverPreviewStats, HoverPreviewUser, Input, KeyValueList, LangSwitch, LegalCallout, LegalHeading, LegalList, LegalMeta, LegalPageLayout, LegalSection, LegalTOC, LegalText, Link, ListCardPage, ListGridPage, ListPageResponsive, ListPageTemplate, ListTablePage, LoaderBlock, LoaderCircular, MarketingCard, CardContent as MarketingCardContent, CardDescription as MarketingCardDescription, CardHeader as MarketingCardHeader, CardTitle as MarketingCardTitle, MarketingCardsSection, MarketingComparisonSection, MarketingHeader, MarketingHeaderDesktop, MarketingHeaderMobile, MarketingIconCard, MarketingLayout, MarketingSection, MarketingStepCard, MobileHeader, NavBrand, NavMain, NavUser, PageHeaderResponsive, PlaceChip, PricingCarousel, PricingSection, PrivacyTemplate, SalesTermsTemplate, SkeletonBlock, SkeletonCircle, SkeletonList, StatCard, StatCardGroup, StatusChip, Stepper, TermsTemplate, TestimonialCarousel, Textarea, TimeChip, ToggleButton, ToggleLeftButton, ToggleRightButton, ViewButton, ZodForm, defaultTokens, dsBaseVariants, formRenderer, mapTokensForPlatform, useColorScheme, useListUrlState, useReducedMotion, useResponsive, withPlatformUI };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lssm/lib.design-system",
|
|
3
|
-
"version": "0.0.0-canary-
|
|
3
|
+
"version": "0.0.0-canary-20251212004227",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
|
|
6
6
|
"build": "bun build:bundle && bun build:types",
|