@levo-so/studio 0.1.95 → 0.1.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/{BillingStep-BLwl9IDQ.js → BillingStep-C3jJkLXQ.js} +1 -1
  2. package/{Button-C6BOkG_z.js → Button-CwN6jTXH.js} +1 -1
  3. package/CollectionField-DnbpB0Z5.js +254 -0
  4. package/CollectionInput-BoNAc4sq.js +132 -0
  5. package/DateTimeWidget-IRleQI-3.js +255 -0
  6. package/{EntryCard-B-feJvrB.js → EntryCard-xpo36vUc.js} +3 -3
  7. package/{LoginCard-CF9JbU-y.js → LoginCard-DG8NAN0B.js} +3 -3
  8. package/{LoginForm-CdpNCQJa.js → LoginForm-CPMtCyMF.js} +4 -0
  9. package/{LoginModal-ngTHCyli.js → LoginModal-BPI5tOIZ.js} +3 -3
  10. package/{MessageCard-D2uja800.js → MessageCard-BYxgc9dl.js} +2 -2
  11. package/{ModalManager-B7pCzvK1.js → ModalManager-BaIL6HG-.js} +1 -1
  12. package/{PendingApprovalCard-Dut-Xiw1.js → PendingApprovalCard-DID1FhwF.js} +3 -3
  13. package/PhoneWidget-CjhHfwuG.js +100 -0
  14. package/Popover-DHVZdJuv.js +56 -0
  15. package/RichTextWidget-CgT1_zC3.js +1135 -0
  16. package/Tooltip-ByJRyayB.js +78 -0
  17. package/VerifyButton-DFKzKYxC.js +283 -0
  18. package/{bookingCard-BU_MdmS9.js → bookingCard-Bw4tvDYh.js} +3 -3
  19. package/collection.d.ts +81 -46
  20. package/collection.js +8 -5
  21. package/dist-B7TPxn7o.js +3180 -0
  22. package/getFieldValidations-qVzuq6mv.js +195 -0
  23. package/index.d.ts +5 -5
  24. package/index.js +1229 -1434
  25. package/nodeAlignment-CG3qmAuQ.js +180 -0
  26. package/package.json +3 -4
  27. package/studio.css +1 -1
  28. package/theme.cssm-De_pl52g.js +4 -0
  29. package/{utils-KqbqLlMF.js → utils-F6eBcsyI.js} +1 -1
  30. package/widgets-Dvyv5_uj.js +215 -0
  31. package/dist-DDKHTnIW.js +0 -3653
  32. package/widgets-B84lq4lO.js +0 -351
  33. /package/{Beams-CCNNOvfW.js → Beams-Blr-zwvz.js} +0 -0
  34. /package/{Dots-89WGkd-z.js → Dots-DeBKuibU.js} +0 -0
  35. /package/{Gradient-vTa_uWCj.js → Gradient-DGFxOjft.js} +0 -0
  36. /package/{Grid-CrtztrxK.js → Grid-A7HRCQ0T.js} +0 -0
  37. /package/{MessageFooter-Bu-jyPkJ.js → MessageFooter-C6DivT4m.js} +0 -0
  38. /package/{StripePaymentModal-CajqohNM.js → StripePaymentModal-BcePXzmC.js} +0 -0
  39. /package/{Waves-BhA6CLEI.js → Waves-CIT6Ngng.js} +0 -0
  40. /package/{card-DCbhJCO9.js → card-izMd2DvE.js} +0 -0
  41. /package/{dialog-CILIXExr.js → dialog-CCWrvmHd.js} +0 -0
@@ -0,0 +1,195 @@
1
+ import { createContext as e, useContext as t, useEffect as n, useMemo as r, useRef as i } from "react";
2
+ import { jsx as a } from "react/jsx-runtime";
3
+ import { FieldInterfaces as o } from "@levo-so/core";
4
+ import { c as s } from "react/compiler-runtime";
5
+ import c from "clsx";
6
+ import { createRuntimeFn as l } from "@vanilla-extract/recipes/createRuntimeFn";
7
+ import { isValidPhoneNumber as u } from "react-phone-number-input";
8
+ import * as d from "yup";
9
+ //#region ../../libraries/levocn/dist/styles/reset.cssm.js
10
+ var f = "_1er5g5a0", p = /* @__PURE__ */ new Set(), m = {}, h = e(null), g = () => {
11
+ let e = s(1), n = t(h);
12
+ if (!n) {
13
+ let t;
14
+ return e[0] === Symbol.for("react.memo_cache_sentinel") ? (t = {
15
+ portalRef: { current: null },
16
+ classes: p,
17
+ overrides: m
18
+ }, e[0] = t) : t = e[0], t;
19
+ }
20
+ return n;
21
+ }, _ = ({ children: e, cssReset: o, className: s, style: l, ...u }) => {
22
+ let d = t(h), g = i(null), _ = !d && o !== !1 ? f : "", v = d?.classes ?? p, y = d?.overrides ?? m, b = r(() => {
23
+ let e = s ? s.split(/\s+/).filter(Boolean) : [], t = new Set(v);
24
+ for (let n of e) t.add(n);
25
+ return {
26
+ portalRef: g,
27
+ classes: t,
28
+ overrides: {
29
+ ...y,
30
+ ...l
31
+ }
32
+ };
33
+ }, [
34
+ v,
35
+ s,
36
+ y,
37
+ l
38
+ ]);
39
+ n(() => {
40
+ let e = document.createElement("div");
41
+ return document.body.appendChild(e), g.current = e, () => {
42
+ document.body.removeChild(e), g.current = null;
43
+ };
44
+ }, []), n(() => {
45
+ let e = g.current;
46
+ e && (e.className = c(_, ...b.classes), Object.assign(e.style, {
47
+ display: "contents",
48
+ ...b.overrides
49
+ }));
50
+ }, [
51
+ b.classes,
52
+ b.overrides,
53
+ _
54
+ ]);
55
+ let x = c(_, ...s ? s.split(/\s+/).filter((e) => e && !v.has(e)) : []);
56
+ return /* @__PURE__ */ a(h.Provider, {
57
+ value: b,
58
+ children: /* @__PURE__ */ a("div", {
59
+ className: x,
60
+ style: {
61
+ display: "contents",
62
+ ...l
63
+ },
64
+ ...u,
65
+ children: e
66
+ })
67
+ });
68
+ }, v = l({
69
+ defaultClassName: "_1a7d0ek1 _1a7d0ek0",
70
+ variantClassNames: {
71
+ variant: {
72
+ default: "_1a7d0ek2",
73
+ outline: "_1a7d0ek3",
74
+ secondary: "_1a7d0ek4",
75
+ ghost: "_1a7d0ek5",
76
+ destructive: "_1a7d0ek6",
77
+ link: "_1a7d0ek7"
78
+ },
79
+ size: {
80
+ default: "_1a7d0ek8",
81
+ xs: "_1a7d0ek9",
82
+ sm: "_1a7d0eka",
83
+ lg: "_1a7d0ekb",
84
+ icon: "_1a7d0ekc",
85
+ "icon-xs": "_1a7d0ekd",
86
+ "icon-sm": "_1a7d0eke",
87
+ "icon-lg": "_1a7d0ekf"
88
+ }
89
+ },
90
+ defaultVariants: {
91
+ variant: "default",
92
+ size: "default"
93
+ },
94
+ compoundVariants: []
95
+ }), y = (e) => {
96
+ let t = s(14), n, r, i, o, l;
97
+ t[0] === e ? (n = t[1], r = t[2], i = t[3], o = t[4], l = t[5]) : ({className: n, variant: l, size: i, type: o, ...r} = e, t[0] = e, t[1] = n, t[2] = r, t[3] = i, t[4] = o, t[5] = l);
98
+ let u = o === void 0 ? "button" : o, d;
99
+ t[6] !== n || t[7] !== i || t[8] !== l ? (d = c(v({
100
+ variant: l,
101
+ size: i
102
+ }), n), t[6] = n, t[7] = i, t[8] = l, t[9] = d) : d = t[9];
103
+ let f;
104
+ return t[10] !== r || t[11] !== d || t[12] !== u ? (f = /* @__PURE__ */ a("button", {
105
+ "data-slot": "button",
106
+ type: u,
107
+ className: d,
108
+ ...r
109
+ }), t[10] = r, t[11] = d, t[12] = u, t[13] = f) : f = t[13], f;
110
+ }, b = (e, t) => {
111
+ let n = (e?.label || e?.key || "")?.replace(/_/g, " ");
112
+ if (n?.endsWith("Id") && (n = n?.replace("Id", "")), n.includes(".")) {
113
+ let [e] = n.split(".");
114
+ e && (n = e);
115
+ }
116
+ let r = (t) => {
117
+ let r = t;
118
+ return e.max !== void 0 && e.max !== null && e.max !== "" && (r = r.max(Number(e.max), `The ${n} value is too large (max ${e.max})`)), e.min !== void 0 && e.min !== null && e.min !== "" && (r = r.min(Number(e.min), `The ${n} value is too small (min ${e.min})`)), r;
119
+ }, i;
120
+ switch (e.field_interface) {
121
+ case o.NumberWidget:
122
+ i = r(d.number());
123
+ break;
124
+ case o.ArrayWidget:
125
+ i = r(d.array().typeError("The field must be an array"));
126
+ break;
127
+ case o.RecordWidget:
128
+ i = d.object();
129
+ break;
130
+ case o.EmailWidget:
131
+ i = r(d.string().email("The email address is not valid"));
132
+ break;
133
+ case o.PhoneWidget:
134
+ i = r(d.string().test("phone", "The phone number has incorrect format", (e) => {
135
+ if (e) try {
136
+ return u(e);
137
+ } catch {
138
+ return !1;
139
+ }
140
+ return !0;
141
+ }));
142
+ break;
143
+ case o.URLWidget:
144
+ i = r(d.string().matches(/^(?:https?:\/\/)?(?:[a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+(?:\.[a-zA-Z]{2,})+(?:\/[^\s?#]*)?(?:\?[^\s]*)?$/, "The URL is not valid"));
145
+ break;
146
+ case o.ImageUploadWidget:
147
+ case o.FileUploadWidget:
148
+ case o.GeocoderWidget:
149
+ i = d.object();
150
+ break;
151
+ case o.MultiImageUploadWidget:
152
+ case o.MultiFileUploadWidget:
153
+ case o.MultiGeocoderWidget:
154
+ i = d.array().of(d.object());
155
+ break;
156
+ case o.JSONWidget:
157
+ case o.DropdownWidget:
158
+ i = d.string();
159
+ break;
160
+ case o.MultiTextWidget:
161
+ case o.MultiDropdownWidget:
162
+ case o.CheckboxWidget:
163
+ i = d.array().of(d.string());
164
+ break;
165
+ case o.ToggleCheckboxWidget:
166
+ i = d.boolean();
167
+ break;
168
+ case o.CollectionWidget:
169
+ i = e.options.current_have_many_connected ? d.array() : d.object();
170
+ break;
171
+ default:
172
+ i = r(d.string());
173
+ break;
174
+ }
175
+ if (e.options?.validationsPresets && Array.isArray(e.options.validationsPresets)) {
176
+ let t = e.options.validationsPresets;
177
+ (e.field_interface === o.TextWidget || e.field_interface === o.TextareaWidget) && (t.includes("exclude_special_chars") && (i = i.matches(/^[a-zA-Z0-9\s]*$/, "Special characters are not allowed")), t.includes("exclude_numbers") && (i = i.matches(/^[^0-9]*$/, "Numbers are not allowed")));
178
+ }
179
+ return {
180
+ required: {
181
+ value: !!e?.required,
182
+ message: `The ${n} field is required`
183
+ },
184
+ validate: (n) => {
185
+ if (e?.options?.disableValidation || n === "" || n == null) return !0;
186
+ try {
187
+ return i.validateSync(n), t ? t(n) : !0;
188
+ } catch (e) {
189
+ return e instanceof d.ValidationError ? e.message : !0;
190
+ }
191
+ }
192
+ };
193
+ };
194
+ //#endregion
195
+ export { _ as a, g as i, y as n, v as r, b as t };
package/index.d.ts CHANGED
@@ -1353,6 +1353,8 @@ declare interface ILevoFormContext {
1353
1353
  };
1354
1354
  };
1355
1355
  debug?: boolean;
1356
+ /** When true, the form is in preview mode — no remote submission, no drafts, no captcha, no analytics. */
1357
+ preview?: boolean;
1356
1358
  }
1357
1359
 
1358
1360
  export declare type ILevoPageData = Pick<IPageExpanded, "id" | "workspace_id" | "blocks" | "source" | "title" | "description" | "access" | "style_config">;
@@ -1366,8 +1368,6 @@ export declare interface ILevoPageProps {
1366
1368
  workspace: IWorkspace;
1367
1369
  site: ISite;
1368
1370
  authOverride?: IAuthOverride | null;
1369
- /** Wrap page content in a Suspense boundary (needed for React.lazy blocks). Auto-enabled in studio modes. */
1370
- enableSuspense?: boolean;
1371
1371
  }
1372
1372
 
1373
1373
  export declare interface ILocalizedPage {
@@ -1705,7 +1705,7 @@ export declare interface ISite {
1705
1705
  updated_at: string;
1706
1706
  }
1707
1707
 
1708
- export declare type ISiteCompact = Pick<ISite, "object" | "id" | "name" | "slug" | "icon" | "logo" | "domain" | "domain_count" | "is_default" | "created_at" | "updated_at">;
1708
+ export declare type ISiteCompact = Pick<ISite, "object" | "id" | "name" | "slug" | "icon" | "logo" | "domain" | "domain_count" | "is_default" | "settings" | "created_at" | "updated_at">;
1709
1709
 
1710
1710
  export declare interface ISitemap {
1711
1711
  created_at: string;
@@ -2558,9 +2558,9 @@ export declare interface StudioState {
2558
2558
  };
2559
2559
  }
2560
2560
 
2561
- export declare const StudioWidgetList: readonly ["BoxWidget", "ButtonWidget", "LayoutWidget", "HeadingWidget", "IframeWidget", "ImageWidget", "IconWidget", "MediaWidget", "TypographyWidget", "BlogContentWidget", "CarouselWidget", "FormWidget", "ContainerWidget", "UserMenuWidget", "TabsListWidget", "TabsTriggerWidget", "TabsContentWidget", "CardWidget", "TitleWidget", "TextWidget", "NumberWidget", "URLWidget", "ImageUploadWidget", "MultiImageUploadWidget", "TextareaWidget", "RichTextWidget", "DropdownWidget", "SwitchWidget", "DateWidget", "ArrayWidget", "RecordWidget"];
2561
+ export declare const StudioWidgetList: readonly ["BoxWidget", "ButtonWidget", "LayoutWidget", "HeadingWidget", "IframeWidget", "ImageWidget", "IconWidget", "MediaWidget", "TypographyWidget", "BlogContentWidget", "CarouselWidget", "FormWidget", "ContainerWidget", "UserMenuWidget", "TabsListWidget", "TabsTriggerWidget", "TabsContentWidget", "NavMenuWidget", "CardWidget", "TitleWidget", "TextWidget", "NumberWidget", "URLWidget", "ImageUploadWidget", "MultiImageUploadWidget", "TextareaWidget", "RichTextWidget", "DropdownWidget", "SwitchWidget", "DateWidget", "ArrayWidget", "RecordWidget"];
2562
2562
 
2563
- export declare const StudioWidgetMap: Record<"BoxWidget" | "ButtonWidget" | "LayoutWidget" | "HeadingWidget" | "IframeWidget" | "ImageWidget" | "IconWidget" | "MediaWidget" | "TypographyWidget" | "BlogContentWidget" | "CarouselWidget" | "FormWidget" | "ContainerWidget" | "UserMenuWidget" | "TabsListWidget" | "TabsTriggerWidget" | "TabsContentWidget" | "CardWidget" | "TitleWidget" | "TextWidget" | "NumberWidget" | "URLWidget" | "ImageUploadWidget" | "MultiImageUploadWidget" | "TextareaWidget" | "RichTextWidget" | "DropdownWidget" | "SwitchWidget" | "DateWidget" | "ArrayWidget" | "RecordWidget", "BoxWidget" | "ButtonWidget" | "LayoutWidget" | "HeadingWidget" | "IframeWidget" | "ImageWidget" | "IconWidget" | "MediaWidget" | "TypographyWidget" | "BlogContentWidget" | "CarouselWidget" | "FormWidget" | "ContainerWidget" | "UserMenuWidget" | "TabsListWidget" | "TabsTriggerWidget" | "TabsContentWidget" | "CardWidget" | "TitleWidget" | "TextWidget" | "NumberWidget" | "URLWidget" | "ImageUploadWidget" | "MultiImageUploadWidget" | "TextareaWidget" | "RichTextWidget" | "DropdownWidget" | "SwitchWidget" | "DateWidget" | "ArrayWidget" | "RecordWidget">;
2563
+ export declare const StudioWidgetMap: Record<"BoxWidget" | "ButtonWidget" | "LayoutWidget" | "HeadingWidget" | "IframeWidget" | "ImageWidget" | "IconWidget" | "MediaWidget" | "TypographyWidget" | "BlogContentWidget" | "CarouselWidget" | "FormWidget" | "ContainerWidget" | "UserMenuWidget" | "TabsListWidget" | "TabsTriggerWidget" | "TabsContentWidget" | "NavMenuWidget" | "CardWidget" | "TitleWidget" | "TextWidget" | "NumberWidget" | "URLWidget" | "ImageUploadWidget" | "MultiImageUploadWidget" | "TextareaWidget" | "RichTextWidget" | "DropdownWidget" | "SwitchWidget" | "DateWidget" | "ArrayWidget" | "RecordWidget", "BoxWidget" | "ButtonWidget" | "LayoutWidget" | "HeadingWidget" | "IframeWidget" | "ImageWidget" | "IconWidget" | "MediaWidget" | "TypographyWidget" | "BlogContentWidget" | "CarouselWidget" | "FormWidget" | "ContainerWidget" | "UserMenuWidget" | "TabsListWidget" | "TabsTriggerWidget" | "TabsContentWidget" | "NavMenuWidget" | "CardWidget" | "TitleWidget" | "TextWidget" | "NumberWidget" | "URLWidget" | "ImageUploadWidget" | "MultiImageUploadWidget" | "TextareaWidget" | "RichTextWidget" | "DropdownWidget" | "SwitchWidget" | "DateWidget" | "ArrayWidget" | "RecordWidget">;
2564
2564
 
2565
2565
  export declare const TabsContent: WithBlockPropsComponent<BaseTabsContentProps>;
2566
2566