@simple-builder/react 1.0.1 → 1.0.3

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.
@@ -1,1302 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var chunkAAKS5YHL_js = require('./chunk-AAKS5YHL.js');
6
- var chunkVMHWPKU4_js = require('./chunk-VMHWPKU4.js');
7
- var React15 = require('react');
8
- var lucideReact = require('lucide-react');
9
- var zod$1 = require('@hookform/resolvers/zod');
10
- var dateFns = require('date-fns');
11
- var reactHookForm = require('react-hook-form');
12
- var zod = require('zod');
13
- var AlertDialogPrimitive = require('@radix-ui/react-alert-dialog');
14
- var reactSlot = require('@radix-ui/react-slot');
15
- var LabelPrimitive = require('@radix-ui/react-label');
16
- var classVarianceAuthority = require('class-variance-authority');
17
- var PopoverPrimitive = require('@radix-ui/react-popover');
18
- var TabsPrimitive = require('@radix-ui/react-tabs');
19
- var NextImage = require('next/image');
20
- var reactDayPicker = require('react-day-picker');
21
- var SwitchPrimitives = require('@radix-ui/react-switch');
22
- var TogglePrimitive = require('@radix-ui/react-toggle');
23
-
24
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
25
-
26
- function _interopNamespace(e) {
27
- if (e && e.__esModule) return e;
28
- var n = Object.create(null);
29
- if (e) {
30
- Object.keys(e).forEach(function (k) {
31
- if (k !== 'default') {
32
- var d = Object.getOwnPropertyDescriptor(e, k);
33
- Object.defineProperty(n, k, d.get ? d : {
34
- enumerable: true,
35
- get: function () { return e[k]; }
36
- });
37
- }
38
- });
39
- }
40
- n.default = e;
41
- return Object.freeze(n);
42
- }
43
-
44
- var React15__namespace = /*#__PURE__*/_interopNamespace(React15);
45
- var AlertDialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(AlertDialogPrimitive);
46
- var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
47
- var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespace(PopoverPrimitive);
48
- var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
49
- var NextImage__default = /*#__PURE__*/_interopDefault(NextImage);
50
- var SwitchPrimitives__namespace = /*#__PURE__*/_interopNamespace(SwitchPrimitives);
51
- var TogglePrimitive__namespace = /*#__PURE__*/_interopNamespace(TogglePrimitive);
52
-
53
- var AlertDialog = AlertDialogPrimitive__namespace.Root;
54
- var AlertDialogTrigger = AlertDialogPrimitive__namespace.Trigger;
55
- var AlertDialogPortal = AlertDialogPrimitive__namespace.Portal;
56
- var AlertDialogOverlay = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(
57
- AlertDialogPrimitive__namespace.Overlay,
58
- {
59
- className: chunkAAKS5YHL_js.cn(
60
- "fixed inset-0 z-50 bg-sb-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
61
- className
62
- ),
63
- ...props,
64
- ref
65
- }
66
- ));
67
- AlertDialogOverlay.displayName = AlertDialogPrimitive__namespace.Overlay.displayName;
68
- var AlertDialogContent = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(AlertDialogPortal, null, /* @__PURE__ */ React15__namespace.createElement(AlertDialogOverlay, null), /* @__PURE__ */ React15__namespace.createElement(
69
- AlertDialogPrimitive__namespace.Content,
70
- {
71
- ref,
72
- className: chunkAAKS5YHL_js.cn(
73
- "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-sb-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
74
- className
75
- ),
76
- ...props
77
- }
78
- )));
79
- AlertDialogContent.displayName = AlertDialogPrimitive__namespace.Content.displayName;
80
- var AlertDialogFooter = ({
81
- className,
82
- ...props
83
- }) => /* @__PURE__ */ React15__namespace.createElement(
84
- "div",
85
- {
86
- className: chunkAAKS5YHL_js.cn(
87
- "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
88
- className
89
- ),
90
- ...props
91
- }
92
- );
93
- AlertDialogFooter.displayName = "AlertDialogFooter";
94
- var AlertDialogTitle = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(
95
- AlertDialogPrimitive__namespace.Title,
96
- {
97
- ref,
98
- className: chunkAAKS5YHL_js.cn("text-lg font-semibold", className),
99
- ...props
100
- }
101
- ));
102
- AlertDialogTitle.displayName = AlertDialogPrimitive__namespace.Title.displayName;
103
- var AlertDialogDescription = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(
104
- AlertDialogPrimitive__namespace.Description,
105
- {
106
- ref,
107
- className: chunkAAKS5YHL_js.cn("text-sm text-sb-muted-foreground", className),
108
- ...props
109
- }
110
- ));
111
- AlertDialogDescription.displayName = AlertDialogPrimitive__namespace.Description.displayName;
112
- var AlertDialogAction = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(
113
- AlertDialogPrimitive__namespace.Action,
114
- {
115
- ref,
116
- className: chunkAAKS5YHL_js.cn(chunkAAKS5YHL_js.buttonVariants(), className),
117
- ...props
118
- }
119
- ));
120
- AlertDialogAction.displayName = AlertDialogPrimitive__namespace.Action.displayName;
121
- var AlertDialogCancel = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(
122
- AlertDialogPrimitive__namespace.Cancel,
123
- {
124
- ref,
125
- className: chunkAAKS5YHL_js.cn(
126
- chunkAAKS5YHL_js.buttonVariants({ variant: "outline" }),
127
- "mt-2 sm:mt-0",
128
- className
129
- ),
130
- ...props
131
- }
132
- ));
133
- AlertDialogCancel.displayName = AlertDialogPrimitive__namespace.Cancel.displayName;
134
- var labelVariants = classVarianceAuthority.cva(
135
- "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
136
- );
137
- var Label = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(
138
- LabelPrimitive__namespace.Root,
139
- {
140
- ref,
141
- className: chunkAAKS5YHL_js.cn(labelVariants(), className),
142
- ...props
143
- }
144
- ));
145
- Label.displayName = LabelPrimitive__namespace.Root.displayName;
146
-
147
- // src/components/ui/form.tsx
148
- var Form = reactHookForm.FormProvider;
149
- var FormFieldContext = React15__namespace.createContext(
150
- {}
151
- );
152
- var FormField = ({
153
- ...props
154
- }) => {
155
- return /* @__PURE__ */ React15__namespace.createElement(FormFieldContext.Provider, { value: { name: props.name } }, /* @__PURE__ */ React15__namespace.createElement(reactHookForm.Controller, { ...props }));
156
- };
157
- var useFormField = () => {
158
- const fieldContext = React15__namespace.useContext(FormFieldContext);
159
- const itemContext = React15__namespace.useContext(FormItemContext);
160
- const { getFieldState, formState } = reactHookForm.useFormContext();
161
- const fieldState = getFieldState(fieldContext.name, formState);
162
- if (!fieldContext) {
163
- throw new Error("useFormField should be used within <FormField>");
164
- }
165
- const { id } = itemContext;
166
- return {
167
- id,
168
- name: fieldContext.name,
169
- formItemId: `${id}-form-item`,
170
- formDescriptionId: `${id}-form-item-description`,
171
- formMessageId: `${id}-form-item-message`,
172
- ...fieldState
173
- };
174
- };
175
- var FormItemContext = React15__namespace.createContext(
176
- {}
177
- );
178
- var FormItem = React15__namespace.forwardRef(({ className, ...props }, ref) => {
179
- const id = React15__namespace.useId();
180
- return /* @__PURE__ */ React15__namespace.createElement(FormItemContext.Provider, { value: { id } }, /* @__PURE__ */ React15__namespace.createElement("div", { ref, className: chunkAAKS5YHL_js.cn("space-y-2", className), ...props }));
181
- });
182
- FormItem.displayName = "FormItem";
183
- var FormLabel = React15__namespace.forwardRef(({ className, ...props }, ref) => {
184
- const { error, formItemId } = useFormField();
185
- return /* @__PURE__ */ React15__namespace.createElement(
186
- Label,
187
- {
188
- ref,
189
- className: chunkAAKS5YHL_js.cn(error && "text-sb-destructive", className),
190
- htmlFor: formItemId,
191
- ...props
192
- }
193
- );
194
- });
195
- FormLabel.displayName = "FormLabel";
196
- var FormControl = React15__namespace.forwardRef(({ ...props }, ref) => {
197
- const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
198
- return /* @__PURE__ */ React15__namespace.createElement(
199
- reactSlot.Slot,
200
- {
201
- ref,
202
- id: formItemId,
203
- "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
204
- "aria-invalid": !!error,
205
- ...props
206
- }
207
- );
208
- });
209
- FormControl.displayName = "FormControl";
210
- var FormDescription = React15__namespace.forwardRef(({ className, ...props }, ref) => {
211
- const { formDescriptionId } = useFormField();
212
- return /* @__PURE__ */ React15__namespace.createElement(
213
- "p",
214
- {
215
- ref,
216
- id: formDescriptionId,
217
- className: chunkAAKS5YHL_js.cn("text-sm text-sb-muted-foreground", className),
218
- ...props
219
- }
220
- );
221
- });
222
- FormDescription.displayName = "FormDescription";
223
- var FormMessage = React15__namespace.forwardRef(({ className, children, ...props }, ref) => {
224
- const { error, formMessageId } = useFormField();
225
- const body = error ? String(error?.message) : children;
226
- if (!body) {
227
- return null;
228
- }
229
- return /* @__PURE__ */ React15__namespace.createElement(
230
- "p",
231
- {
232
- ref,
233
- id: formMessageId,
234
- className: chunkAAKS5YHL_js.cn("text-sm font-medium text-sb-destructive", className),
235
- ...props
236
- },
237
- body
238
- );
239
- });
240
- FormMessage.displayName = "FormMessage";
241
- var Popover = PopoverPrimitive__namespace.Root;
242
- var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
243
- var PopoverClose = PopoverPrimitive__namespace.Close;
244
- var PopoverContent = React15__namespace.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(PopoverPrimitive__namespace.Portal, null, /* @__PURE__ */ React15__namespace.createElement(
245
- PopoverPrimitive__namespace.Content,
246
- {
247
- ref,
248
- align,
249
- sideOffset,
250
- className: chunkAAKS5YHL_js.cn(
251
- "z-50 w-72 rounded-md border bg-sb-popover p-4 text-sb-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
252
- className
253
- ),
254
- ...props
255
- }
256
- )));
257
- PopoverContent.displayName = PopoverPrimitive__namespace.Content.displayName;
258
- var Tabs = TabsPrimitive__namespace.Root;
259
- var TabsList = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(
260
- TabsPrimitive__namespace.List,
261
- {
262
- ref,
263
- className: chunkAAKS5YHL_js.cn("flex items-center border-b px-4 space-x-6", className),
264
- ...props
265
- }
266
- ));
267
- TabsList.displayName = TabsPrimitive__namespace.List.displayName;
268
- var TabsTrigger = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(
269
- TabsPrimitive__namespace.Trigger,
270
- {
271
- ref,
272
- className: chunkAAKS5YHL_js.cn(
273
- "inline-flex items-center justify-center whitespace-nowrap py-3 text-sm font-medium transition-all focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:border-black border-b-2 border-transparent data-[state=active]:text-sb-foreground text-sb-muted-sb-foreground",
274
- className
275
- ),
276
- ...props
277
- }
278
- ));
279
- TabsTrigger.displayName = TabsPrimitive__namespace.Trigger.displayName;
280
- var TabsContent = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(
281
- TabsPrimitive__namespace.Content,
282
- {
283
- ref,
284
- className: chunkAAKS5YHL_js.cn(
285
- "ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
286
- className
287
- ),
288
- ...props
289
- }
290
- ));
291
- TabsContent.displayName = TabsPrimitive__namespace.Content.displayName;
292
- var Image = (props) => {
293
- if (typeof NextImage__default.default !== "undefined") {
294
- return /* @__PURE__ */ React15__namespace.createElement(NextImage__default.default.default, { ...props });
295
- }
296
- return /* @__PURE__ */ React15__namespace.createElement("img", { ...props });
297
- };
298
-
299
- // src/components/ui/media-input.tsx
300
- var MediaInput = (props) => {
301
- const { onFilesChange, limit = 32, multiple = false, onError } = props;
302
- const id = React15__namespace.useId();
303
- const [queue, setQueue] = React15__namespace.useState([]);
304
- const [sources, setSources] = React15__namespace.useState(props.files ?? []);
305
- const maxConcurrentUploads = 3;
306
- const uploadingCountRef = React15__namespace.useRef(0);
307
- const handleFilesAdd = async (e) => {
308
- const files = e.target.files;
309
- if (!files || files.length === 0) {
310
- return;
311
- }
312
- if (files.length + sources.length > (multiple ? limit : 1)) {
313
- onError?.(
314
- new MediaInputError(
315
- `Maximaal ${limit} bestanden.`,
316
- `Je probeerde nu ${files.length + sources.length} bestanden toe te voegen, maar je mag er maximaal ${limit} toevoegen.`
317
- )
318
- );
319
- return;
320
- }
321
- const queue2 = Array.from(files);
322
- setQueue(queue2);
323
- for (const file of queue2) {
324
- try {
325
- while (uploadingCountRef.current >= maxConcurrentUploads && uploadingCountRef.current > 0) {
326
- await new Promise((resolve) => setTimeout(resolve, 300));
327
- }
328
- uploadingCountRef.current++;
329
- const formData = new FormData();
330
- formData.append("file", file);
331
- const res = await fetch("/api/simple-builder/file/upload", {
332
- method: "POST",
333
- body: formData
334
- });
335
- if (res === void 0 || !res.ok) {
336
- onError?.(
337
- new MediaInputError(
338
- "Bestand uploaden misulukt",
339
- `Bestand ${file.name} kon niet worden ge\xFCpload.`
340
- )
341
- );
342
- continue;
343
- }
344
- const { data: url } = await res.json();
345
- if (!url) {
346
- onError?.(
347
- new MediaInputError(
348
- "Bestand uploaden misulukt",
349
- `De URL van bestand ${file.name} kon niet worden opgehaald.`
350
- )
351
- );
352
- continue;
353
- }
354
- setSources((prev) => [...prev, url]);
355
- onFilesChange?.([...sources, url]);
356
- } catch (e2) {
357
- onError?.(
358
- new MediaInputError(
359
- "Bestand uploaden misulukt",
360
- `Bestand ${file.name} kon niet worden ge\xFCpload.`
361
- )
362
- );
363
- } finally {
364
- setQueue((prev) => prev.filter((f) => f !== file));
365
- uploadingCountRef.current--;
366
- }
367
- }
368
- };
369
- const handleSourceDelete = async (src) => {
370
- setSources((prev) => prev.filter((s) => s !== src));
371
- onFilesChange?.(sources.filter((s) => s !== src));
372
- await fetch("/api/uploadthing/delete", {
373
- method: "POST",
374
- body: JSON.stringify({ src })
375
- });
376
- };
377
- return /* @__PURE__ */ React15__namespace.createElement("div", { className: chunkAAKS5YHL_js.cn("flex flex-wrap gap-4", props.className) }, sources.map((src) => /* @__PURE__ */ React15__namespace.createElement(MediaInputItem, { key: src, className: chunkAAKS5YHL_js.cn("group", props.itemClassName) }, /* @__PURE__ */ React15__namespace.createElement(
378
- Image,
379
- {
380
- src,
381
- alt: "",
382
- fill: true,
383
- className: "absolute inset-0 object-cover pointer-events-none"
384
- }
385
- ), /* @__PURE__ */ React15__namespace.createElement("div", { className: "absolute right-1 top-1 z-30 flex items-center justify-end gap-3 opacity-0 transition-opacity group-hover:opacity-100" }, /* @__PURE__ */ React15__namespace.createElement(
386
- "button",
387
- {
388
- className: "flex h-8 w-8 items-center justify-center rounded-full border bg-sb-secondary text-sb-secondary-foreground opacity-90 shadow transition-opacity hover:opacity-100",
389
- onClick: () => handleSourceDelete(src)
390
- },
391
- /* @__PURE__ */ React15__namespace.createElement(lucideReact.Trash2Icon, { className: "h-4 w-4" })
392
- )))), queue.map((_, i) => /* @__PURE__ */ React15__namespace.createElement(
393
- MediaInputItem,
394
- {
395
- key: i,
396
- className: chunkAAKS5YHL_js.cn(
397
- "flex h-28 w-28 items-center justify-center",
398
- props.itemClassName
399
- )
400
- },
401
- /* @__PURE__ */ React15__namespace.createElement(lucideReact.Loader2Icon, { className: "h-6 w-6 animate-spin" })
402
- )), multiple || !multiple && !sources.length && !queue.length ? /* @__PURE__ */ React15__namespace.createElement(
403
- "label",
404
- {
405
- htmlFor: id,
406
- className: chunkAAKS5YHL_js.cn(
407
- "flex h-28 w-28 cursor-pointer items-center justify-center rounded-lg border",
408
- props.itemClassName
409
- )
410
- },
411
- /* @__PURE__ */ React15__namespace.createElement(lucideReact.PlusIcon, { className: "h-6 w-6" }),
412
- /* @__PURE__ */ React15__namespace.createElement(
413
- "input",
414
- {
415
- id,
416
- type: "file",
417
- onChange: handleFilesAdd,
418
- multiple,
419
- accept: ".png,.jpg,.jpeg,.webp,.gif,.svg",
420
- className: "hidden"
421
- }
422
- )
423
- ) : null);
424
- };
425
- var MediaInputItem = (props) => {
426
- return /* @__PURE__ */ React15__namespace.createElement(
427
- "div",
428
- {
429
- className: chunkAAKS5YHL_js.cn(
430
- "relative h-28 w-28 overflow-hidden rounded-lg border",
431
- props.className
432
- )
433
- },
434
- props.children
435
- );
436
- };
437
- var MediaInputError = class extends Error {
438
- title;
439
- description;
440
- constructor(message, description) {
441
- super(message);
442
- this.title = message;
443
- this.description = description;
444
- }
445
- };
446
-
447
- // src/components/ui/background-picker.tsx
448
- var BackgroundPicker = (props) => {
449
- const { background, onBackgroundChange, className } = props;
450
- const solids = props.solids ?? [
451
- "#000000",
452
- "#ffffff",
453
- "#0f172a",
454
- "#F1F5F9",
455
- "#64748B",
456
- "#E6007E",
457
- "#F8FAFC",
458
- "#009DD1",
459
- "#FF0000"
460
- ];
461
- const gradients = props.gradients ?? [
462
- "linear-gradient(to top left,#accbee,#e7f0fd)",
463
- "linear-gradient(to top left,#d5d4d0,#d5d4d0,#eeeeec)"
464
- ];
465
- const images = props.images ?? [
466
- "url(https://images.unsplash.com/photo-1688822863426-8c5f9b257090?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2532&q=90)",
467
- "url(https://images.unsplash.com/photo-1691225850735-6e4e51834cad?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2532&q=90)"
468
- ];
469
- const defaultTab = React15__namespace.useMemo(() => {
470
- if (background.includes("url"))
471
- return "image";
472
- if (background.includes("gradient"))
473
- return "gradient";
474
- return "solid";
475
- }, [background]);
476
- return /* @__PURE__ */ React15__namespace.createElement(Popover, null, /* @__PURE__ */ React15__namespace.createElement(PopoverTrigger, { asChild: true }, /* @__PURE__ */ React15__namespace.createElement(
477
- chunkAAKS5YHL_js.Button,
478
- {
479
- variant: "outline",
480
- size: "sm",
481
- className: chunkAAKS5YHL_js.cn(
482
- "justify-start text-left font-normal normal-case w-full",
483
- !background && "text-sb-muted-foreground",
484
- className
485
- )
486
- },
487
- /* @__PURE__ */ React15__namespace.createElement("div", { className: "w-full flex items-center gap-2" }, background ? /* @__PURE__ */ React15__namespace.createElement(
488
- "div",
489
- {
490
- className: "h-4 w-4 rounded !bg-center !bg-cover transition-all border",
491
- style: { background }
492
- }
493
- ) : /* @__PURE__ */ React15__namespace.createElement(lucideReact.PaintbrushIcon, { className: "h-4 w-4" }), /* @__PURE__ */ React15__namespace.createElement("div", { className: "truncate flex-1" }, background ? background : "Kies een achtergrond"))
494
- )), /* @__PURE__ */ React15__namespace.createElement(PopoverContent, { className: "w-64 p-0" }, /* @__PURE__ */ React15__namespace.createElement(Tabs, { defaultValue: defaultTab }, /* @__PURE__ */ React15__namespace.createElement(TabsList, { className: "w-full" }, /* @__PURE__ */ React15__namespace.createElement(TabsTrigger, { className: "flex-1", value: "solid" }, "Solid"), /* @__PURE__ */ React15__namespace.createElement(TabsTrigger, { className: "flex-1", value: "gradient" }, "Gradient"), /* @__PURE__ */ React15__namespace.createElement(TabsTrigger, { className: "flex-1", value: "image" }, "Image")), /* @__PURE__ */ React15__namespace.createElement(
495
- TabsContent,
496
- {
497
- value: "solid",
498
- className: "data-[state=active]:flex flex-wrap gap-1 p-4"
499
- },
500
- solids.map((s) => /* @__PURE__ */ React15__namespace.createElement(
501
- "div",
502
- {
503
- key: s,
504
- style: { background: s },
505
- className: "rounded-md h-6 w-6 cursor-pointer active:scale-105 border",
506
- onClick: () => onBackgroundChange(s)
507
- }
508
- ))
509
- ), /* @__PURE__ */ React15__namespace.createElement(
510
- TabsContent,
511
- {
512
- value: "gradient",
513
- className: "data-[state=active]:flex flex-wrap gap-1 p-4"
514
- },
515
- gradients.map((s) => /* @__PURE__ */ React15__namespace.createElement(
516
- "div",
517
- {
518
- key: s,
519
- style: { background: s },
520
- className: "rounded-md h-6 w-6 cursor-pointer active:scale-105 border",
521
- onClick: () => onBackgroundChange(s)
522
- }
523
- ))
524
- ), /* @__PURE__ */ React15__namespace.createElement(TabsContent, { value: "image" }, /* @__PURE__ */ React15__namespace.createElement("div", { className: "p-4 border-b" }, /* @__PURE__ */ React15__namespace.createElement(
525
- MediaInput,
526
- {
527
- className: "grid grid-cols-2 gap-1",
528
- itemClassName: "aspect-video h-auto w-full",
529
- multiple: false,
530
- onFilesChange: (files) => {
531
- if (!files.length)
532
- return;
533
- onBackgroundChange(`url(${files[0]})`);
534
- },
535
- onError: (e) => console.error(
536
- "[media-input]: Title: " + e?.title,
537
- "media-input: Error: " + e?.description
538
- )
539
- }
540
- )), /* @__PURE__ */ React15__namespace.createElement("div", { className: "grid grid-cols-2 gap-1 p-4" }, images.map((s) => /* @__PURE__ */ React15__namespace.createElement(
541
- "div",
542
- {
543
- key: s,
544
- style: { backgroundImage: s },
545
- className: "rounded-md bg-cover bg-center aspect-video w-full cursor-pointer border active:scale-105",
546
- onClick: () => onBackgroundChange(s)
547
- }
548
- )))))));
549
- };
550
- function Calendar({
551
- className,
552
- classNames,
553
- showOutsideDays = true,
554
- ...props
555
- }) {
556
- return /* @__PURE__ */ React15__namespace.createElement(
557
- reactDayPicker.DayPicker,
558
- {
559
- showOutsideDays,
560
- className: chunkAAKS5YHL_js.cn("p-3", className),
561
- classNames: {
562
- months: "flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",
563
- month: "space-y-4",
564
- caption: "flex justify-center pt-1 relative items-center",
565
- caption_label: "text-sm font-medium",
566
- nav: "space-x-1 flex items-center",
567
- nav_button: chunkAAKS5YHL_js.cn(
568
- chunkAAKS5YHL_js.buttonVariants({ variant: "outline" }),
569
- "h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"
570
- ),
571
- nav_button_previous: "absolute left-1",
572
- nav_button_next: "absolute right-1",
573
- table: "w-full border-collapse space-y-1",
574
- head_row: "flex",
575
- head_cell: "text-sb-muted-foreground rounded-md w-8 font-normal text-[0.8rem]",
576
- row: "flex w-full mt-2",
577
- cell: chunkAAKS5YHL_js.cn(
578
- "relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-sb-accent [&:has([aria-selected].day-outside)]:bg-sb-accent/50 [&:has([aria-selected].day-range-end)]:rounded-r-md",
579
- props.mode === "range" ? "[&:has(>.day-range-end)]:rounded-r-md [&:has(>.day-range-start)]:rounded-l-md first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md" : "[&:has([aria-selected])]:rounded-md"
580
- ),
581
- day: chunkAAKS5YHL_js.cn(
582
- chunkAAKS5YHL_js.buttonVariants({ variant: "ghost" }),
583
- "h-8 w-8 p-0 font-normal aria-selected:opacity-100"
584
- ),
585
- day_range_start: "day-range-start",
586
- day_range_end: "day-range-end",
587
- day_selected: "bg-sb-primary text-sb-primary-foreground hover:bg-sb-primary hover:text-sb-primary-foreground focus:bg-sb-primary focus:text-sb-primary-foreground",
588
- day_today: "bg-sb-accent text-sb-accent-foreground",
589
- day_outside: "day-outside text-sb-muted-foreground opacity-50 aria-selected:bg-sb-accent/50 aria-selected:text-sb-muted-foreground aria-selected:opacity-30",
590
- day_disabled: "text-sb-muted-foreground opacity-50",
591
- day_range_middle: "aria-selected:bg-sb-accent aria-selected:text-sb-accent-foreground",
592
- day_hidden: "invisible",
593
- ...classNames
594
- },
595
- components: {
596
- IconLeft: () => /* @__PURE__ */ React15__namespace.createElement(lucideReact.ChevronLeftIcon, { className: "h-4 w-4" }),
597
- IconRight: () => /* @__PURE__ */ React15__namespace.createElement(lucideReact.ChevronRightIcon, { className: "h-4 w-4" })
598
- },
599
- ...props
600
- }
601
- );
602
- }
603
- Calendar.displayName = "Calendar";
604
- var ColorPicker = (props) => {
605
- const { color, onColorChange, className } = props;
606
- const colors = props.colors ?? [
607
- "#000000",
608
- "#ffffff",
609
- "#0f172a",
610
- "#F1F5F9",
611
- "#64748B",
612
- "#E6007E",
613
- "#F8FAFC",
614
- "#009DD1",
615
- "#FF0000"
616
- ];
617
- return /* @__PURE__ */ React15__namespace.createElement(Popover, null, /* @__PURE__ */ React15__namespace.createElement(PopoverTrigger, { asChild: true }, /* @__PURE__ */ React15__namespace.createElement(
618
- chunkAAKS5YHL_js.Button,
619
- {
620
- variant: "outline",
621
- size: "sm",
622
- className: chunkAAKS5YHL_js.cn(
623
- "justify-start text-left font-normal normal-case w-full",
624
- !color && "text-sb-muted-foreground",
625
- className
626
- )
627
- },
628
- /* @__PURE__ */ React15__namespace.createElement("div", { className: "w-full flex items-center gap-2" }, color ? /* @__PURE__ */ React15__namespace.createElement(
629
- "div",
630
- {
631
- className: "h-4 w-4 rounded !bg-center !bg-cover transition-all border",
632
- style: { background: color }
633
- }
634
- ) : /* @__PURE__ */ React15__namespace.createElement(lucideReact.PaintbrushIcon, { className: "h-4 w-4" }), /* @__PURE__ */ React15__namespace.createElement("div", { className: "truncate flex-1" }, color ? color : "Kies een kleur"))
635
- )), /* @__PURE__ */ React15__namespace.createElement(PopoverContent, { className: "w-64 p-4 flex flex-wrap gap-1" }, colors.map((s) => /* @__PURE__ */ React15__namespace.createElement(
636
- "div",
637
- {
638
- key: s,
639
- style: { background: s },
640
- className: "rounded-md h-6 w-6 cursor-pointer active:scale-105 border",
641
- onClick: () => onColorChange(s)
642
- }
643
- ))));
644
- };
645
- var Input = React15__namespace.forwardRef(
646
- ({ className, type, ...props }, ref) => {
647
- return /* @__PURE__ */ React15__namespace.createElement(
648
- "input",
649
- {
650
- type,
651
- className: chunkAAKS5YHL_js.cn(
652
- "flex h-8 w-full rounded-md border border-sb-input bg-sb-background px-3 py-1 text-sm ring-offset-sb-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-sb-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-sb-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
653
- className
654
- ),
655
- ref,
656
- ...props
657
- }
658
- );
659
- }
660
- );
661
- Input.displayName = "Input";
662
- var AdvancedInput = React15__namespace.forwardRef(
663
- ({ prepend, append, ...props }, ref) => {
664
- return /* @__PURE__ */ React15__namespace.createElement("div", { className: "relative" }, /* @__PURE__ */ React15__namespace.createElement(Input, { ref, className: "pl-9 pr-7 text-right", ...props }), prepend && /* @__PURE__ */ React15__namespace.createElement("div", { className: "absolute top-1/2 left-3 -translate-y-1/2" }, prepend), append && /* @__PURE__ */ React15__namespace.createElement("div", { className: "absolute top-1/2 right-3 -translate-y-1/2" }, append));
665
- }
666
- );
667
- AdvancedInput.displayName = "AdvancedInput";
668
- var Switch = React15__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(
669
- SwitchPrimitives__namespace.Root,
670
- {
671
- className: chunkAAKS5YHL_js.cn(
672
- "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sb-ring focus-visible:ring-offset-2 focus-visible:ring-offset-sb-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-sb-primary data-[state=unchecked]:bg-sb-input",
673
- className
674
- ),
675
- ...props,
676
- ref
677
- },
678
- /* @__PURE__ */ React15__namespace.createElement(
679
- SwitchPrimitives__namespace.Thumb,
680
- {
681
- className: chunkAAKS5YHL_js.cn(
682
- "pointer-events-none block h-5 w-5 rounded-full bg-sb-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"
683
- )
684
- }
685
- )
686
- ));
687
- Switch.displayName = SwitchPrimitives__namespace.Root.displayName;
688
- var Textarea = React15__namespace.forwardRef(
689
- ({ className, ...props }, ref) => {
690
- return /* @__PURE__ */ React15__namespace.createElement(
691
- "textarea",
692
- {
693
- className: chunkAAKS5YHL_js.cn(
694
- "flex min-h-[60px] w-full rounded-md border border-sb-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-sb-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-sb-ring disabled:cursor-not-allowed disabled:opacity-50",
695
- className
696
- ),
697
- ref,
698
- ...props
699
- }
700
- );
701
- }
702
- );
703
- Textarea.displayName = "Textarea";
704
- var toggleVariants = classVarianceAuthority.cva(
705
- "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-sb-background transition-colors hover:bg-sb-muted hover:text-sb-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-sb-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-sb-accent data-[state=on]:text-sb-accent-foreground",
706
- {
707
- variants: {
708
- variant: {
709
- default: "bg-transparent",
710
- outline: "border border-input bg-transparent hover:bg-sb-accent hover:text-sb-accent-foreground"
711
- },
712
- size: {
713
- default: "h-10 px-3",
714
- sm: "h-9 px-2.5",
715
- lg: "h-11 px-5"
716
- }
717
- },
718
- defaultVariants: {
719
- variant: "default",
720
- size: "default"
721
- }
722
- }
723
- );
724
- var Toggle = React15__namespace.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ React15__namespace.createElement(
725
- TogglePrimitive__namespace.Root,
726
- {
727
- ref,
728
- className: chunkAAKS5YHL_js.cn(toggleVariants({ variant, size, className })),
729
- ...props
730
- }
731
- ));
732
- Toggle.displayName = TogglePrimitive__namespace.Root.displayName;
733
-
734
- // src/components/container-item-toolbar.tsx
735
- var ContainerItemToolbar = (props) => {
736
- const { contentId, canBringUp = false, canBringDown = false } = props;
737
- const { bringUp, bringDown } = chunkAAKS5YHL_js.useBuilder();
738
- return /* @__PURE__ */ React15__namespace.createElement("div", { className: "absolute z-20 top-1 right-1 rounded-md shadow flex flex-col gap-1 p-1 bg-sb-card text-sb-card-sb-foreground sb-item-toolbar opacity-0 transition-opacity" }, /* @__PURE__ */ React15__namespace.createElement("div", { className: "h-10 p-1 border border-sb-input bg-sb-background rounded-md text-sm font-medium flex gap-1 items-center justify-start" }, /* @__PURE__ */ React15__namespace.createElement(EditButton, { id: contentId }), /* @__PURE__ */ React15__namespace.createElement(
739
- chunkAAKS5YHL_js.Button,
740
- {
741
- variant: "ghost",
742
- className: "w-8 h-8 p-0",
743
- onClick: () => bringUp(contentId),
744
- disabled: !canBringUp
745
- },
746
- /* @__PURE__ */ React15__namespace.createElement(lucideReact.ArrowUp, { className: "h-5 w-5" })
747
- ), /* @__PURE__ */ React15__namespace.createElement(
748
- chunkAAKS5YHL_js.Button,
749
- {
750
- variant: "ghost",
751
- className: "w-8 h-8 p-0",
752
- onClick: () => bringDown(contentId),
753
- disabled: !canBringDown
754
- },
755
- /* @__PURE__ */ React15__namespace.createElement(lucideReact.ArrowDown, { className: "h-5 w-5" })
756
- ), /* @__PURE__ */ React15__namespace.createElement(DeleteButton, { contentId })));
757
- };
758
- var EditButton = ({ id }) => {
759
- return /* @__PURE__ */ React15__namespace.createElement(Popover, null, /* @__PURE__ */ React15__namespace.createElement(PopoverTrigger, { asChild: true }, /* @__PURE__ */ React15__namespace.createElement(chunkAAKS5YHL_js.Button, { variant: "ghost", className: "w-8 h-8 p-0" }, /* @__PURE__ */ React15__namespace.createElement(lucideReact.Edit2Icon, { className: "h-5 w-5" }))), /* @__PURE__ */ React15__namespace.createElement(
760
- PopoverContent,
761
- {
762
- side: "left",
763
- align: "start",
764
- sideOffset: 16,
765
- alignOffset: -8,
766
- className: "p-0",
767
- collisionPadding: 16
768
- },
769
- /* @__PURE__ */ React15__namespace.createElement(EditPopoverInner, { id })
770
- ));
771
- };
772
- var EditPopoverInner = (props) => {
773
- const { id } = props;
774
- const { getItem } = chunkAAKS5YHL_js.useBuilder();
775
- const item = getItem(id);
776
- if (!item) {
777
- throw new Error(
778
- `[simple-builder]: Item with id ${id} not found in container item form component`
779
- );
780
- }
781
- return /* @__PURE__ */ React15__namespace.createElement(Tabs, null, /* @__PURE__ */ React15__namespace.createElement(TabsList, { defaultValue: "content" }, /* @__PURE__ */ React15__namespace.createElement(TabsTrigger, { value: "content" }, "Inhoud"), /* @__PURE__ */ React15__namespace.createElement(TabsTrigger, { value: "design" }, "Design")), /* @__PURE__ */ React15__namespace.createElement(TabsContent, { value: "content" }, /* @__PURE__ */ React15__namespace.createElement(ContainerItemForm, { item })), /* @__PURE__ */ React15__namespace.createElement(TabsContent, { value: "design" }, /* @__PURE__ */ React15__namespace.createElement(ItemDesignForm, { item })));
782
- };
783
- var ContainerItemForm = (props) => {
784
- const { item } = props;
785
- const { patchItem } = chunkAAKS5YHL_js.useBuilder();
786
- const component = chunkVMHWPKU4_js.builder.getComponent(item.component);
787
- if (!component) {
788
- throw new Error(
789
- `[simple-builder]: Component with id ${item.component} not found in container item form component`
790
- );
791
- }
792
- const form = reactHookForm.useForm({
793
- defaultValues: (component.inputs || []).reduce(
794
- (acc, input) => ({
795
- ...acc,
796
- [input.name]: item?.props?.[input.name] ?? input.defaultValue
797
- }),
798
- {}
799
- )
800
- });
801
- const onSubmit = (values) => {
802
- patchItem(item.id, {
803
- props: values
804
- });
805
- };
806
- React15__namespace.useEffect(() => {
807
- const subscription = form.watch(() => form.handleSubmit(onSubmit)());
808
- return () => subscription.unsubscribe();
809
- }, [form.watch, form.handleSubmit]);
810
- return /* @__PURE__ */ React15__namespace.createElement(Form, { ...form }, /* @__PURE__ */ React15__namespace.createElement("form", { onSubmit: form.handleSubmit(onSubmit) }, /* @__PURE__ */ React15__namespace.createElement("div", { className: "space-y-4 p-4" }, (component.inputs || []).map((input) => /* @__PURE__ */ React15__namespace.createElement(
811
- FormField,
812
- {
813
- key: input.name,
814
- control: form.control,
815
- name: input.name,
816
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(RenderInput, { type: input.type, input, field })
817
- }
818
- )))));
819
- };
820
- var spacingSchema = zod.z.discriminatedUnion("indipendent", [
821
- zod.z.object({
822
- indipendent: zod.z.literal(false),
823
- horizontal: zod.z.coerce.number(),
824
- vertical: zod.z.coerce.number()
825
- }),
826
- zod.z.object({
827
- indipendent: zod.z.literal(true),
828
- left: zod.z.coerce.number(),
829
- right: zod.z.coerce.number(),
830
- top: zod.z.coerce.number(),
831
- bottom: zod.z.coerce.number()
832
- })
833
- ]);
834
- var designSchema = zod.z.object({
835
- container: zod.z.boolean(),
836
- background: zod.z.string(),
837
- color: zod.z.string(),
838
- padding: spacingSchema,
839
- margin: spacingSchema
840
- });
841
- var ItemDesignForm = (props) => {
842
- const { item } = props;
843
- const { patchItem } = chunkAAKS5YHL_js.useBuilder();
844
- const initialPadding = chunkAAKS5YHL_js.spacing.parse(item.styles?.padding ?? "");
845
- const initialMargin = chunkAAKS5YHL_js.spacing.parse(item.styles?.margin ?? "");
846
- const form = reactHookForm.useForm({
847
- resolver: zod$1.zodResolver(designSchema),
848
- defaultValues: {
849
- container: item.styles?.container ?? true,
850
- background: item.styles?.background ?? "",
851
- color: item.styles?.color ?? "",
852
- padding: {
853
- indipendent: chunkAAKS5YHL_js.spacing.isIndipendent(
854
- item.styles?.padding ?? ""
855
- ),
856
- horizontal: initialPadding.left,
857
- vertical: initialPadding.top,
858
- left: initialPadding.left,
859
- right: initialPadding.right,
860
- top: initialPadding.top,
861
- bottom: initialPadding.bottom
862
- },
863
- margin: {
864
- indipendent: chunkAAKS5YHL_js.spacing.isIndipendent(
865
- item.styles?.margin ?? ""
866
- ),
867
- horizontal: initialMargin.left,
868
- vertical: initialMargin.top,
869
- left: initialMargin.left,
870
- right: initialMargin.right,
871
- top: initialMargin.top,
872
- bottom: initialMargin.bottom
873
- }
874
- }
875
- });
876
- console.log("ERRORS", form.formState.errors);
877
- console.log("VALUES", form.getValues());
878
- const onSubmit = (values) => {
879
- const { container, background, color, padding: p, margin: m } = values;
880
- const padding = !p.indipendent ? `${p.vertical}px ${p.horizontal}px` : `${p.top}px ${p.right}px ${p.bottom}px ${p.left}px`;
881
- const margin = !m.indipendent ? `${m.vertical}px ${m.horizontal}px` : `${m.top}px ${m.right}px ${m.bottom}px ${m.left}px`;
882
- console.log("CALLING_PATCH_ITEM", "ITEM_ID: " + item.id);
883
- patchItem(item.id, {
884
- styles: {
885
- container,
886
- background,
887
- color,
888
- padding,
889
- margin
890
- }
891
- });
892
- };
893
- React15__namespace.useEffect(() => {
894
- const subscription = form.watch(() => form.handleSubmit(onSubmit)());
895
- return () => subscription.unsubscribe();
896
- }, [form.watch, form.handleSubmit]);
897
- const [indipendentPadding, indipendentMargin] = form.watch([
898
- "padding.indipendent",
899
- "margin.indipendent"
900
- ]);
901
- return /* @__PURE__ */ React15__namespace.createElement(Form, { ...form }, /* @__PURE__ */ React15__namespace.createElement("form", { onSubmit: form.handleSubmit(onSubmit) }, /* @__PURE__ */ React15__namespace.createElement("div", { className: "space-y-4 p-4" }, /* @__PURE__ */ React15__namespace.createElement(
902
- FormField,
903
- {
904
- control: form.control,
905
- name: "background",
906
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, "Achtergrond"), /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
907
- BackgroundPicker,
908
- {
909
- background: field.value,
910
- onBackgroundChange: field.onChange
911
- }
912
- )), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null))
913
- }
914
- ), /* @__PURE__ */ React15__namespace.createElement(
915
- FormField,
916
- {
917
- control: form.control,
918
- name: "color",
919
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, "Inhoud kleur"), /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
920
- ColorPicker,
921
- {
922
- color: field.value,
923
- onColorChange: field.onChange
924
- }
925
- )), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null))
926
- }
927
- ), /* @__PURE__ */ React15__namespace.createElement("hr", null), /* @__PURE__ */ React15__namespace.createElement(
928
- FormField,
929
- {
930
- control: form.control,
931
- name: "container",
932
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, { className: "flex flex-row items-center justify-between space-y-0" }, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, "Volledige breedte"), /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
933
- Switch,
934
- {
935
- checked: !field.value,
936
- onCheckedChange: (v) => field.onChange(!v)
937
- }
938
- )), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null))
939
- }
940
- ), /* @__PURE__ */ React15__namespace.createElement("hr", null), /* @__PURE__ */ React15__namespace.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, "Padding"), /* @__PURE__ */ React15__namespace.createElement("div", { className: "grid grid-cols-[1fr,auto] gap-3" }, /* @__PURE__ */ React15__namespace.createElement("div", { className: "grid grid-cols-2 items-center gap-3" }, !indipendentPadding ? /* @__PURE__ */ React15__namespace.createElement(React15__namespace.Fragment, null, /* @__PURE__ */ React15__namespace.createElement(
941
- FormField,
942
- {
943
- control: form.control,
944
- name: "padding.horizontal",
945
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
946
- AdvancedInput,
947
- {
948
- ...field,
949
- prepend: /* @__PURE__ */ React15__namespace.createElement(lucideReact.AlignHorizontalSpaceAroundIcon, { className: "h-4 w-4" }),
950
- append: /* @__PURE__ */ React15__namespace.createElement("span", { className: "text-sb-muted-sb-foreground" }, "px")
951
- }
952
- )))
953
- }
954
- ), /* @__PURE__ */ React15__namespace.createElement(
955
- FormField,
956
- {
957
- control: form.control,
958
- name: "padding.vertical",
959
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
960
- AdvancedInput,
961
- {
962
- ...field,
963
- prepend: /* @__PURE__ */ React15__namespace.createElement(lucideReact.AlignHorizontalSpaceAroundIcon, { className: "h-4 w-4 rotate-90" }),
964
- append: /* @__PURE__ */ React15__namespace.createElement("span", { className: "text-sb-muted-sb-foreground" }, "px")
965
- }
966
- )))
967
- }
968
- )) : /* @__PURE__ */ React15__namespace.createElement(React15__namespace.Fragment, null, /* @__PURE__ */ React15__namespace.createElement(
969
- FormField,
970
- {
971
- control: form.control,
972
- name: "padding.left",
973
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
974
- AdvancedInput,
975
- {
976
- ...field,
977
- prepend: /* @__PURE__ */ React15__namespace.createElement(lucideReact.AlignHorizontalJustifyStartIcon, { className: "h-4 w-4" }),
978
- append: /* @__PURE__ */ React15__namespace.createElement("span", { className: "text-sb-muted-sb-foreground" }, "px")
979
- }
980
- )))
981
- }
982
- ), /* @__PURE__ */ React15__namespace.createElement(
983
- FormField,
984
- {
985
- control: form.control,
986
- name: "padding.top",
987
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
988
- AdvancedInput,
989
- {
990
- ...field,
991
- prepend: /* @__PURE__ */ React15__namespace.createElement(lucideReact.AlignHorizontalJustifyStartIcon, { className: "h-4 w-4 rotate-90" }),
992
- append: /* @__PURE__ */ React15__namespace.createElement("span", { className: "text-sb-muted-sb-foreground" }, "px")
993
- }
994
- )))
995
- }
996
- ), /* @__PURE__ */ React15__namespace.createElement(
997
- FormField,
998
- {
999
- control: form.control,
1000
- name: "padding.right",
1001
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
1002
- AdvancedInput,
1003
- {
1004
- ...field,
1005
- prepend: /* @__PURE__ */ React15__namespace.createElement(lucideReact.AlignHorizontalJustifyStartIcon, { className: "h-4 w-4 rotate-180" }),
1006
- append: /* @__PURE__ */ React15__namespace.createElement("span", { className: "text-sb-muted-sb-foreground" }, "px")
1007
- }
1008
- )))
1009
- }
1010
- ), /* @__PURE__ */ React15__namespace.createElement(
1011
- FormField,
1012
- {
1013
- control: form.control,
1014
- name: "padding.bottom",
1015
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
1016
- AdvancedInput,
1017
- {
1018
- ...field,
1019
- prepend: /* @__PURE__ */ React15__namespace.createElement(lucideReact.AlignHorizontalJustifyStartIcon, { className: "h-4 w-4 -rotate-90" }),
1020
- append: /* @__PURE__ */ React15__namespace.createElement("span", { className: "text-sb-muted-sb-foreground" }, "px")
1021
- }
1022
- )))
1023
- }
1024
- ))), /* @__PURE__ */ React15__namespace.createElement("div", { className: "shrink-0" }, /* @__PURE__ */ React15__namespace.createElement(
1025
- FormField,
1026
- {
1027
- control: form.control,
1028
- name: "padding.indipendent",
1029
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
1030
- Toggle,
1031
- {
1032
- className: "shrink-0 flex w-8 h-8 p-0",
1033
- variant: "outline",
1034
- size: "sm",
1035
- pressed: field.value,
1036
- onPressedChange: field.onChange
1037
- },
1038
- /* @__PURE__ */ React15__namespace.createElement(lucideReact.ScanIcon, { className: "h-4 w-4" })
1039
- ))
1040
- }
1041
- ))), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null)), /* @__PURE__ */ React15__namespace.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, "Margin"), /* @__PURE__ */ React15__namespace.createElement("div", { className: "grid grid-cols-[1fr,auto] gap-3" }, /* @__PURE__ */ React15__namespace.createElement("div", { className: "grid grid-cols-2 items-center gap-3" }, !indipendentMargin ? /* @__PURE__ */ React15__namespace.createElement(React15__namespace.Fragment, null, /* @__PURE__ */ React15__namespace.createElement(
1042
- FormField,
1043
- {
1044
- control: form.control,
1045
- name: "margin.horizontal",
1046
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
1047
- AdvancedInput,
1048
- {
1049
- ...field,
1050
- prepend: /* @__PURE__ */ React15__namespace.createElement(lucideReact.AlignHorizontalSpaceAroundIcon, { className: "h-4 w-4" }),
1051
- append: /* @__PURE__ */ React15__namespace.createElement("span", { className: "text-sb-muted-sb-foreground" }, "px")
1052
- }
1053
- )))
1054
- }
1055
- ), /* @__PURE__ */ React15__namespace.createElement(
1056
- FormField,
1057
- {
1058
- control: form.control,
1059
- name: "margin.vertical",
1060
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
1061
- AdvancedInput,
1062
- {
1063
- ...field,
1064
- prepend: /* @__PURE__ */ React15__namespace.createElement(lucideReact.AlignHorizontalSpaceAroundIcon, { className: "h-4 w-4 rotate-90" }),
1065
- append: /* @__PURE__ */ React15__namespace.createElement("span", { className: "text-sb-muted-sb-foreground" }, "px")
1066
- }
1067
- )))
1068
- }
1069
- )) : /* @__PURE__ */ React15__namespace.createElement(React15__namespace.Fragment, null, /* @__PURE__ */ React15__namespace.createElement(
1070
- FormField,
1071
- {
1072
- control: form.control,
1073
- name: "margin.left",
1074
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
1075
- AdvancedInput,
1076
- {
1077
- ...field,
1078
- prepend: /* @__PURE__ */ React15__namespace.createElement(lucideReact.AlignHorizontalJustifyStartIcon, { className: "h-4 w-4" }),
1079
- append: /* @__PURE__ */ React15__namespace.createElement("span", { className: "text-sb-muted-sb-foreground" }, "px")
1080
- }
1081
- )))
1082
- }
1083
- ), /* @__PURE__ */ React15__namespace.createElement(
1084
- FormField,
1085
- {
1086
- control: form.control,
1087
- name: "margin.top",
1088
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
1089
- AdvancedInput,
1090
- {
1091
- ...field,
1092
- prepend: /* @__PURE__ */ React15__namespace.createElement(lucideReact.AlignHorizontalJustifyStartIcon, { className: "h-4 w-4 rotate-90" }),
1093
- append: /* @__PURE__ */ React15__namespace.createElement("span", { className: "text-sb-muted-sb-foreground" }, "px")
1094
- }
1095
- )))
1096
- }
1097
- ), /* @__PURE__ */ React15__namespace.createElement(
1098
- FormField,
1099
- {
1100
- control: form.control,
1101
- name: "margin.right",
1102
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
1103
- AdvancedInput,
1104
- {
1105
- ...field,
1106
- prepend: /* @__PURE__ */ React15__namespace.createElement(lucideReact.AlignHorizontalJustifyStartIcon, { className: "h-4 w-4 rotate-180" }),
1107
- append: /* @__PURE__ */ React15__namespace.createElement("span", { className: "text-sb-muted-sb-foreground" }, "px")
1108
- }
1109
- )))
1110
- }
1111
- ), /* @__PURE__ */ React15__namespace.createElement(
1112
- FormField,
1113
- {
1114
- control: form.control,
1115
- name: "margin.bottom",
1116
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
1117
- AdvancedInput,
1118
- {
1119
- ...field,
1120
- prepend: /* @__PURE__ */ React15__namespace.createElement(lucideReact.AlignHorizontalJustifyStartIcon, { className: "h-4 w-4 -rotate-90" }),
1121
- append: /* @__PURE__ */ React15__namespace.createElement("span", { className: "text-sb-muted-sb-foreground" }, "px")
1122
- }
1123
- )))
1124
- }
1125
- ))), /* @__PURE__ */ React15__namespace.createElement("div", { className: "shrink-0" }, /* @__PURE__ */ React15__namespace.createElement(
1126
- FormField,
1127
- {
1128
- control: form.control,
1129
- name: "margin.indipendent",
1130
- render: ({ field }) => /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
1131
- Toggle,
1132
- {
1133
- className: "shrink-0 flex w-8 h-8 p-0",
1134
- variant: "outline",
1135
- size: "sm",
1136
- pressed: field.value,
1137
- onPressedChange: field.onChange
1138
- },
1139
- /* @__PURE__ */ React15__namespace.createElement(lucideReact.ScanIcon, { className: "h-4 w-4" })
1140
- ))
1141
- }
1142
- ))), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null)))));
1143
- };
1144
- var RenderInput = (props) => {
1145
- const { type, input, field } = props;
1146
- switch (type) {
1147
- case "string":
1148
- return /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, input.friendlyName || input.name), /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(Input, { ...field })), input.helperText && /* @__PURE__ */ React15__namespace.createElement(FormDescription, null, input.helperText), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null));
1149
- case "longText":
1150
- return /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, input.friendlyName || input.name), /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(Textarea, { ...field })), input.helperText && /* @__PURE__ */ React15__namespace.createElement(FormDescription, null, input.helperText), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null));
1151
- case "richText":
1152
- return /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, input.friendlyName || input.name), /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(Textarea, { ...field })), input.helperText && /* @__PURE__ */ React15__namespace.createElement(FormDescription, null, input.helperText), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null));
1153
- case "number":
1154
- return /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, input.friendlyName || input.name), /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(Input, { type: "number", ...field })), input.helperText && /* @__PURE__ */ React15__namespace.createElement(FormDescription, null, input.helperText), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null));
1155
- case "color":
1156
- return /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, input.friendlyName || input.name), /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(ColorPicker, { color: field.value, onColorChange: field.onChange })), input.helperText && /* @__PURE__ */ React15__namespace.createElement(FormDescription, null, input.helperText), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null));
1157
- case "date":
1158
- return /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, input.friendlyName || input.name), /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(Popover, null, /* @__PURE__ */ React15__namespace.createElement(PopoverTrigger, { asChild: true }, /* @__PURE__ */ React15__namespace.createElement(
1159
- chunkAAKS5YHL_js.Button,
1160
- {
1161
- variant: "outline",
1162
- size: "sm",
1163
- className: chunkAAKS5YHL_js.cn(
1164
- "w-full flex justify-start text-left font-normal",
1165
- !field.value && "text-muted-foreground"
1166
- )
1167
- },
1168
- /* @__PURE__ */ React15__namespace.createElement(lucideReact.CalendarIcon, { className: "mr-2 h-4 w-4" }),
1169
- field.value ? dateFns.format(field.value, "PPP") : /* @__PURE__ */ React15__namespace.createElement("span", null, "Pick a date")
1170
- )), /* @__PURE__ */ React15__namespace.createElement(PopoverContent, { className: "w-auto p-0", align: "start" }, /* @__PURE__ */ React15__namespace.createElement(
1171
- Calendar,
1172
- {
1173
- mode: "single",
1174
- selected: field.value,
1175
- onSelect: field.onChange,
1176
- initialFocus: true
1177
- }
1178
- )))), input.helperText && /* @__PURE__ */ React15__namespace.createElement(FormDescription, null, input.helperText), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null));
1179
- case "boolean":
1180
- return /* @__PURE__ */ React15__namespace.createElement(FormItem, { className: "flex flex-row items-center justify-between space-y-0" }, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, input.friendlyName || input.name), /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(Switch, { checked: field.value, onCheckedChange: field.onChange })), input.helperText && /* @__PURE__ */ React15__namespace.createElement(FormDescription, null, input.helperText), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null));
1181
- case "file":
1182
- return /* @__PURE__ */ React15__namespace.createElement(FormItem, null, /* @__PURE__ */ React15__namespace.createElement(FormLabel, null, input.friendlyName || input.name), /* @__PURE__ */ React15__namespace.createElement(FormControl, null, /* @__PURE__ */ React15__namespace.createElement(
1183
- MediaInput,
1184
- {
1185
- className: "grid grid-cols-2 gap-1",
1186
- itemClassName: "aspect-video h-auto w-full",
1187
- multiple: false,
1188
- onFilesChange: (files) => field.onChange(files[0]),
1189
- onError: (e) => console.error(
1190
- "[media-input]: Title: " + e?.title,
1191
- "media-input: Error: " + e?.description
1192
- )
1193
- }
1194
- )), input.helperText && /* @__PURE__ */ React15__namespace.createElement(FormDescription, null, input.helperText), /* @__PURE__ */ React15__namespace.createElement(FormMessage, null));
1195
- default:
1196
- throw new Error(
1197
- `[simple-builder]: Input type "${props.type}" not supported`
1198
- );
1199
- }
1200
- };
1201
- var DeleteButton = ({ contentId }) => {
1202
- const { deleteContent } = chunkAAKS5YHL_js.useBuilder();
1203
- return /* @__PURE__ */ React15__namespace.createElement(AlertDialog, null, /* @__PURE__ */ React15__namespace.createElement(AlertDialogTrigger, { asChild: true }, /* @__PURE__ */ React15__namespace.createElement(chunkAAKS5YHL_js.Button, { variant: "ghost", className: "w-8 h-8 p-0 text-sb-destructive" }, /* @__PURE__ */ React15__namespace.createElement(lucideReact.Trash2Icon, { className: "h-5 w-5" }))), /* @__PURE__ */ React15__namespace.createElement(AlertDialogContent, null, /* @__PURE__ */ React15__namespace.createElement(AlertDialogDescription, null, "Weet je zeker dat je dit blok wilt verwijderen?"), /* @__PURE__ */ React15__namespace.createElement(AlertDialogFooter, null, /* @__PURE__ */ React15__namespace.createElement(AlertDialogCancel, null, "Annuleren"), /* @__PURE__ */ React15__namespace.createElement(
1204
- AlertDialogAction,
1205
- {
1206
- className: chunkAAKS5YHL_js.buttonVariants({ variant: "destructive" }),
1207
- onClick: () => deleteContent(contentId)
1208
- },
1209
- "Verwijderen"
1210
- ))));
1211
- };
1212
- var DesignWrapper = (props) => {
1213
- const { children, className, styles } = props;
1214
- const { container = true, background, ...rest } = styles || {};
1215
- const matches = typeof background === "string" ? background.match(/url\(["']?(.*?)["']?\)/) : void 0;
1216
- const src = matches ? matches[1] : void 0;
1217
- return /* @__PURE__ */ React15__namespace.createElement(
1218
- "div",
1219
- {
1220
- className: chunkAAKS5YHL_js.cn("relative", className),
1221
- style: { ...!src && { background }, ...rest }
1222
- },
1223
- src && /* @__PURE__ */ React15__namespace.createElement(
1224
- Image,
1225
- {
1226
- src,
1227
- alt: "",
1228
- fill: true,
1229
- className: "object-cover absolute inset-0 pointer-events-none -z-[1]"
1230
- }
1231
- ),
1232
- container ? /* @__PURE__ */ React15__namespace.createElement("div", { className: "container mx-auto" }, children) : children
1233
- );
1234
- };
1235
-
1236
- // src/components/build-container-client.tsx
1237
- var BuildContainerInner = (props) => {
1238
- const { id, name, content, multiple = false } = props;
1239
- const items = Array.isArray(content) ? content : content?.[name] || [];
1240
- if (!multiple && items.length > 1) {
1241
- console.error(
1242
- "[simple-builder]: Multiple content blocks detected when using property multiple false."
1243
- );
1244
- }
1245
- return /* @__PURE__ */ React15__namespace.createElement("div", null, items.length <= 0 ? /* @__PURE__ */ React15__namespace.createElement(AddContentPlaceholder, { parent: id, container: name, index: 0 }) : multiple && /* @__PURE__ */ React15__namespace.createElement(AddContentDividerButton, { parent: id, container: name, index: 0 }), items.map((item, i) => /* @__PURE__ */ React15__namespace.createElement(React15__namespace.Fragment, { key: item.id }, /* @__PURE__ */ React15__namespace.createElement("div", { className: "relative sb-container-item" }, /* @__PURE__ */ React15__namespace.createElement(DesignWrapper, { styles: item.styles }, chunkVMHWPKU4_js.builder.bindComponent(item, true)), /* @__PURE__ */ React15__namespace.createElement(
1246
- ContainerItemToolbar,
1247
- {
1248
- contentId: item.id,
1249
- canBringUp: i > 0,
1250
- canBringDown: i < items.length - 1
1251
- }
1252
- )), multiple && /* @__PURE__ */ React15__namespace.createElement(
1253
- AddContentDividerButton,
1254
- {
1255
- parent: id,
1256
- container: name,
1257
- index: i + 1
1258
- }
1259
- ))));
1260
- };
1261
- var build_container_client_default = BuildContainerInner;
1262
- var AddContentButton = (props) => {
1263
- const components = chunkVMHWPKU4_js.builder.getComponents();
1264
- const { addContent } = chunkAAKS5YHL_js.useBuilder();
1265
- return /* @__PURE__ */ React15__namespace.createElement(Popover, null, /* @__PURE__ */ React15__namespace.createElement(PopoverTrigger, { asChild: true }, props.children), /* @__PURE__ */ React15__namespace.createElement(PopoverContent, { className: "p-1" }, /* @__PURE__ */ React15__namespace.createElement("div", { className: "grid grid-cols-2 gap-2" }, components.map((component) => {
1266
- const Icon = component.icon ?? lucideReact.ImageIcon;
1267
- return /* @__PURE__ */ React15__namespace.createElement(PopoverClose, { key: component.name, asChild: true }, /* @__PURE__ */ React15__namespace.createElement(
1268
- chunkAAKS5YHL_js.Button,
1269
- {
1270
- variant: "ghost",
1271
- className: "justify-start",
1272
- onClick: () => {
1273
- addContent(
1274
- component.name,
1275
- props.container,
1276
- props.parent,
1277
- props.index
1278
- );
1279
- }
1280
- },
1281
- /* @__PURE__ */ React15__namespace.createElement(Icon, { className: "mr-2 h-4 w-4 shrink-0" }),
1282
- component.friendlyName ?? component.name
1283
- ));
1284
- }))));
1285
- };
1286
- var AddContentPlaceholder = (props) => {
1287
- return /* @__PURE__ */ React15__namespace.createElement(AddContentButton, { ...props }, /* @__PURE__ */ React15__namespace.createElement("div", { className: "flex justify-center bg-sb-primary/50 p-4" }, /* @__PURE__ */ React15__namespace.createElement(chunkAAKS5YHL_js.Button, { size: "sm" }, /* @__PURE__ */ React15__namespace.createElement(lucideReact.PlusIcon, { className: "mr-2 h-4 w-4" }), "Blok Toevoegen")));
1288
- };
1289
- var AddContentDividerButton = (props) => {
1290
- return /* @__PURE__ */ React15__namespace.createElement(AddContentButton, { ...props }, /* @__PURE__ */ React15__namespace.createElement("div", { className: "w-full h-1 -my-[2px] bg-sb-primary relative z-20 opacity-0 add-content-divider-button transition-opacity" }, /* @__PURE__ */ React15__namespace.createElement(
1291
- chunkAAKS5YHL_js.Button,
1292
- {
1293
- size: "sm",
1294
- className: "absolute left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2 shadow"
1295
- },
1296
- /* @__PURE__ */ React15__namespace.createElement(lucideReact.PlusIcon, { className: "mr-2 h-4 w-4" }),
1297
- "Blok Toevoegen"
1298
- )));
1299
- };
1300
-
1301
- exports.BuildContainerInner = BuildContainerInner;
1302
- exports.default = build_container_client_default;