dune-react 0.0.22 → 0.0.24
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/puck-base/image.js +1 -1
- package/dist/components/puck-block/banner-sections/css-marquee-banner/css-marquee-banner.js +13 -13
- package/dist/components/puck-block/banner-sections/dual-row-marquee/dual-row-marquee.js +77 -53
- package/dist/components/puck-block/banner-sections/scroll-driven-marquee/scroll-driven-marquee.js +8 -6
- package/dist/components/puck-block/banner-sections/scroll-parallax-text/scroll-parallax-text.js +3 -1
- package/dist/components/puck-block/contact-sections/contact-cards-grid/contact-cards-grid.js +1 -1
- package/dist/components/puck-block/contact-sections/form-with-media/form-with-media.js +1 -1
- package/dist/components/puck-block/contact-sections/header-form-cards/header-form-cards.js +1 -1
- package/dist/components/puck-block/contact-sections/header-info-fullwidth/header-info-fullwidth.js +2 -2
- package/dist/components/puck-block/contact-sections/info-cards-media/info-cards-media.js +2 -2
- package/dist/components/puck-block/contact-sections/split-info-form/split-info-form.js +1 -1
- package/dist/components/puck-block/contact-sections/tab-locations/tab-locations.js +71 -55
- package/dist/components/puck-block/cta-sections/mouse-track-cta/mouse-track-cta.js +4 -4
- package/dist/components/puck-block/cta-sections/side-media-cta/side-media-cta.js +1 -1
- package/dist/components/puck-block/cta-sections/text-block-cta/text-block-cta.js +2 -2
- package/dist/components/puck-block/feature-sections/feature-cards-grid/component.js +1 -1
- package/dist/components/puck-block/feature-sections/feature-list-split/component.js +1 -1
- package/dist/components/puck-block/feature-sections/tab-feature/component.js +4 -4
- package/dist/components/puck-block/feature-sections/text-media-split/component.js +1 -1
- package/dist/components/puck-block/footer-sections/centered-minimal-footer/centered-minimal-footer.js +72 -18
- package/dist/components/puck-block/footer-sections/centered-minimal-footer/index.d.ts +79 -0
- package/dist/components/puck-block/footer-sections/centered-minimal-footer/index.js +43 -1
- package/dist/components/puck-block/footer-sections/compact-newsletter-footer/index.d.ts +41 -0
- package/dist/components/puck-block/footer-sections/contact-links-footer/contact-links-footer.js +4 -3
- package/dist/components/puck-block/footer-sections/contact-links-footer/index.d.ts +86 -0
- package/dist/components/puck-block/footer-sections/contact-links-footer/index.js +1 -1
- package/dist/components/puck-block/footer-sections/cta-links-footer/cta-links-footer.js +3 -2
- package/dist/components/puck-block/footer-sections/cta-links-footer/index.d.ts +37 -0
- package/dist/components/puck-block/footer-sections/cta-links-footer/index.js +1 -1
- package/dist/components/puck-block/footer-sections/links-newsletter-footer/index.d.ts +54 -0
- package/dist/components/puck-block/footer-sections/newsletter-links-footer/index.d.ts +41 -0
- package/dist/components/puck-block/footer-sections/newsletter-top-links-footer/index.d.ts +54 -0
- package/dist/components/puck-block/footer-sections/props.d.ts +3 -0
- package/dist/components/puck-block/gallery-sections/fullscreen-portfolio/fullscreen-portfolio.js +1 -1
- package/dist/components/puck-block/gallery-sections/image-carousel/index.d.ts +14 -1
- package/dist/components/puck-block/gallery-sections/interactive-portfolio/interactive-portfolio.js +166 -105
- package/dist/components/puck-block/gallery-sections/masonry-grid/index.d.ts +17 -1
- package/dist/components/puck-block/gallery-sections/masonry-grid/masonry-grid.js +56 -31
- package/dist/components/puck-block/gallery-sections/portfolio-cards/index.d.ts +17 -1
- package/dist/components/puck-block/gallery-sections/portfolio-cards/portfolio-cards.js +41 -13
- package/dist/components/puck-block/gallery-sections/portfolio-divider/portfolio-divider.js +1 -1
- package/dist/components/puck-block/gallery-sections/props.d.ts +42 -3
- package/dist/components/puck-block/gallery-sections/props.js +24 -6
- package/dist/components/puck-block/gallery-sections/scroll-parallax/scroll-parallax.js +71 -22
- package/dist/components/puck-block/gallery-sections/scroll-parallax-portfolio/scroll-parallax-portfolio.js +284 -159
- package/dist/components/puck-block/gallery-sections/split-carousel/index.d.ts +11 -1
- package/dist/components/puck-block/gallery-sections/static-grid/index.d.ts +17 -1
- package/dist/components/puck-block/header-sections/centered-navbar/centered-navbar.js +95 -14
- package/dist/components/puck-block/header-sections/drawer-navbar/drawer-navbar.js +4 -3
- package/dist/components/puck-block/header-sections/floating-bordered-navbar/floating-bordered-navbar.js +5 -4
- package/dist/components/puck-block/header-sections/fullscreen-overlay-navbar/fullscreen-overlay-navbar.js +4 -3
- package/dist/components/puck-block/header-sections/mega-menu-navbar/mega-menu-navbar.js +3 -2
- package/dist/components/puck-block/header-sections/props.d.ts +3 -0
- package/dist/components/puck-block/header-sections/standard-navbar/standard-navbar.js +3 -2
- package/dist/components/puck-block/hero-sections/carousel-hero/component.js +3 -3
- package/dist/components/puck-block/hero-sections/column-scroll-hero/component.js +8 -8
- package/dist/components/puck-block/hero-sections/dual-marquee-hero/component.js +6 -6
- package/dist/components/puck-block/hero-sections/fullscreen-video-hero/component.js +1 -1
- package/dist/components/puck-block/hero-sections/grid-expand-hero/component.js +26 -17
- package/dist/components/puck-block/hero-sections/grid-expand-hero/index.d.ts +17 -1
- package/dist/components/puck-block/hero-sections/horizontal-marquee-hero/component.js +3 -3
- package/dist/components/puck-block/hero-sections/inline-image-hero/inline-image-hero.js +59 -28
- package/dist/components/puck-block/hero-sections/mouse-track-hero/component.js +60 -19
- package/dist/components/puck-block/hero-sections/multi-image-grid-hero/index.d.ts +17 -1
- package/dist/components/puck-block/hero-sections/multi-image-grid-hero/multi-image-grid-hero.js +2 -2
- package/dist/components/puck-block/hero-sections/overlapping-image-hero/overlapping-image-hero.js +3 -3
- package/dist/components/puck-block/hero-sections/parallax-images-hero/component.js +18 -6
- package/dist/components/puck-block/hero-sections/props.d.ts +34 -2
- package/dist/components/puck-block/hero-sections/props.js +18 -4
- package/dist/components/puck-block/hero-sections/scatter-parallax-hero/component.js +9 -7
- package/dist/components/puck-block/hero-sections/scroll-expand-video-hero/component.js +7 -5
- package/dist/components/puck-block/hero-sections/scroll-zoom-hero/component.js +5 -3
- package/dist/components/puck-block/hero-sections/sticky-expand-hero/component.js +1 -1
- package/dist/components/puck-block/hero-sections/sticky-expand-hero/index.d.ts +13 -5
- package/dist/components/puck-block/hero-sections/sticky-expand-hero/index.js +2 -2
- package/dist/components/puck-block/hero-sections/sticky-video-hero/component.js +2 -2
- package/dist/components/puck-block/hero-sections/tab-hero/component.js +5 -5
- package/dist/components/puck-block/hero-sections/three-image-parallax-hero/component.js +3 -3
- package/dist/components/puck-block/hero-sections/vertical-gallery-hero/component.js +6 -6
- package/dist/components/puck-block/hero-sections/zoom-grid-hero/component.js +14 -12
- package/dist/components/puck-block/index.d.ts +1 -0
- package/dist/components/puck-block/location-sections/index.d.ts +3 -0
- package/dist/components/puck-block/location-sections/location-1/index.js +102 -0
- package/dist/components/puck-block/location-sections/location-1/location.d.ts +0 -3
- package/dist/components/puck-block/location-sections/location-1/location.js +139 -0
- package/dist/components/puck-block/location-sections/location-2/index.js +126 -0
- package/dist/components/puck-block/location-sections/location-2/location.d.ts +0 -3
- package/dist/components/puck-block/location-sections/location-2/location.js +133 -0
- package/dist/components/puck-block/location-sections/location-3/index.js +109 -0
- package/dist/components/puck-block/location-sections/location-3/location.d.ts +0 -3
- package/dist/components/puck-block/location-sections/location-3/location.js +140 -0
- package/dist/components/puck-block/location-sections/props.d.ts +0 -3
- package/dist/components/puck-block/metrics-sections/center-media-stats/center-media-stats.js +1 -1
- package/dist/components/puck-block/metrics-sections/header-stats-row/header-stats-row.js +1 -1
- package/dist/components/puck-block/metrics-sections/mixed-grid-stats/mixed-grid-stats.js +2 -2
- package/dist/components/puck-block/metrics-sections/split-stats/split-stats.js +1 -1
- package/dist/components/puck-block/metrics-sections/tab-stats/tab-stats.js +4 -4
- package/dist/components/puck-block/pricing-sections/pricing-comparison-table/component.js +134 -33
- package/dist/components/puck-block/pricing-sections/pricing-comparison-table/index.d.ts +47 -0
- package/dist/components/puck-block/pricing-sections/pricing-comparison-table/index.js +34 -0
- package/dist/components/puck-block/pricing-sections/split-pricing/component.js +3 -3
- package/dist/components/puck-block/pricing-sections/tab-pricing-grid/component.js +86 -40
- package/dist/components/puck-block/pricing-sections/tab-single-pricing/component.js +1 -1
- package/dist/components/puck-block/registry.generated.d.ts +501 -12
- package/dist/components/puck-block/registry.generated.js +157 -138
- package/dist/components/puck-block/showcase-sections/tab-timeline/component.js +2 -2
- package/dist/components/puck-block/testimonial-sections/bento-testimonial/component.js +157 -83
- package/dist/components/puck-block/testimonial-sections/centered-testimonial/component.js +71 -28
- package/dist/components/puck-block/testimonial-sections/image-testimonial/component.js +66 -29
- package/dist/components/puck-block/testimonial-sections/image-testimonial-carousel/component.js +1 -1
- package/dist/components/puck-block/testimonial-sections/tab-testimonial/component.js +6 -6
- package/dist/components/puck-block/testimonial-sections/testimonial-card-grid/component.js +2 -2
- package/dist/components/puck-block/testimonial-sections/testimonial-carousel/component.js +1 -1
- package/dist/components/puck-block/text-sections/prose-content/component.js +1 -1
- package/dist/components/puck-block/text-sections/side-media-content/component.js +1 -1
- package/dist/components/puck-block/text-sections/sticky-text-multi-image/component.js +3 -3
- package/dist/components/puck-core/core/props/form.js +25 -1
- package/dist/components/puck-core/core/props/media.js +6 -1
- package/dist/components/puck-core/fields/array-field.d.ts +7 -0
- package/dist/components/puck-core/fields/array-field.js +229 -0
- package/dist/components/puck-core/fields/auto-field.js +11 -0
- package/dist/components/puck-core/fields/image-upload-field.js +1 -1
- package/dist/components/puck-core/fields/index.d.ts +1 -0
- package/dist/components/puck-core/fields/location-field.js +4 -1
- package/dist/components/puck-core/fields/object-field.js +1 -1
- package/dist/index.js +6 -0
- package/dist/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.2.4/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +59 -0
- package/dist/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@dnd-kit/core/dist/core.esm.js +3093 -0
- package/dist/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.2.4_react@19.2.4__react@19.2.4__react@19.2.4/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +592 -0
- package/dist/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.2.4/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +301 -0
- package/package.json +7 -1
|
@@ -71,7 +71,7 @@ const SideMediaContentDefaults = {
|
|
|
71
71
|
prose: `<p>Morbi sed imperdiet in ipsum, adipiscing elit dui lectus. Tellus id scelerisque est ultricies ultricies. Duis est sit sed leo nisl, blandit elit sagittis. Quisque tristique consequat quam sed. Nisl at scelerisque amet nulla purus habitasse.</p><p>Nunc sed faucibus bibendum feugiat sed interdum. Ipsum egestas condimentum mi massa. In tincidunt pharetra consectetur sed duis facilisis metus. Etiam egestas in nec sed et. Quis lobortis at sit dictum eget nibh tortor commodo cursus.</p>`,
|
|
72
72
|
image: {
|
|
73
73
|
src: "https://picsum.photos/seed/side-media/800/600",
|
|
74
|
-
alt: "
|
|
74
|
+
alt: "Placeholder image"
|
|
75
75
|
},
|
|
76
76
|
video: "https://www.youtube.com/embed/8DKLYsikxTs?si=Ch9W0KrDWWUiCMMW",
|
|
77
77
|
styles: {
|
|
@@ -35,9 +35,9 @@ const StickyTextMultiImageDefaults = {
|
|
|
35
35
|
heading: "Short heading goes here",
|
|
36
36
|
prose: `<p>Morbi sed imperdiet in ipsum, adipiscing elit dui lectus. Tellus id scelerisque est ultricies ultricies. Duis est sit sed leo nisl, blandit elit sagittis. Quisque tristique consequat quam sed. Nisl at scelerisque amet nulla purus habitasse.</p><p>Nunc sed faucibus bibendum feugiat sed interdum. Ipsum egestas condimentum mi massa. In tincidunt pharetra consectetur sed duis facilisis metus.</p>`,
|
|
37
37
|
images: [
|
|
38
|
-
{ src: "https://picsum.photos/seed/sticky-img1/800/600", alt: "
|
|
39
|
-
{ src: "https://picsum.photos/seed/sticky-img2/800/600", alt: "
|
|
40
|
-
{ src: "https://picsum.photos/seed/sticky-img3/800/600", alt: "
|
|
38
|
+
{ src: "https://picsum.photos/seed/sticky-img1/800/600", alt: "Placeholder image 1" },
|
|
39
|
+
{ src: "https://picsum.photos/seed/sticky-img2/800/600", alt: "Placeholder image 2" },
|
|
40
|
+
{ src: "https://picsum.photos/seed/sticky-img3/800/600", alt: "Placeholder image 3" }
|
|
41
41
|
],
|
|
42
42
|
styles: {
|
|
43
43
|
contentPosition: "left"
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { LocationField } from "../../fields/location-field.js";
|
|
1
2
|
import { buttonField } from "./interactive.js";
|
|
2
3
|
const fieldTypes = [
|
|
3
4
|
"text",
|
|
@@ -66,11 +67,34 @@ const formDefaults = {
|
|
|
66
67
|
icon: "move-right"
|
|
67
68
|
}
|
|
68
69
|
};
|
|
70
|
+
function getMapEmbedUrl(loc) {
|
|
71
|
+
const { lat, lng, zoom = 14 } = loc;
|
|
72
|
+
return `https://maps.google.com/maps?q=${lat},${lng}&z=${zoom}&output=embed`;
|
|
73
|
+
}
|
|
74
|
+
function getDirectionsUrl(loc) {
|
|
75
|
+
return `https://www.google.com/maps/dir/?api=1&destination=${loc.lat},${loc.lng}`;
|
|
76
|
+
}
|
|
77
|
+
const locationDefaults = {
|
|
78
|
+
address: "San Francisco, CA, USA",
|
|
79
|
+
lat: 37.7749,
|
|
80
|
+
lng: -122.4194,
|
|
81
|
+
zoom: 13
|
|
82
|
+
};
|
|
83
|
+
const locationField = {
|
|
84
|
+
type: "custom",
|
|
85
|
+
label: "Location",
|
|
86
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
87
|
+
render: LocationField
|
|
88
|
+
};
|
|
69
89
|
export {
|
|
70
90
|
fieldTypes,
|
|
71
91
|
formDefaults,
|
|
72
92
|
formField,
|
|
73
93
|
formFieldDefaults,
|
|
74
94
|
formFieldField,
|
|
75
|
-
formMethods
|
|
95
|
+
formMethods,
|
|
96
|
+
getDirectionsUrl,
|
|
97
|
+
getMapEmbedUrl,
|
|
98
|
+
locationDefaults,
|
|
99
|
+
locationField
|
|
76
100
|
};
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import { ImageUploadField } from "../../fields/image-upload-field.js";
|
|
1
2
|
const imageField = {
|
|
2
3
|
type: "object",
|
|
3
4
|
objectFields: {
|
|
4
|
-
src: {
|
|
5
|
+
src: {
|
|
6
|
+
type: "custom",
|
|
7
|
+
label: "Image",
|
|
8
|
+
render: ImageUploadField
|
|
9
|
+
},
|
|
5
10
|
alt: { type: "text" }
|
|
6
11
|
}
|
|
7
12
|
};
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useState, useRef, useMemo, useCallback } from "react";
|
|
3
|
+
import { ChevronLeft, Plus, GripVertical, Pencil, Trash2 } from "lucide-react";
|
|
4
|
+
import { useSensors, useSensor, DndContext, closestCenter, KeyboardSensor, PointerSensor } from "../../../node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@dnd-kit/core/dist/core.esm.js";
|
|
5
|
+
import { arrayMove, SortableContext, verticalListSortingStrategy, sortableKeyboardCoordinates, useSortable } from "../../../node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.2.4_react@19.2.4__react@19.2.4__react@19.2.4/node_modules/@dnd-kit/sortable/dist/sortable.esm.js";
|
|
6
|
+
import { CSS } from "../../../node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.2.4/node_modules/@dnd-kit/utilities/dist/utilities.esm.js";
|
|
7
|
+
import { Label } from "../../shadcn/label.js";
|
|
8
|
+
import { Button } from "../../shadcn/button.js";
|
|
9
|
+
import { AutoField } from "./auto-field.js";
|
|
10
|
+
const POINTER_SENSOR_OPTIONS = { activationConstraint: { distance: 5 } };
|
|
11
|
+
const KEYBOARD_SENSOR_OPTIONS = {
|
|
12
|
+
coordinateGetter: sortableKeyboardCoordinates
|
|
13
|
+
};
|
|
14
|
+
const SortableItem = memo(function SortableItem2({
|
|
15
|
+
id,
|
|
16
|
+
summary,
|
|
17
|
+
canDelete,
|
|
18
|
+
onEdit,
|
|
19
|
+
onDelete
|
|
20
|
+
}) {
|
|
21
|
+
const {
|
|
22
|
+
attributes,
|
|
23
|
+
listeners,
|
|
24
|
+
setNodeRef,
|
|
25
|
+
transform,
|
|
26
|
+
transition,
|
|
27
|
+
isDragging
|
|
28
|
+
} = useSortable({ id });
|
|
29
|
+
const style = {
|
|
30
|
+
transform: CSS.Transform.toString(transform),
|
|
31
|
+
transition,
|
|
32
|
+
opacity: isDragging ? 0.5 : 1
|
|
33
|
+
};
|
|
34
|
+
return /* @__PURE__ */ jsxs(
|
|
35
|
+
"div",
|
|
36
|
+
{
|
|
37
|
+
ref: setNodeRef,
|
|
38
|
+
style,
|
|
39
|
+
className: "bg-muted/50 group flex items-center gap-2 rounded-xl p-3",
|
|
40
|
+
children: [
|
|
41
|
+
/* @__PURE__ */ jsx(
|
|
42
|
+
"div",
|
|
43
|
+
{
|
|
44
|
+
className: "text-muted-foreground/40 hover:text-muted-foreground cursor-grab active:cursor-grabbing",
|
|
45
|
+
...attributes,
|
|
46
|
+
...listeners,
|
|
47
|
+
children: /* @__PURE__ */ jsx(GripVertical, { className: "h-4 w-4" })
|
|
48
|
+
}
|
|
49
|
+
),
|
|
50
|
+
/* @__PURE__ */ jsx("span", { className: "text-foreground flex-1 truncate text-sm", children: summary }),
|
|
51
|
+
/* @__PURE__ */ jsxs(
|
|
52
|
+
Button,
|
|
53
|
+
{
|
|
54
|
+
type: "button",
|
|
55
|
+
variant: "ghost",
|
|
56
|
+
size: "sm",
|
|
57
|
+
className: "h-7 gap-1 px-2",
|
|
58
|
+
onClick: onEdit,
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ jsx(Pencil, { className: "h-3.5 w-3.5" }),
|
|
61
|
+
"Edit"
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
),
|
|
65
|
+
canDelete && /* @__PURE__ */ jsx(
|
|
66
|
+
Button,
|
|
67
|
+
{
|
|
68
|
+
type: "button",
|
|
69
|
+
variant: "ghost",
|
|
70
|
+
size: "icon",
|
|
71
|
+
className: "text-muted-foreground hover:text-destructive h-7 w-7",
|
|
72
|
+
onClick: onDelete,
|
|
73
|
+
children: /* @__PURE__ */ jsx(Trash2, { className: "h-4 w-4" })
|
|
74
|
+
}
|
|
75
|
+
)
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
const ArrayField = memo(function ArrayField2({
|
|
81
|
+
field,
|
|
82
|
+
name,
|
|
83
|
+
value,
|
|
84
|
+
onChange
|
|
85
|
+
}) {
|
|
86
|
+
const arrayFields = field.arrayFields || {};
|
|
87
|
+
const label = field.label || name;
|
|
88
|
+
const items = Array.isArray(value) ? value : [];
|
|
89
|
+
const [editingIndex, setEditingIndex] = useState(null);
|
|
90
|
+
const idCounterRef = useRef(0);
|
|
91
|
+
const itemIdMapRef = useRef(/* @__PURE__ */ new WeakMap());
|
|
92
|
+
const itemIds = useMemo(() => {
|
|
93
|
+
return items.map((item) => {
|
|
94
|
+
if (item && typeof item === "object") {
|
|
95
|
+
let id = itemIdMapRef.current.get(item);
|
|
96
|
+
if (!id) {
|
|
97
|
+
id = `${name}-${idCounterRef.current++}`;
|
|
98
|
+
itemIdMapRef.current.set(item, id);
|
|
99
|
+
}
|
|
100
|
+
return id;
|
|
101
|
+
}
|
|
102
|
+
return `${name}-${idCounterRef.current++}`;
|
|
103
|
+
});
|
|
104
|
+
}, [items, name]);
|
|
105
|
+
const sensors = useSensors(
|
|
106
|
+
useSensor(PointerSensor, POINTER_SENSOR_OPTIONS),
|
|
107
|
+
useSensor(KeyboardSensor, KEYBOARD_SENSOR_OPTIONS)
|
|
108
|
+
);
|
|
109
|
+
const handleDragEnd = useCallback(
|
|
110
|
+
(event) => {
|
|
111
|
+
const { active, over } = event;
|
|
112
|
+
if (!over || active.id === over.id) return;
|
|
113
|
+
const oldIndex = itemIds.indexOf(String(active.id));
|
|
114
|
+
const newIndex = itemIds.indexOf(String(over.id));
|
|
115
|
+
if (oldIndex !== -1 && newIndex !== -1) {
|
|
116
|
+
onChange(arrayMove(items, oldIndex, newIndex));
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
[itemIds, items, onChange]
|
|
120
|
+
);
|
|
121
|
+
const handleAdd = useCallback(() => {
|
|
122
|
+
if (field.defaultItemProps) {
|
|
123
|
+
onChange([...items, { ...field.defaultItemProps }]);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const newItem = {};
|
|
127
|
+
for (const key of Object.keys(arrayFields)) {
|
|
128
|
+
newItem[key] = "";
|
|
129
|
+
}
|
|
130
|
+
onChange([...items, newItem]);
|
|
131
|
+
}, [items, onChange, field.defaultItemProps, arrayFields]);
|
|
132
|
+
const handleDelete = useCallback(
|
|
133
|
+
(index) => {
|
|
134
|
+
onChange(items.filter((_, i) => i !== index));
|
|
135
|
+
if (editingIndex === index) setEditingIndex(null);
|
|
136
|
+
},
|
|
137
|
+
[items, onChange, editingIndex]
|
|
138
|
+
);
|
|
139
|
+
const handleItemFieldChange = useCallback(
|
|
140
|
+
(index, key, val) => {
|
|
141
|
+
const newItems = items.map(
|
|
142
|
+
(item, i) => i === index ? { ...item, [key]: val } : item
|
|
143
|
+
);
|
|
144
|
+
onChange(newItems);
|
|
145
|
+
},
|
|
146
|
+
[items, onChange]
|
|
147
|
+
);
|
|
148
|
+
const canAdd = field.max == null || items.length < field.max;
|
|
149
|
+
const canDelete = field.min == null || items.length > field.min;
|
|
150
|
+
const getSummary = useCallback(
|
|
151
|
+
(item, index) => {
|
|
152
|
+
if (field.getItemSummary) return field.getItemSummary(item, index);
|
|
153
|
+
return item.label || item.heading || item.name || item.title || `Item ${index + 1}`;
|
|
154
|
+
},
|
|
155
|
+
[field]
|
|
156
|
+
);
|
|
157
|
+
if (editingIndex !== null && items[editingIndex]) {
|
|
158
|
+
const item = items[editingIndex];
|
|
159
|
+
return /* @__PURE__ */ jsxs("div", { className: "mb-4 space-y-1.5", children: [
|
|
160
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
161
|
+
/* @__PURE__ */ jsx(
|
|
162
|
+
Button,
|
|
163
|
+
{
|
|
164
|
+
type: "button",
|
|
165
|
+
variant: "ghost",
|
|
166
|
+
size: "icon-sm",
|
|
167
|
+
onClick: () => setEditingIndex(null),
|
|
168
|
+
children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })
|
|
169
|
+
}
|
|
170
|
+
),
|
|
171
|
+
/* @__PURE__ */ jsxs(Label, { children: [
|
|
172
|
+
label,
|
|
173
|
+
" / ",
|
|
174
|
+
getSummary(item, editingIndex)
|
|
175
|
+
] })
|
|
176
|
+
] }),
|
|
177
|
+
/* @__PURE__ */ jsx("div", { className: "rounded-lg bg-muted/30 p-3", children: Object.entries(arrayFields).map(([key, subField]) => /* @__PURE__ */ jsx(
|
|
178
|
+
AutoField,
|
|
179
|
+
{
|
|
180
|
+
field: subField,
|
|
181
|
+
name: key,
|
|
182
|
+
value: item[key],
|
|
183
|
+
onChange: (val) => handleItemFieldChange(editingIndex, key, val)
|
|
184
|
+
},
|
|
185
|
+
key
|
|
186
|
+
)) })
|
|
187
|
+
] });
|
|
188
|
+
}
|
|
189
|
+
return /* @__PURE__ */ jsxs("div", { className: "mb-4 space-y-1.5", children: [
|
|
190
|
+
/* @__PURE__ */ jsx(Label, { children: label }),
|
|
191
|
+
/* @__PURE__ */ jsx(
|
|
192
|
+
DndContext,
|
|
193
|
+
{
|
|
194
|
+
sensors,
|
|
195
|
+
collisionDetection: closestCenter,
|
|
196
|
+
onDragEnd: handleDragEnd,
|
|
197
|
+
children: /* @__PURE__ */ jsx(SortableContext, { items: itemIds, strategy: verticalListSortingStrategy, children: /* @__PURE__ */ jsx("div", { className: "space-y-2", children: items.map((item, i) => /* @__PURE__ */ jsx(
|
|
198
|
+
SortableItem,
|
|
199
|
+
{
|
|
200
|
+
id: itemIds[i],
|
|
201
|
+
summary: getSummary(item, i),
|
|
202
|
+
canDelete,
|
|
203
|
+
onEdit: () => setEditingIndex(i),
|
|
204
|
+
onDelete: () => handleDelete(i)
|
|
205
|
+
},
|
|
206
|
+
itemIds[i]
|
|
207
|
+
)) }) })
|
|
208
|
+
}
|
|
209
|
+
),
|
|
210
|
+
canAdd && /* @__PURE__ */ jsxs(
|
|
211
|
+
Button,
|
|
212
|
+
{
|
|
213
|
+
type: "button",
|
|
214
|
+
variant: "ghost",
|
|
215
|
+
size: "sm",
|
|
216
|
+
className: "mt-2 gap-1.5 text-primary",
|
|
217
|
+
onClick: handleAdd,
|
|
218
|
+
children: [
|
|
219
|
+
/* @__PURE__ */ jsx(Plus, { className: "h-4 w-4" }),
|
|
220
|
+
"Add ",
|
|
221
|
+
label.replace(/s$/, "").toLowerCase()
|
|
222
|
+
]
|
|
223
|
+
}
|
|
224
|
+
)
|
|
225
|
+
] });
|
|
226
|
+
});
|
|
227
|
+
export {
|
|
228
|
+
ArrayField
|
|
229
|
+
};
|
|
@@ -7,6 +7,7 @@ import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from ".
|
|
|
7
7
|
import { ColorField } from "./color-field.js";
|
|
8
8
|
import { RadioToggleField } from "./radio-toggle-field.js";
|
|
9
9
|
import { ObjectField } from "./object-field.js";
|
|
10
|
+
import { ArrayField } from "./array-field.js";
|
|
10
11
|
import { LARGE_SELECT_THRESHOLD, VirtualizedSelectField } from "./virtualized-select-field.js";
|
|
11
12
|
const KEY_FIELD_MAP = {
|
|
12
13
|
color: ColorField,
|
|
@@ -119,6 +120,16 @@ const AutoField = memo(function AutoField2({
|
|
|
119
120
|
onChange
|
|
120
121
|
}
|
|
121
122
|
);
|
|
123
|
+
case "array":
|
|
124
|
+
return /* @__PURE__ */ jsx(
|
|
125
|
+
ArrayField,
|
|
126
|
+
{
|
|
127
|
+
field,
|
|
128
|
+
name,
|
|
129
|
+
value,
|
|
130
|
+
onChange
|
|
131
|
+
}
|
|
132
|
+
);
|
|
122
133
|
case "custom":
|
|
123
134
|
if (field.render) {
|
|
124
135
|
const CustomRender = field.render;
|
|
@@ -3,6 +3,7 @@ export { AutoField } from "./auto-field";
|
|
|
3
3
|
export { ColorField } from "./color-field";
|
|
4
4
|
export { RadioToggleField } from "./radio-toggle-field";
|
|
5
5
|
export { ObjectField } from "./object-field";
|
|
6
|
+
export { ArrayField } from "./array-field";
|
|
6
7
|
export { VirtualizedSelectField, LARGE_SELECT_THRESHOLD, } from "./virtualized-select-field";
|
|
7
8
|
export { LocationField } from "./location-field";
|
|
8
9
|
export { ActionField, ACTION_TYPE_FIELD_MAP, ACTION_TYPE_OPTIONS, PageActionFields, ExternalActionFields, EmailActionFields, PhoneActionFields, SectionActionFields, DownloadActionFields, type ActionTypeFieldProps, } from "./action-field";
|
|
@@ -25,7 +25,7 @@ function loadGooglePlaces(apiKey) {
|
|
|
25
25
|
});
|
|
26
26
|
return googleLoadPromise;
|
|
27
27
|
}
|
|
28
|
-
memo(function LocationField2({
|
|
28
|
+
const LocationField = memo(function LocationField2({
|
|
29
29
|
value,
|
|
30
30
|
onChange
|
|
31
31
|
}) {
|
|
@@ -202,3 +202,6 @@ memo(function LocationField2({
|
|
|
202
202
|
] })
|
|
203
203
|
] });
|
|
204
204
|
});
|
|
205
|
+
export {
|
|
206
|
+
LocationField
|
|
207
|
+
};
|
|
@@ -13,7 +13,7 @@ const ObjectField = memo(function ObjectField2({
|
|
|
13
13
|
const objValue = value && typeof value === "object" ? value : {};
|
|
14
14
|
return /* @__PURE__ */ jsxs("div", { className: "mb-4 space-y-1.5", children: [
|
|
15
15
|
/* @__PURE__ */ jsx(Label, { children: label }),
|
|
16
|
-
/* @__PURE__ */ jsx("div", { className: "rounded-lg
|
|
16
|
+
/* @__PURE__ */ jsx("div", { className: "rounded-lg p-3 bg-muted/50", children: Object.entries(objectFields).map(([key, subField]) => /* @__PURE__ */ jsx(
|
|
17
17
|
AutoField,
|
|
18
18
|
{
|
|
19
19
|
field: subField,
|
package/dist/index.js
CHANGED
|
@@ -42,7 +42,10 @@ import { default as default42 } from "./components/puck-block/testimonial-sectio
|
|
|
42
42
|
import { default as default43 } from "./components/puck-block/contact-sections/info-cards-media/index.js";
|
|
43
43
|
import { default as default44 } from "./components/puck-block/hero-sections/inline-image-hero/index.js";
|
|
44
44
|
import { default as default45 } from "./components/puck-block/gallery-sections/interactive-portfolio/index.js";
|
|
45
|
+
import { conf } from "./components/puck-block/location-sections/location-2/index.js";
|
|
46
|
+
import { conf as conf2 } from "./components/puck-block/location-sections/location-3/index.js";
|
|
45
47
|
import { default as default46 } from "./components/puck-block/contact-sections/location-cards-grid/index.js";
|
|
48
|
+
import { conf as conf3 } from "./components/puck-block/location-sections/location-1/index.js";
|
|
46
49
|
import { default as default47 } from "./components/puck-block/testimonial-sections/marquee-testimonial/index.js";
|
|
47
50
|
import { default as default48 } from "./components/puck-block/gallery-sections/masonry-grid/index.js";
|
|
48
51
|
import { default as default49 } from "./components/puck-block/testimonial-sections/masonry-testimonial/index.js";
|
|
@@ -465,7 +468,10 @@ export {
|
|
|
465
468
|
KbdGroup,
|
|
466
469
|
Label,
|
|
467
470
|
LayoutTextFlip,
|
|
471
|
+
conf as Location2Conf,
|
|
472
|
+
conf2 as Location3Conf,
|
|
468
473
|
default46 as LocationCardsGridConf,
|
|
474
|
+
conf3 as LocationConf,
|
|
469
475
|
default47 as MarqueeTestimonialConf,
|
|
470
476
|
default48 as MasonryGridConf,
|
|
471
477
|
default49 as MasonryTestimonialConf,
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import React__default, { useState, useCallback } from "react";
|
|
2
|
+
const hiddenStyles = {
|
|
3
|
+
display: "none"
|
|
4
|
+
};
|
|
5
|
+
function HiddenText(_ref) {
|
|
6
|
+
let {
|
|
7
|
+
id,
|
|
8
|
+
value
|
|
9
|
+
} = _ref;
|
|
10
|
+
return React__default.createElement("div", {
|
|
11
|
+
id,
|
|
12
|
+
style: hiddenStyles
|
|
13
|
+
}, value);
|
|
14
|
+
}
|
|
15
|
+
function LiveRegion(_ref) {
|
|
16
|
+
let {
|
|
17
|
+
id,
|
|
18
|
+
announcement,
|
|
19
|
+
ariaLiveType = "assertive"
|
|
20
|
+
} = _ref;
|
|
21
|
+
const visuallyHidden = {
|
|
22
|
+
position: "fixed",
|
|
23
|
+
top: 0,
|
|
24
|
+
left: 0,
|
|
25
|
+
width: 1,
|
|
26
|
+
height: 1,
|
|
27
|
+
margin: -1,
|
|
28
|
+
border: 0,
|
|
29
|
+
padding: 0,
|
|
30
|
+
overflow: "hidden",
|
|
31
|
+
clip: "rect(0 0 0 0)",
|
|
32
|
+
clipPath: "inset(100%)",
|
|
33
|
+
whiteSpace: "nowrap"
|
|
34
|
+
};
|
|
35
|
+
return React__default.createElement("div", {
|
|
36
|
+
id,
|
|
37
|
+
style: visuallyHidden,
|
|
38
|
+
role: "status",
|
|
39
|
+
"aria-live": ariaLiveType,
|
|
40
|
+
"aria-atomic": true
|
|
41
|
+
}, announcement);
|
|
42
|
+
}
|
|
43
|
+
function useAnnouncement() {
|
|
44
|
+
const [announcement, setAnnouncement] = useState("");
|
|
45
|
+
const announce = useCallback((value) => {
|
|
46
|
+
if (value != null) {
|
|
47
|
+
setAnnouncement(value);
|
|
48
|
+
}
|
|
49
|
+
}, []);
|
|
50
|
+
return {
|
|
51
|
+
announce,
|
|
52
|
+
announcement
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
HiddenText,
|
|
57
|
+
LiveRegion,
|
|
58
|
+
useAnnouncement
|
|
59
|
+
};
|