@opensite/ui 2.1.2 → 2.1.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,12 +1,10 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var React = require('react');
4
+ var React3 = require('react');
5
5
  var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
- var classVarianceAuthority = require('class-variance-authority');
8
7
  var jsxRuntime = require('react/jsx-runtime');
9
- var forms = require('@page-speed/forms');
10
8
  var integration = require('@page-speed/forms/integration');
11
9
 
12
10
  function _interopNamespace(e) {
@@ -27,430 +25,12 @@ function _interopNamespace(e) {
27
25
  return Object.freeze(n);
28
26
  }
29
27
 
30
- var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
+ var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
31
29
 
32
30
  // components/blocks/hero/hero-newsletter-minimal.tsx
33
31
  function cn(...inputs) {
34
32
  return tailwindMerge.twMerge(clsx.clsx(inputs));
35
33
  }
36
- function normalizePhoneNumber(input) {
37
- const trimmed = input.trim();
38
- if (trimmed.toLowerCase().startsWith("tel:")) {
39
- return trimmed;
40
- }
41
- const match = trimmed.match(/^[\s\+\-\(\)]*(\d[\d\s\-\(\)\.]*\d)[\s\-]*(x|ext\.?|extension)?[\s\-]*(\d+)?$/i);
42
- if (match) {
43
- const mainNumber = match[1].replace(/[\s\-\(\)\.]/g, "");
44
- const extension = match[3];
45
- const normalized = mainNumber.length >= 10 && !trimmed.startsWith("+") ? `+${mainNumber}` : mainNumber;
46
- const withExtension = extension ? `${normalized};ext=${extension}` : normalized;
47
- return `tel:${withExtension}`;
48
- }
49
- const cleaned = trimmed.replace(/[\s\-\(\)\.]/g, "");
50
- return `tel:${cleaned}`;
51
- }
52
- function normalizeEmail(input) {
53
- const trimmed = input.trim();
54
- if (trimmed.toLowerCase().startsWith("mailto:")) {
55
- return trimmed;
56
- }
57
- return `mailto:${trimmed}`;
58
- }
59
- function isEmail(input) {
60
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
61
- return emailRegex.test(input.trim());
62
- }
63
- function isPhoneNumber(input) {
64
- const trimmed = input.trim();
65
- if (trimmed.toLowerCase().startsWith("tel:")) {
66
- return true;
67
- }
68
- const phoneRegex = /^[\s\+\-\(\)]*\d[\d\s\-\(\)\.]*\d[\s\-]*(x|ext\.?|extension)?[\s\-]*\d*$/i;
69
- return phoneRegex.test(trimmed);
70
- }
71
- function isInternalUrl(href) {
72
- if (typeof window === "undefined") {
73
- return href.startsWith("/") && !href.startsWith("//");
74
- }
75
- const trimmed = href.trim();
76
- if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
77
- return true;
78
- }
79
- try {
80
- const url = new URL(trimmed, window.location.href);
81
- const currentOrigin = window.location.origin;
82
- const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
83
- return normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin);
84
- } catch {
85
- return false;
86
- }
87
- }
88
- function toRelativePath(href) {
89
- if (typeof window === "undefined") {
90
- return href;
91
- }
92
- const trimmed = href.trim();
93
- if (trimmed.startsWith("/") && !trimmed.startsWith("//")) {
94
- return trimmed;
95
- }
96
- try {
97
- const url = new URL(trimmed, window.location.href);
98
- const currentOrigin = window.location.origin;
99
- const normalizeOrigin = (origin) => origin.replace(/^(https?:\/\/)(www\.)?/, "$1");
100
- if (normalizeOrigin(url.origin) === normalizeOrigin(currentOrigin)) {
101
- return url.pathname + url.search + url.hash;
102
- }
103
- } catch {
104
- }
105
- return trimmed;
106
- }
107
- function useNavigation({
108
- href,
109
- onClick
110
- } = {}) {
111
- const linkType = React__namespace.useMemo(() => {
112
- if (!href || href.trim() === "") {
113
- return onClick ? "none" : "none";
114
- }
115
- const trimmed = href.trim();
116
- if (trimmed.toLowerCase().startsWith("mailto:") || isEmail(trimmed)) {
117
- return "mailto";
118
- }
119
- if (trimmed.toLowerCase().startsWith("tel:") || isPhoneNumber(trimmed)) {
120
- return "tel";
121
- }
122
- if (isInternalUrl(trimmed)) {
123
- return "internal";
124
- }
125
- try {
126
- new URL(trimmed, typeof window !== "undefined" ? window.location.href : "http://localhost");
127
- return "external";
128
- } catch {
129
- return "internal";
130
- }
131
- }, [href, onClick]);
132
- const normalizedHref = React__namespace.useMemo(() => {
133
- if (!href || href.trim() === "") {
134
- return void 0;
135
- }
136
- const trimmed = href.trim();
137
- switch (linkType) {
138
- case "tel":
139
- return normalizePhoneNumber(trimmed);
140
- case "mailto":
141
- return normalizeEmail(trimmed);
142
- case "internal":
143
- return toRelativePath(trimmed);
144
- case "external":
145
- return trimmed;
146
- default:
147
- return trimmed;
148
- }
149
- }, [href, linkType]);
150
- const target = React__namespace.useMemo(() => {
151
- switch (linkType) {
152
- case "external":
153
- return "_blank";
154
- case "internal":
155
- return "_self";
156
- case "mailto":
157
- case "tel":
158
- return void 0;
159
- default:
160
- return void 0;
161
- }
162
- }, [linkType]);
163
- const rel = React__namespace.useMemo(() => {
164
- if (linkType === "external") {
165
- return "noopener noreferrer";
166
- }
167
- return void 0;
168
- }, [linkType]);
169
- const isExternal = linkType === "external";
170
- const isInternal = linkType === "internal";
171
- const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
172
- const handleClick = React__namespace.useCallback(
173
- (event) => {
174
- if (onClick) {
175
- try {
176
- onClick(event);
177
- } catch (error) {
178
- console.error("Error in user onClick handler:", error);
179
- }
180
- }
181
- if (event.defaultPrevented) {
182
- return;
183
- }
184
- if (shouldUseRouter && normalizedHref && event.button === 0 && // left-click only
185
- !event.metaKey && !event.altKey && !event.ctrlKey && !event.shiftKey) {
186
- if (typeof window !== "undefined") {
187
- const handler = window.__opensiteNavigationHandler;
188
- if (typeof handler === "function") {
189
- try {
190
- const handled = handler(normalizedHref, event.nativeEvent || event);
191
- if (handled !== false) {
192
- event.preventDefault();
193
- }
194
- } catch (error) {
195
- console.error("Error in navigation handler:", error);
196
- }
197
- }
198
- }
199
- }
200
- },
201
- [onClick, shouldUseRouter, normalizedHref]
202
- );
203
- return {
204
- linkType,
205
- normalizedHref,
206
- target,
207
- rel,
208
- isExternal,
209
- isInternal,
210
- shouldUseRouter,
211
- handleClick
212
- };
213
- }
214
- var baseStyles = [
215
- // Layout
216
- "inline-flex items-center justify-center gap-2 whitespace-nowrap shrink-0",
217
- // Typography - using CSS variables with sensible defaults
218
- "font-[var(--button-font-family,inherit)]",
219
- "font-[var(--button-font-weight,500)]",
220
- "tracking-[var(--button-letter-spacing,0)]",
221
- "leading-[var(--button-line-height,1.25)]",
222
- "[text-transform:var(--button-text-transform,none)]",
223
- "text-sm",
224
- // Border radius
225
- "rounded-[var(--button-radius,var(--radius,0.375rem))]",
226
- // Smooth transition - using [transition:...] to set full shorthand property (not just transition-property)
227
- "[transition:var(--button-transition,all_250ms_cubic-bezier(0.4,0,0.2,1))]",
228
- // Box shadow (master level) - using [box-shadow:...] for complex multi-value shadows
229
- "[box-shadow:var(--button-shadow,none)]",
230
- "hover:[box-shadow:var(--button-shadow-hover,var(--button-shadow,none))]",
231
- // Disabled state
232
- "disabled:pointer-events-none disabled:opacity-50",
233
- // SVG handling
234
- "[&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0",
235
- // Focus styles
236
- "outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
237
- // Invalid state
238
- "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive"
239
- ].join(" ");
240
- var buttonVariants = classVarianceAuthority.cva(baseStyles, {
241
- variants: {
242
- variant: {
243
- // Default (Primary) variant - full customization
244
- default: [
245
- "bg-[var(--button-default-bg,hsl(var(--primary)))]",
246
- "text-[var(--button-default-fg,hsl(var(--primary-foreground)))]",
247
- "border-[length:var(--button-default-border-width,0px)]",
248
- "border-[color:var(--button-default-border,transparent)]",
249
- "[box-shadow:var(--button-default-shadow,var(--button-shadow,none))]",
250
- "hover:bg-[var(--button-default-hover-bg,hsl(var(--primary)/0.9))]",
251
- "hover:text-[var(--button-default-hover-fg,var(--button-default-fg,hsl(var(--primary-foreground))))]",
252
- "hover:border-[color:var(--button-default-hover-border,var(--button-default-border,transparent))]",
253
- "hover:[box-shadow:var(--button-default-shadow-hover,var(--button-shadow-hover,var(--button-default-shadow,var(--button-shadow,none))))]"
254
- ].join(" "),
255
- // Destructive variant - full customization
256
- destructive: [
257
- "bg-[var(--button-destructive-bg,hsl(var(--destructive)))]",
258
- "text-[var(--button-destructive-fg,white)]",
259
- "border-[length:var(--button-destructive-border-width,0px)]",
260
- "border-[color:var(--button-destructive-border,transparent)]",
261
- "[box-shadow:var(--button-destructive-shadow,var(--button-shadow,none))]",
262
- "hover:bg-[var(--button-destructive-hover-bg,hsl(var(--destructive)/0.9))]",
263
- "hover:text-[var(--button-destructive-hover-fg,var(--button-destructive-fg,white))]",
264
- "hover:border-[color:var(--button-destructive-hover-border,var(--button-destructive-border,transparent))]",
265
- "hover:[box-shadow:var(--button-destructive-shadow-hover,var(--button-shadow-hover,var(--button-destructive-shadow,var(--button-shadow,none))))]",
266
- "focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
267
- "dark:bg-destructive/60"
268
- ].join(" "),
269
- // Outline variant - full customization with proper border handling
270
- outline: [
271
- "bg-[var(--button-outline-bg,hsl(var(--background)))]",
272
- "text-[var(--button-outline-fg,inherit)]",
273
- "border-[length:var(--button-outline-border-width,1px)]",
274
- "border-[color:var(--button-outline-border,hsl(var(--border)))]",
275
- "[box-shadow:var(--button-outline-shadow,var(--button-shadow,0_1px_2px_0_rgb(0_0_0/0.05)))]",
276
- "hover:bg-[var(--button-outline-hover-bg,hsl(var(--accent)))]",
277
- "hover:text-[var(--button-outline-hover-fg,hsl(var(--accent-foreground)))]",
278
- "hover:border-[color:var(--button-outline-hover-border,var(--button-outline-border,hsl(var(--border))))]",
279
- "hover:[box-shadow:var(--button-outline-shadow-hover,var(--button-shadow-hover,var(--button-outline-shadow,var(--button-shadow,none))))]",
280
- "dark:bg-input/30 dark:border-input dark:hover:bg-input/50"
281
- ].join(" "),
282
- // Secondary variant - full customization
283
- secondary: [
284
- "bg-[var(--button-secondary-bg,hsl(var(--secondary)))]",
285
- "text-[var(--button-secondary-fg,hsl(var(--secondary-foreground)))]",
286
- "border-[length:var(--button-secondary-border-width,0px)]",
287
- "border-[color:var(--button-secondary-border,transparent)]",
288
- "[box-shadow:var(--button-secondary-shadow,var(--button-shadow,none))]",
289
- "hover:bg-[var(--button-secondary-hover-bg,hsl(var(--secondary)/0.8))]",
290
- "hover:text-[var(--button-secondary-hover-fg,var(--button-secondary-fg,hsl(var(--secondary-foreground))))]",
291
- "hover:border-[color:var(--button-secondary-hover-border,var(--button-secondary-border,transparent))]",
292
- "hover:[box-shadow:var(--button-secondary-shadow-hover,var(--button-shadow-hover,var(--button-secondary-shadow,var(--button-shadow,none))))]"
293
- ].join(" "),
294
- // Ghost variant - full customization
295
- ghost: [
296
- "bg-[var(--button-ghost-bg,transparent)]",
297
- "text-[var(--button-ghost-fg,inherit)]",
298
- "border-[length:var(--button-ghost-border-width,0px)]",
299
- "border-[color:var(--button-ghost-border,transparent)]",
300
- "[box-shadow:var(--button-ghost-shadow,var(--button-shadow,none))]",
301
- "hover:bg-[var(--button-ghost-hover-bg,hsl(var(--accent)))]",
302
- "hover:text-[var(--button-ghost-hover-fg,hsl(var(--accent-foreground)))]",
303
- "hover:border-[color:var(--button-ghost-hover-border,var(--button-ghost-border,transparent))]",
304
- "hover:[box-shadow:var(--button-ghost-shadow-hover,var(--button-shadow-hover,var(--button-ghost-shadow,var(--button-shadow,none))))]",
305
- "dark:hover:bg-accent/50"
306
- ].join(" "),
307
- // Link variant - full customization
308
- link: [
309
- "bg-[var(--button-link-bg,transparent)]",
310
- "text-[var(--button-link-fg,hsl(var(--primary)))]",
311
- "border-[length:var(--button-link-border-width,0px)]",
312
- "border-[color:var(--button-link-border,transparent)]",
313
- "[box-shadow:var(--button-link-shadow,none)]",
314
- "hover:bg-[var(--button-link-hover-bg,transparent)]",
315
- "hover:text-[var(--button-link-hover-fg,var(--button-link-fg,hsl(var(--primary))))]",
316
- "hover:[box-shadow:var(--button-link-shadow-hover,none)]",
317
- "underline-offset-4 hover:underline"
318
- ].join(" ")
319
- },
320
- size: {
321
- default: [
322
- "h-[var(--button-height-md,2.25rem)]",
323
- "px-[var(--button-padding-x-md,1rem)]",
324
- "py-[var(--button-padding-y-md,0.5rem)]",
325
- "has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]"
326
- ].join(" "),
327
- sm: [
328
- "h-[var(--button-height-sm,2rem)]",
329
- "px-[var(--button-padding-x-sm,0.75rem)]",
330
- "py-[var(--button-padding-y-sm,0.25rem)]",
331
- "gap-1.5",
332
- "has-[>svg]:px-[calc(var(--button-padding-x-sm,0.75rem)*0.83)]"
333
- ].join(" "),
334
- md: [
335
- "h-[var(--button-height-md,2.25rem)]",
336
- "px-[var(--button-padding-x-md,1rem)]",
337
- "py-[var(--button-padding-y-md,0.5rem)]",
338
- "has-[>svg]:px-[calc(var(--button-padding-x-md,1rem)*0.75)]"
339
- ].join(" "),
340
- lg: [
341
- "h-[var(--button-height-lg,2.5rem)]",
342
- "px-[var(--button-padding-x-lg,1.5rem)]",
343
- "py-[var(--button-padding-y-lg,0.5rem)]",
344
- "has-[>svg]:px-[calc(var(--button-padding-x-lg,1.5rem)*0.67)]"
345
- ].join(" "),
346
- icon: "size-[var(--button-height-md,2.25rem)]",
347
- "icon-sm": "size-[var(--button-height-sm,2rem)]",
348
- "icon-lg": "size-[var(--button-height-lg,2.5rem)]"
349
- }
350
- },
351
- defaultVariants: {
352
- variant: "default",
353
- size: "default"
354
- }
355
- });
356
- var Pressable = React__namespace.forwardRef(
357
- ({
358
- children,
359
- className,
360
- href,
361
- onClick,
362
- variant,
363
- size,
364
- asButton = false,
365
- fallbackComponentType = "span",
366
- componentType,
367
- "aria-label": ariaLabel,
368
- "aria-describedby": ariaDescribedby,
369
- id,
370
- ...props
371
- }, ref) => {
372
- const navigation = useNavigation({ href, onClick });
373
- const {
374
- normalizedHref,
375
- target,
376
- rel,
377
- linkType,
378
- isInternal,
379
- handleClick
380
- } = navigation;
381
- const shouldRenderLink = normalizedHref && linkType !== "none";
382
- const shouldRenderButton = !shouldRenderLink && onClick;
383
- const effectiveComponentType = componentType || (shouldRenderLink ? "a" : shouldRenderButton ? "button" : fallbackComponentType);
384
- const finalComponentType = isInternal && shouldRenderLink ? "a" : effectiveComponentType;
385
- const shouldApplyButtonStyles = asButton || variant || size;
386
- const combinedClassName = cn(
387
- shouldApplyButtonStyles && buttonVariants({ variant, size }),
388
- className
389
- );
390
- const dataProps = Object.fromEntries(
391
- Object.entries(props).filter(([key]) => key.startsWith("data-"))
392
- );
393
- const buttonDataAttributes = shouldApplyButtonStyles ? {
394
- "data-slot": "button",
395
- "data-variant": variant ?? "default",
396
- "data-size": size ?? "default"
397
- } : {};
398
- const commonProps = {
399
- className: combinedClassName,
400
- onClick: handleClick,
401
- "aria-label": ariaLabel,
402
- "aria-describedby": ariaDescribedby,
403
- id,
404
- ...dataProps,
405
- ...buttonDataAttributes
406
- };
407
- if (finalComponentType === "a" && shouldRenderLink) {
408
- return /* @__PURE__ */ jsxRuntime.jsx(
409
- "a",
410
- {
411
- ref,
412
- href: normalizedHref,
413
- target,
414
- rel,
415
- ...commonProps,
416
- ...props,
417
- children
418
- }
419
- );
420
- }
421
- if (finalComponentType === "button") {
422
- return /* @__PURE__ */ jsxRuntime.jsx(
423
- "button",
424
- {
425
- ref,
426
- type: props.type || "button",
427
- ...commonProps,
428
- ...props,
429
- children
430
- }
431
- );
432
- }
433
- if (finalComponentType === "div") {
434
- return /* @__PURE__ */ jsxRuntime.jsx(
435
- "div",
436
- {
437
- ref,
438
- ...commonProps,
439
- children
440
- }
441
- );
442
- }
443
- return /* @__PURE__ */ jsxRuntime.jsx(
444
- "span",
445
- {
446
- ref,
447
- ...commonProps,
448
- children
449
- }
450
- );
451
- }
452
- );
453
- Pressable.displayName = "Pressable";
454
34
  var maxWidthStyles = {
455
35
  sm: "max-w-screen-sm",
456
36
  md: "max-w-screen-md",
@@ -460,7 +40,7 @@ var maxWidthStyles = {
460
40
  "4xl": "max-w-[1536px]",
461
41
  full: "max-w-full"
462
42
  };
463
- var Container = React__namespace.default.forwardRef(
43
+ var Container = React3__namespace.default.forwardRef(
464
44
  ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
465
45
  const Component = as;
466
46
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -765,7 +345,7 @@ var spacingStyles = {
765
345
  };
766
346
  var predefinedSpacings = ["none", "sm", "md", "lg", "xl"];
767
347
  var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
768
- var Section = React__namespace.default.forwardRef(
348
+ var Section = React3__namespace.default.forwardRef(
769
349
  ({
770
350
  id,
771
351
  title,
@@ -872,18 +452,7 @@ function HeroNewsletterMinimal({
872
452
  removeFile,
873
453
  resetUpload
874
454
  } = integration.useFileUpload({ onError });
875
- const { form, submissionError, formMethod, resetSubmissionState } = integration.useContactForm({
876
- formFields,
877
- formConfig,
878
- onSubmit,
879
- onSuccess: (data) => {
880
- resetUpload();
881
- onSuccess?.(data);
882
- },
883
- onError,
884
- uploadTokens
885
- });
886
- const renderStats = React__namespace.useMemo(() => {
455
+ const renderStats = React3__namespace.useMemo(() => {
887
456
  if (statsSlot) return statsSlot;
888
457
  if (!stats || stats.length === 0) return null;
889
458
  return stats.map((stat, index) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex items-center", stat.className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
@@ -909,81 +478,62 @@ function HeroNewsletterMinimal({
909
478
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("text-sm"), children: stat.label })
910
479
  ] }) }, index));
911
480
  }, [statsSlot, stats]);
912
- const renderForm = React__namespace.useMemo(() => {
481
+ const renderForm = React3__namespace.useMemo(() => {
913
482
  if (formSlot) return formSlot;
914
483
  const defaultButtonAction = {
915
484
  label: "Subscribe",
916
- variant: "default",
917
- className: "h-12"
485
+ variant: "default"
918
486
  };
919
487
  const action = buttonAction || defaultButtonAction;
920
- return /* @__PURE__ */ jsxRuntime.jsxs(
921
- forms.Form,
922
- {
923
- form,
924
- fields: formFields,
925
- notificationConfig: {
926
- submissionError,
927
- successMessage
928
- },
929
- formConfig: {
930
- endpoint: formConfig?.endpoint,
931
- method: formMethod,
932
- submissionConfig: formConfig?.submissionConfig,
933
- formLayout: "button-group",
934
- buttonGroupSize: "lg",
935
- submitLabel: action.label,
936
- submitVariant: action.variant || "default"
937
- },
938
- onNewSubmission: () => {
939
- resetUpload();
940
- resetSubmissionState();
941
- },
942
- children: [
943
- formFields.map((field) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
944
- integration.DynamicFormField,
945
- {
946
- field,
947
- uploadProgress,
948
- onFileUpload: uploadFiles,
949
- onFileRemove: removeFile,
950
- isUploading
951
- }
952
- ) }, field.name)),
953
- /* @__PURE__ */ jsxRuntime.jsxs(
954
- Pressable,
955
- {
956
- onClick: form.handleSubmit,
957
- asButton: true,
958
- variant: action.variant,
959
- className: cn("h-12", action.className),
960
- disabled: form.isSubmitting,
961
- children: [
488
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
489
+ /* @__PURE__ */ jsxRuntime.jsx(
490
+ integration.FormEngine,
491
+ {
492
+ api: formConfig,
493
+ fields: formFields,
494
+ formLayoutSettings: {
495
+ formLayout: "button-group",
496
+ buttonGroupSetup: {
497
+ size: "lg",
498
+ submitLabel: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
962
499
  action.label,
963
500
  action.iconAfter
964
- ]
501
+ ] }),
502
+ submitVariant: action.variant || "default"
965
503
  }
966
- ),
967
- helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm mt-2 text-center"), children: helperText }) : helperText)
968
- ]
969
- }
970
- );
504
+ },
505
+ successMessage,
506
+ onSubmit,
507
+ onSuccess: (data) => {
508
+ resetUpload();
509
+ onSuccess?.(data);
510
+ },
511
+ onError,
512
+ uploadTokens,
513
+ uploadProgress,
514
+ onFileUpload: uploadFiles,
515
+ onFileRemove: removeFile,
516
+ isUploading
517
+ }
518
+ ),
519
+ helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm mt-2 text-center"), children: helperText }) : helperText)
520
+ ] });
971
521
  }, [
972
522
  formSlot,
973
523
  formFields,
974
- form,
975
524
  formConfig,
976
- formMethod,
977
525
  buttonAction,
526
+ uploadTokens,
978
527
  uploadProgress,
979
528
  uploadFiles,
980
529
  removeFile,
981
530
  isUploading,
982
- submissionError,
983
531
  successMessage,
532
+ onSubmit,
533
+ onSuccess,
534
+ onError,
984
535
  helperText,
985
- resetUpload,
986
- resetSubmissionState
536
+ resetUpload
987
537
  ]);
988
538
  return /* @__PURE__ */ jsxRuntime.jsx(
989
539
  Section,