dune-react 0.0.10 → 0.0.11

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 (75) hide show
  1. package/dist/components/puck-base/article-card.js +1 -1
  2. package/dist/components/puck-base/button.d.ts +0 -1
  3. package/dist/components/puck-base/button.js +3 -3
  4. package/dist/components/puck-base/card.js +0 -1
  5. package/dist/components/puck-base/content.js +0 -1
  6. package/dist/components/puck-base/core/fields.d.ts +1 -23
  7. package/dist/components/puck-base/core/fields.js +6 -7
  8. package/dist/components/puck-base/core/styles.d.ts +102 -33
  9. package/dist/components/puck-base/core/styles.js +45 -81
  10. package/dist/components/puck-base/core/with-editable.d.ts +4 -9
  11. package/dist/components/puck-base/core/with-editable.js +43 -62
  12. package/dist/components/puck-base/{action-field.d.ts → fields/action-field.d.ts} +1 -1
  13. package/dist/components/puck-base/{action-field.js → fields/action-field.js} +91 -16
  14. package/dist/components/puck-base/fields/auto-field.d.ts +0 -1
  15. package/dist/components/puck-base/fields/auto-field.js +2 -90
  16. package/dist/components/puck-base/form.js +0 -1
  17. package/dist/components/puck-base/index.d.ts +1 -1
  18. package/dist/components/puck-base/navigation-menu.d.ts +18 -0
  19. package/dist/components/puck-base/navigation-menu.js +202 -0
  20. package/dist/components/puck-block/cta-sections/banner-cta-1/banner-cta.d.ts +2 -1
  21. package/dist/components/puck-block/cta-sections/banner-cta-1/banner-cta.js +6 -5
  22. package/dist/components/puck-block/cta-sections/banner-cta-1/index.js +2 -2
  23. package/dist/components/puck-block/cta-sections/gradient-cta-1/gradient-cta.js +34 -12
  24. package/dist/components/puck-block/cta-sections/promo-section-1/index.js +1 -2
  25. package/dist/components/puck-block/cta-sections/promo-section-1/promo-section.js +2 -2
  26. package/dist/components/puck-block/faq-sections/accordion-1/accordion.js +8 -3
  27. package/dist/components/puck-block/feature-sections/feature-cards-1/index.js +0 -2
  28. package/dist/components/puck-block/feature-sections/icon-grid-1/icon-grid.js +1 -1
  29. package/dist/components/puck-block/gallery-sections/gallery-1/index.js +1 -1
  30. package/dist/components/puck-block/gallery-sections/gallery-2/gallery-2.js +14 -6
  31. package/dist/components/puck-block/gallery-sections/gallery-2/index.js +1 -1
  32. package/dist/components/puck-block/header-sections/header-1/header.d.ts +4 -1
  33. package/dist/components/puck-block/header-sections/header-1/header.js +26 -19
  34. package/dist/components/puck-block/header-sections/header-1/index.js +13 -18
  35. package/dist/components/puck-block/hero-sections/fullscreen-hero-1/fullscreen-hero.js +15 -2
  36. package/dist/components/puck-block/hero-sections/fullscreen-hero-1/index.js +0 -1
  37. package/dist/components/puck-block/hero-sections/gradient-hero-1/gradient-hero.js +2 -2
  38. package/dist/components/puck-block/hero-sections/gradient-hero-1/index.js +1 -0
  39. package/dist/components/puck-block/hero-sections/grid-hero-1/grid-hero.js +1 -1
  40. package/dist/components/puck-block/hero-sections/hero-1/hero.js +1 -1
  41. package/dist/components/puck-block/hero-sections/image-hero-1/image-hero.d.ts +0 -1
  42. package/dist/components/puck-block/hero-sections/image-hero-1/image-hero.js +1 -1
  43. package/dist/components/puck-block/hero-sections/image-hero-1/index.js +21 -4
  44. package/dist/components/puck-block/hero-sections/video-hero-1/video-hero.js +1 -1
  45. package/dist/components/puck-block/location-sections/location-1/index.js +0 -3
  46. package/dist/components/puck-block/location-sections/location-1/location.d.ts +1 -0
  47. package/dist/components/puck-block/location-sections/location-1/location.js +1 -2
  48. package/dist/components/puck-block/location-sections/location-2/index.js +0 -3
  49. package/dist/components/puck-block/location-sections/location-2/location.d.ts +1 -0
  50. package/dist/components/puck-block/location-sections/location-2/location.js +1 -2
  51. package/dist/components/puck-block/location-sections/location-3/location.d.ts +2 -0
  52. package/dist/components/puck-block/location-sections/location-3/location.js +5 -2
  53. package/dist/components/puck-block/metrics-sections/stats-2/index.js +0 -2
  54. package/dist/components/puck-block/metrics-sections/stats-2/stats-2.js +0 -1
  55. package/dist/components/puck-block/metrics-sections/stats-3/index.js +0 -2
  56. package/dist/components/puck-block/metrics-sections/stats-3/stats-3.js +14 -1
  57. package/dist/components/puck-block/pricing-sections/pricing-1/index.js +0 -2
  58. package/dist/components/puck-block/pricing-sections/pricing-2/index.js +0 -4
  59. package/dist/components/puck-block/showcase-sections/before-after-1/index.js +0 -1
  60. package/dist/components/puck-block/showcase-sections/case-study-1/case-study.js +1 -1
  61. package/dist/components/puck-block/showcase-sections/case-study-1/index.js +1 -1
  62. package/dist/components/puck-block/team-sections/team-grid-1/index.js +1 -1
  63. package/dist/components/puck-block/team-sections/team-grid-2/index.js +0 -2
  64. package/dist/components/puck-block/testimonial-sections/logo-marquee-1/index.js +1 -1
  65. package/dist/components/puck-block/testimonial-sections/logo-marquee-1/logo-marquee.js +1 -1
  66. package/dist/components/puck-block/testimonial-sections/review-section-1/index.js +1 -1
  67. package/dist/components/puck-block/testimonial-sections/testimonials-1/testimonials.js +30 -10
  68. package/dist/components/puck-block/text-sections/articles-1/articles.js +1 -1
  69. package/dist/components/puck-block/text-sections/articles-1/index.js +1 -2
  70. package/dist/components/puck-block/text-sections/content-section-1/content-section.js +0 -1
  71. package/dist/components/puck-block/text-sections/content-section-1/index.js +0 -2
  72. package/dist/components/puck-block/text-sections/tab-section-1/tab-section.js +7 -3
  73. package/dist/components/shadcn/navigation-menu.js +8 -33
  74. package/dist/index.js +1 -1
  75. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { memo, useCallback, useState, useRef, useMemo, useEffect } from "react";
2
+ import { memo, useState, useRef, useMemo, useCallback, useEffect } from "react";
3
3
  import { Input } from "../../shadcn/input.js";
4
4
  import { Textarea } from "../../shadcn/textarea.js";
5
5
  import { Label } from "../../shadcn/label.js";
@@ -8,8 +8,7 @@ import { Button } from "../../shadcn/button.js";
8
8
  import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from "../../shadcn/select.js";
9
9
  import { Popover, PopoverTrigger, PopoverContent } from "../../shadcn/popover.js";
10
10
  import { ToggleGroup, ToggleGroupItem } from "../../shadcn/toggle-group.js";
11
- import { LinkIcon, XIcon, ClipboardIcon, GlobeIcon, ChevronDownIcon, CheckIcon } from "lucide-react";
12
- import { useEditorContext } from "../editor-context.js";
11
+ import { ChevronDownIcon, CheckIcon } from "lucide-react";
13
12
  const LARGE_SELECT_THRESHOLD = 200;
14
13
  const VIRTUAL_ITEM_HEIGHT = 32;
15
14
  const VIRTUAL_VIEWPORT_HEIGHT = 256;
@@ -213,81 +212,6 @@ const VirtualizedSelectField = memo(function VirtualizedSelectField2({
213
212
  ] })
214
213
  ] });
215
214
  });
216
- const UrlField = memo(function UrlField2({
217
- label,
218
- value,
219
- onChange,
220
- sitePages
221
- }) {
222
- const currentValue = value ?? "";
223
- const selectedSlug = currentValue.startsWith("/") ? currentValue.slice(1) : null;
224
- const handlePaste = useCallback(async () => {
225
- try {
226
- const text = await navigator.clipboard.readText();
227
- if (text) onChange(text.trim());
228
- } catch {
229
- }
230
- }, [onChange]);
231
- return /* @__PURE__ */ jsxs("div", { className: "mb-4 space-y-3", children: [
232
- /* @__PURE__ */ jsx(Label, { children: label }),
233
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
234
- /* @__PURE__ */ jsxs("div", { className: "flex flex-1 items-center gap-2 rounded-lg border px-3 py-2", children: [
235
- /* @__PURE__ */ jsx(LinkIcon, { className: "text-muted-foreground size-4 shrink-0" }),
236
- /* @__PURE__ */ jsx(
237
- "input",
238
- {
239
- className: "w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground",
240
- placeholder: "https:// or /page-slug",
241
- value: currentValue,
242
- onChange: (e) => onChange(e.target.value)
243
- }
244
- ),
245
- currentValue && /* @__PURE__ */ jsx(
246
- "button",
247
- {
248
- type: "button",
249
- className: "text-muted-foreground hover:text-foreground shrink-0",
250
- onClick: () => onChange(""),
251
- children: /* @__PURE__ */ jsx(XIcon, { className: "size-3.5" })
252
- }
253
- )
254
- ] }),
255
- /* @__PURE__ */ jsxs(
256
- Button,
257
- {
258
- type: "button",
259
- variant: "outline",
260
- size: "sm",
261
- className: "shrink-0 gap-1.5",
262
- onClick: handlePaste,
263
- children: [
264
- /* @__PURE__ */ jsx(ClipboardIcon, { className: "size-3.5" }),
265
- "Paste"
266
- ]
267
- }
268
- )
269
- ] }),
270
- sitePages.length > 0 && /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
271
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Site pages" }),
272
- /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: sitePages.map((page) => {
273
- const isSelected = selectedSlug === page.slug;
274
- return /* @__PURE__ */ jsxs(
275
- "button",
276
- {
277
- type: "button",
278
- className: `inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium transition-colors ${isSelected ? "border-primary bg-primary text-primary-foreground" : "border-border bg-background text-foreground hover:bg-accent"}`,
279
- onClick: () => onChange(isSelected ? "" : `${page.slug}`),
280
- children: [
281
- /* @__PURE__ */ jsx(GlobeIcon, { className: "size-3" }),
282
- page.label
283
- ]
284
- },
285
- page.slug
286
- );
287
- }) })
288
- ] })
289
- ] });
290
- });
291
215
  const AutoField = memo(function AutoField2({
292
216
  field,
293
217
  name,
@@ -296,18 +220,6 @@ const AutoField = memo(function AutoField2({
296
220
  }) {
297
221
  var _a, _b;
298
222
  const label = field.label || name;
299
- const { sitePages } = useEditorContext();
300
- if (name === "url" && field.type === "text") {
301
- return /* @__PURE__ */ jsx(
302
- UrlField,
303
- {
304
- label,
305
- value,
306
- onChange,
307
- sitePages: sitePages ?? []
308
- }
309
- );
310
- }
311
223
  switch (field.type) {
312
224
  case "text":
313
225
  return /* @__PURE__ */ jsxs("div", { className: "mb-4 space-y-1.5", children: [
@@ -19,7 +19,6 @@ const CompoundForm = (props) => {
19
19
  CompoundButton,
20
20
  {
21
21
  label: props.button.label,
22
- url: props.button.url,
23
22
  variant: props.button.variant,
24
23
  size: props.button.size,
25
24
  icon: props.button.icon,
@@ -8,7 +8,7 @@ export { CompoundForm, type CompoundFormProps, formMethods, type FormMethods } f
8
8
  export { CompoundImage, type CompoundImageProps } from "./image";
9
9
  export { CompoundArticleCard, type CompoundArticleCardProps } from "./article-card";
10
10
  export { ImageUploadField } from "./image-upload-field";
11
- export { ActionField } from "./action-field";
11
+ export { ActionField } from "./fields/action-field";
12
12
  export { ErrorBoundary } from "./error-boundary";
13
13
  export { GradientText, type GradientTextProps } from "./gradient-text";
14
14
  export { InlineEditable } from "./inline-editable";
@@ -0,0 +1,18 @@
1
+ import { NavigationMenu as NavigationMenuPrimitive } from "@base-ui/react/navigation-menu";
2
+ declare function NavigationMenu({ align, portalContainer, className, children, onValueChange, ...props }: NavigationMenuPrimitive.Root.Props & Pick<NavigationMenuPrimitive.Positioner.Props, "align"> & {
3
+ portalContainer?: HTMLElement | null | React.RefObject<HTMLElement | null>;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ declare function NavigationMenuList({ className, ...props }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.List>): import("react/jsx-runtime").JSX.Element;
6
+ declare function NavigationMenuItem({ className, ...props }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.Item>): import("react/jsx-runtime").JSX.Element;
7
+ declare const navigationMenuTriggerStyle: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
8
+ declare function NavigationMenuTrigger({ className, children, ...props }: NavigationMenuPrimitive.Trigger.Props): import("react/jsx-runtime").JSX.Element;
9
+ declare function NavigationMenuContent({ className, ...props }: NavigationMenuPrimitive.Content.Props): import("react/jsx-runtime").JSX.Element;
10
+ declare function NavigationMenuPositioner({ className, side, sideOffset, align, alignOffset, portalContainer, ...props }: NavigationMenuPrimitive.Positioner.Props & {
11
+ portalContainer?: HTMLElement | null | React.RefObject<HTMLElement | null>;
12
+ }): import("react/jsx-runtime").JSX.Element;
13
+ declare function NavigationMenuLink({ className, asChild, children, active, ...props }: NavigationMenuPrimitive.Link.Props & {
14
+ asChild?: boolean;
15
+ active?: boolean;
16
+ }): import("react/jsx-runtime").JSX.Element;
17
+ declare function NavigationMenuIndicator({ className, ...props }: React.ComponentPropsWithRef<typeof NavigationMenuPrimitive.Icon>): import("react/jsx-runtime").JSX.Element;
18
+ export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, navigationMenuTriggerStyle, NavigationMenuPositioner, };
@@ -0,0 +1,202 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useRef, useState, useCallback } from "react";
3
+ import { NavigationMenu as NavigationMenu$1 } from "@base-ui/react/navigation-menu";
4
+ import { cva } from "class-variance-authority";
5
+ import { cn } from "../../utils/css-utils.js";
6
+ import { ChevronDownIcon } from "lucide-react";
7
+ import { useEditorContext } from "./editor-context.js";
8
+ function NavigationMenu({
9
+ align = "start",
10
+ portalContainer,
11
+ className,
12
+ children,
13
+ onValueChange,
14
+ ...props
15
+ }) {
16
+ const { isEditor } = useEditorContext();
17
+ const rootRef = useRef(null);
18
+ const [value, setValue] = useState(props.defaultValue ?? null);
19
+ const handleValueChange = useCallback(
20
+ (newValue, details) => {
21
+ if (newValue === null && details.reason === "focus-out") return;
22
+ setValue(newValue);
23
+ onValueChange == null ? void 0 : onValueChange(newValue, details);
24
+ },
25
+ [onValueChange]
26
+ );
27
+ if (!isEditor) {
28
+ return /* @__PURE__ */ jsxs(
29
+ NavigationMenu$1.Root,
30
+ {
31
+ ref: rootRef,
32
+ "data-slot": "navigation-menu",
33
+ className: cn(
34
+ "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",
35
+ className
36
+ ),
37
+ onValueChange,
38
+ ...props,
39
+ children: [
40
+ children,
41
+ /* @__PURE__ */ jsx(NavigationMenuPositioner, { align, portalContainer: portalContainer ?? rootRef })
42
+ ]
43
+ }
44
+ );
45
+ }
46
+ return /* @__PURE__ */ jsxs(
47
+ NavigationMenu$1.Root,
48
+ {
49
+ ref: rootRef,
50
+ "data-slot": "navigation-menu",
51
+ className: cn(
52
+ "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",
53
+ className
54
+ ),
55
+ value,
56
+ onValueChange: handleValueChange,
57
+ ...props,
58
+ children: [
59
+ children,
60
+ /* @__PURE__ */ jsx(NavigationMenuPositioner, { align, portalContainer: portalContainer ?? rootRef })
61
+ ]
62
+ }
63
+ );
64
+ }
65
+ function NavigationMenuList({
66
+ className,
67
+ ...props
68
+ }) {
69
+ return /* @__PURE__ */ jsx(
70
+ NavigationMenu$1.List,
71
+ {
72
+ "data-slot": "navigation-menu-list",
73
+ className: cn(
74
+ "group flex flex-1 list-none items-center justify-center gap-1",
75
+ className
76
+ ),
77
+ ...props
78
+ }
79
+ );
80
+ }
81
+ function NavigationMenuItem({
82
+ className,
83
+ ...props
84
+ }) {
85
+ return /* @__PURE__ */ jsx(
86
+ NavigationMenu$1.Item,
87
+ {
88
+ "data-slot": "navigation-menu-item",
89
+ className: cn("relative", className),
90
+ ...props
91
+ }
92
+ );
93
+ }
94
+ const navigationMenuTriggerStyle = cva(
95
+ "group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-1.5 text-sm font-medium transition-all outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-accent/50 data-popup-open:hover:bg-accent data-open:bg-accent/50 data-open:hover:bg-accent data-open:focus:bg-accent"
96
+ );
97
+ function NavigationMenuTrigger({
98
+ className,
99
+ children,
100
+ ...props
101
+ }) {
102
+ return /* @__PURE__ */ jsxs(
103
+ NavigationMenu$1.Trigger,
104
+ {
105
+ "data-slot": "navigation-menu-trigger",
106
+ className: cn(navigationMenuTriggerStyle(), "group", className),
107
+ ...props,
108
+ children: [
109
+ children,
110
+ " ",
111
+ /* @__PURE__ */ jsx(ChevronDownIcon, { className: "relative top-px ml-1 size-3 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180", "aria-hidden": "true" })
112
+ ]
113
+ }
114
+ );
115
+ }
116
+ function NavigationMenuContent({
117
+ className,
118
+ ...props
119
+ }) {
120
+ return /* @__PURE__ */ jsx(
121
+ NavigationMenu$1.Content,
122
+ {
123
+ "data-slot": "navigation-menu-content",
124
+ className: cn(
125
+ "data-ending-style:data-activation-direction=left:translate-x-[50%] data-ending-style:data-activation-direction=right:translate-x-[-50%] data-starting-style:data-activation-direction=left:translate-x-[-50%] data-starting-style:data-activation-direction=right:translate-x-[50%] h-full w-auto p-2 pr-2.5 transition-[opacity,transform,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:ring-foreground/10 group-data-[viewport=false]/navigation-menu:duration-300 data-ending-style:opacity-0 data-starting-style:opacity-0 data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95",
126
+ className
127
+ ),
128
+ ...props
129
+ }
130
+ );
131
+ }
132
+ function NavigationMenuPositioner({
133
+ className,
134
+ side = "bottom",
135
+ sideOffset = 8,
136
+ align = "start",
137
+ alignOffset = 0,
138
+ portalContainer,
139
+ ...props
140
+ }) {
141
+ return /* @__PURE__ */ jsx(NavigationMenu$1.Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
142
+ NavigationMenu$1.Positioner,
143
+ {
144
+ side,
145
+ sideOffset,
146
+ align,
147
+ alignOffset,
148
+ className: cn(
149
+ "isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] data-instant:transition-none data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0",
150
+ className
151
+ ),
152
+ ...props,
153
+ children: /* @__PURE__ */ jsx(NavigationMenu$1.Popup, { className: "data-[ending-style]:easing-[ease] xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) rounded-lg bg-popover text-popover-foreground shadow ring-1 ring-foreground/10 transition-[opacity,transform,width,height,scale,translate] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0", children: /* @__PURE__ */ jsx(NavigationMenu$1.Viewport, { className: "relative size-full overflow-hidden" }) })
154
+ }
155
+ ) });
156
+ }
157
+ function NavigationMenuLink({
158
+ className,
159
+ asChild,
160
+ children,
161
+ active,
162
+ ...props
163
+ }) {
164
+ if (asChild) {
165
+ return /* @__PURE__ */ jsx(
166
+ NavigationMenu$1.Link,
167
+ {
168
+ "data-slot": "navigation-menu-link",
169
+ "data-active": active || void 0,
170
+ className: cn(
171
+ "flex items-center gap-1 rounded-sm p-2 text-sm transition-all outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md data-active:bg-accent/50 data-active:hover:bg-accent data-active:focus:bg-accent [&_svg:not([class*='size-'])]:size-4",
172
+ className
173
+ ),
174
+ render: children,
175
+ ...props
176
+ }
177
+ );
178
+ }
179
+ return /* @__PURE__ */ jsx(
180
+ NavigationMenu$1.Link,
181
+ {
182
+ "data-slot": "navigation-menu-link",
183
+ "data-active": active || void 0,
184
+ className: cn(
185
+ "flex items-center gap-1 rounded-sm p-2 text-sm transition-all outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md data-active:bg-accent/50 data-active:hover:bg-accent data-active:focus:bg-accent [&_svg:not([class*='size-'])]:size-4",
186
+ className
187
+ ),
188
+ ...props,
189
+ children
190
+ }
191
+ );
192
+ }
193
+ export {
194
+ NavigationMenu,
195
+ NavigationMenuContent,
196
+ NavigationMenuItem,
197
+ NavigationMenuLink,
198
+ NavigationMenuList,
199
+ NavigationMenuPositioner,
200
+ NavigationMenuTrigger,
201
+ navigationMenuTriggerStyle
202
+ };
@@ -1,10 +1,11 @@
1
1
  import { CompoundContainerProps } from "@/components/puck-base/container";
2
+ import { type CompoundButtonProps } from "@/components/puck-base/button";
2
3
  export interface BannerCtaProps {
3
4
  heading?: string;
4
5
  description?: string;
5
6
  buttons?: Array<{
6
7
  label: string;
7
- url?: string;
8
+ action?: CompoundButtonProps["action"];
8
9
  variant?: string;
9
10
  }>;
10
11
  styles?: {
@@ -12,7 +12,7 @@ const BannerCta = ({
12
12
  buttons = [],
13
13
  styles
14
14
  }) => {
15
- var _a, _b, _c, _d, _e;
15
+ var _a, _b, _c, _d;
16
16
  return /* @__PURE__ */ jsx(CompoundContainer, { padding: styles == null ? void 0 : styles.padding, sectionStyle: styles == null ? void 0 : styles.sectionStyle, backgroundColor: styles == null ? void 0 : styles.backgroundColor, children: /* @__PURE__ */ jsxs("div", { className: `rounded-2xl px-8 py-14 text-center ${variantStyles[(styles == null ? void 0 : styles.visualVariant) ?? "primary"] ?? variantStyles.primary}`, children: [
17
17
  heading && /* @__PURE__ */ jsx("h2", { className: "text-3xl font-bold tracking-tight md:text-4xl lg:text-5xl", children: heading }),
18
18
  description && /* @__PURE__ */ jsx("p", { className: "mt-4 text-lg opacity-90 max-w-2xl mx-auto", children: description }),
@@ -21,16 +21,17 @@ const BannerCta = ({
21
21
  CompoundButton,
22
22
  {
23
23
  label: ((_a = buttons[0]) == null ? void 0 : _a.label) ?? "Get started",
24
- url: ((_b = buttons[0]) == null ? void 0 : _b.url) ?? "#",
24
+ action: (_b = buttons[0]) == null ? void 0 : _b.action,
25
25
  variant: ((_c = buttons[0]) == null ? void 0 : _c.variant) ?? "secondary"
26
26
  }
27
27
  ),
28
- ((_d = buttons[1]) == null ? void 0 : _d.label) && ((_e = buttons[1]) == null ? void 0 : _e.url) && /* @__PURE__ */ jsx(
28
+ ((_d = buttons[1]) == null ? void 0 : _d.label) && /* @__PURE__ */ jsx(
29
29
  CompoundButton,
30
30
  {
31
31
  label: buttons[1].label,
32
- url: buttons[1].url,
33
- variant: buttons[1].variant ?? "outline"
32
+ action: buttons[1].action,
33
+ variant: buttons[1].variant ?? "outline",
34
+ className: "border-current text-foreground"
34
35
  }
35
36
  )
36
37
  ] })
@@ -21,8 +21,8 @@ const conf = {
21
21
  heading: "Ready to transform your workflow?",
22
22
  description: "Join thousands of teams already using our platform to ship faster and smarter.",
23
23
  buttons: [
24
- { label: "Get started free", url: "#", variant: "secondary" },
25
- { label: "Talk to sales", url: "#", variant: "outline" }
24
+ { label: "Get started free", variant: "secondary" },
25
+ { label: "Talk to sales", variant: "outline" }
26
26
  ],
27
27
  styles: {
28
28
  ...createStylesDefaults(),
@@ -1,6 +1,7 @@
1
- import { jsx } from "react/jsx-runtime";
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { CompoundContainer } from "../../../puck-base/container.js";
3
- import { CompoundContent } from "../../../puck-base/content.js";
3
+ import { CompoundBadge } from "../../../puck-base/badge.js";
4
+ import { CompoundButton } from "../../../puck-base/button.js";
4
5
  const GradientCta = ({
5
6
  badge,
6
7
  heading,
@@ -23,16 +24,37 @@ const GradientCta = ({
23
24
  {
24
25
  className: "rounded-2xl p-8 text-center md:p-14",
25
26
  style: { background: bg, color },
26
- children: /* @__PURE__ */ jsx(
27
- CompoundContent,
28
- {
29
- badge,
30
- heading,
31
- description,
32
- buttons,
33
- alignContent: "center"
34
- }
35
- )
27
+ children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center text-center gap-8", children: [
28
+ (!!heading || !!description || !!badge) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center text-center gap-4", children: [
29
+ (badge == null ? void 0 : badge.label) && /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
30
+ CompoundBadge,
31
+ {
32
+ label: badge.label,
33
+ variant: badge.variant,
34
+ url: badge.url
35
+ }
36
+ ) }),
37
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center text-center gap-4", children: [
38
+ !!heading && /* @__PURE__ */ jsx("h2", { className: "font-serif font-regular text-3xl tracking-tighter text-center md:text-5xl lg:max-w-xl", children: heading }),
39
+ !!description && /* @__PURE__ */ jsx("p", { className: "text text-lg leading-relaxed tracking-tight text-center lg:max-w-xl", children: description })
40
+ ] })
41
+ ] }),
42
+ Array.isArray(buttons) && buttons.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-row justify-center flex-wrap gap-4", children: buttons.filter((button) => !!button.label).map((button, index) => {
43
+ const needsContrast = !button.variant || button.variant === "default";
44
+ return /* @__PURE__ */ jsx(
45
+ CompoundButton,
46
+ {
47
+ label: button.label,
48
+ action: button.action,
49
+ variant: button.variant,
50
+ size: button.size,
51
+ icon: button.icon,
52
+ className: needsContrast ? "bg-background text-foreground hover:bg-background/90" : void 0
53
+ },
54
+ index
55
+ );
56
+ }) })
57
+ ] })
36
58
  }
37
59
  )
38
60
  }
@@ -23,14 +23,13 @@ const conf = {
23
23
  heading: "Summer Sale — Up to 50% Off",
24
24
  description: "Don't miss our biggest sale of the year. Shop now and save on your favorite items.",
25
25
  image: {
26
- src: "https://dummyimage.com/800x600/f5f4f4/101010.png&text=Promo+Image",
26
+ src: "https://picsum.photos/seed/Promo%20Image/800/600",
27
27
  alt: "Promotional image"
28
28
  },
29
29
  imagePosition: "right",
30
30
  buttons: [
31
31
  {
32
32
  label: "Shop Now",
33
- url: "#",
34
33
  variant: "default",
35
34
  size: "lg",
36
35
  icon: "none"
@@ -46,7 +46,7 @@ const PromoSection = ({
46
46
  CompoundButton,
47
47
  {
48
48
  label: button.label,
49
- url: button.url,
49
+ action: button.action,
50
50
  variant: button.variant,
51
51
  size: button.size,
52
52
  icon: button.icon
@@ -89,7 +89,7 @@ const PromoSection = ({
89
89
  CompoundButton,
90
90
  {
91
91
  label: button.label,
92
- url: button.url,
92
+ action: button.action,
93
93
  variant: button.variant,
94
94
  size: button.size,
95
95
  icon: button.icon
@@ -25,10 +25,14 @@ const Accordion = ({
25
25
  /* @__PURE__ */ jsxs(
26
26
  "button",
27
27
  {
28
- onClick: () => setOpenIndex(openIndex === i ? null : i),
29
- className: "flex w-full items-center justify-between py-4 text-left",
28
+ onClick: (e) => {
29
+ e.stopPropagation();
30
+ setOpenIndex(openIndex === i ? null : i);
31
+ },
32
+ style: { pointerEvents: "auto" },
33
+ className: "flex w-full items-center justify-between py-4 text-left cursor-pointer",
30
34
  children: [
31
- /* @__PURE__ */ jsx("span", { className: "text-foreground font-medium", children: item.title }),
35
+ /* @__PURE__ */ jsx("span", { className: "text-foreground font-medium", style: { pointerEvents: "none" }, children: item.title }),
32
36
  /* @__PURE__ */ jsx(
33
37
  "span",
34
38
  {
@@ -36,6 +40,7 @@ const Accordion = ({
36
40
  "text-muted-foreground transition-transform",
37
41
  openIndex === i && "rotate-45"
38
42
  ),
43
+ style: { pointerEvents: "none" },
39
44
  children: "+"
40
45
  }
41
46
  )
@@ -36,7 +36,6 @@ const conf = {
36
36
  description: "Card description goes here.",
37
37
  button: {
38
38
  label: "",
39
- url: "",
40
39
  variant: "link",
41
40
  size: "default",
42
41
  icon: "move-right"
@@ -63,7 +62,6 @@ const conf = {
63
62
  description: "Card description goes here.",
64
63
  button: {
65
64
  label: "",
66
- url: "",
67
65
  variant: "link",
68
66
  size: "default",
69
67
  icon: "move-right"
@@ -36,7 +36,7 @@ const IconGrid = (allProps) => {
36
36
  CompoundButton,
37
37
  {
38
38
  label: button.label,
39
- url: button.url,
39
+ action: button.action,
40
40
  variant: button.variant,
41
41
  size: button.size,
42
42
  icon: button.icon
@@ -2,7 +2,7 @@ import { description, heading } from "../../../puck-base/core/fields.js";
2
2
  import { Gallery } from "./gallery.js";
3
3
  import { createStylesDefaults, createStylesField } from "../../../puck-base/core/styles.js";
4
4
  const defaultImage = {
5
- src: "https://dummyimage.com/800x600/f5f4f4/101010.png&text=Gallery+Image",
5
+ src: "https://picsum.photos/seed/Gallery%20Image/800/600",
6
6
  alt: "Gallery image",
7
7
  caption: ""
8
8
  };
@@ -59,21 +59,29 @@ const Gallery2 = ({
59
59
  /* @__PURE__ */ jsx(
60
60
  "button",
61
61
  {
62
- onClick: () => emblaApi == null ? void 0 : emblaApi.scrollPrev(),
62
+ onClick: (e) => {
63
+ e.stopPropagation();
64
+ emblaApi == null ? void 0 : emblaApi.scrollPrev();
65
+ },
66
+ style: { pointerEvents: "auto" },
63
67
  disabled: !canScrollPrev,
64
- className: "absolute left-4 top-1/2 -translate-y-1/2 z-10 flex h-10 w-10 items-center justify-center rounded-full bg-background/90 shadow-md transition hover:bg-background disabled:opacity-30",
68
+ className: "absolute left-4 top-1/2 -translate-y-1/2 z-10 flex h-10 w-10 items-center justify-center rounded-full bg-background/90 shadow-md transition hover:bg-background disabled:opacity-30 cursor-pointer",
65
69
  "aria-label": "Previous image",
66
- children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-5 w-5 text-foreground" })
70
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-5 w-5 text-foreground", style: { pointerEvents: "none" } })
67
71
  }
68
72
  ),
69
73
  /* @__PURE__ */ jsx(
70
74
  "button",
71
75
  {
72
- onClick: () => emblaApi == null ? void 0 : emblaApi.scrollNext(),
76
+ onClick: (e) => {
77
+ e.stopPropagation();
78
+ emblaApi == null ? void 0 : emblaApi.scrollNext();
79
+ },
80
+ style: { pointerEvents: "auto" },
73
81
  disabled: !canScrollNext,
74
- className: "absolute right-4 top-1/2 -translate-y-1/2 z-10 flex h-10 w-10 items-center justify-center rounded-full bg-background/90 shadow-md transition hover:bg-background disabled:opacity-30",
82
+ className: "absolute right-4 top-1/2 -translate-y-1/2 z-10 flex h-10 w-10 items-center justify-center rounded-full bg-background/90 shadow-md transition hover:bg-background disabled:opacity-30 cursor-pointer",
75
83
  "aria-label": "Next image",
76
- children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-5 w-5 text-foreground" })
84
+ children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-5 w-5 text-foreground", style: { pointerEvents: "none" } })
77
85
  }
78
86
  )
79
87
  ] })
@@ -1,7 +1,7 @@
1
1
  import { Gallery2 } from "./gallery-2.js";
2
2
  import { createStylesDefaults, createStylesField } from "../../../puck-base/core/styles.js";
3
3
  const defaultImage = {
4
- src: "https://dummyimage.com/1400x700/f5f4f4/101010.png&text=Gallery+Image",
4
+ src: "https://picsum.photos/seed/Gallery%20Image/1400/700",
5
5
  alt: "Gallery image"
6
6
  };
7
7
  const conf = {
@@ -18,8 +18,11 @@ type SecondaryNavigationItem = NavigationLink & {
18
18
  };
19
19
  type NavigationItem = NavigationLink & {
20
20
  url?: string;
21
+ action?: Action;
21
22
  description?: string;
22
- cta?: CompoundButtonProps;
23
+ cta?: CompoundButtonProps & {
24
+ url?: string;
25
+ };
23
26
  items?: SubmenuLink[];
24
27
  };
25
28
  export interface HeaderProps extends ILayoutProps {