@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.
- package/{BillingStep-BLwl9IDQ.js → BillingStep-C3jJkLXQ.js} +1 -1
- package/{Button-C6BOkG_z.js → Button-CwN6jTXH.js} +1 -1
- package/CollectionField-DnbpB0Z5.js +254 -0
- package/CollectionInput-BoNAc4sq.js +132 -0
- package/DateTimeWidget-IRleQI-3.js +255 -0
- package/{EntryCard-B-feJvrB.js → EntryCard-xpo36vUc.js} +3 -3
- package/{LoginCard-CF9JbU-y.js → LoginCard-DG8NAN0B.js} +3 -3
- package/{LoginForm-CdpNCQJa.js → LoginForm-CPMtCyMF.js} +4 -0
- package/{LoginModal-ngTHCyli.js → LoginModal-BPI5tOIZ.js} +3 -3
- package/{MessageCard-D2uja800.js → MessageCard-BYxgc9dl.js} +2 -2
- package/{ModalManager-B7pCzvK1.js → ModalManager-BaIL6HG-.js} +1 -1
- package/{PendingApprovalCard-Dut-Xiw1.js → PendingApprovalCard-DID1FhwF.js} +3 -3
- package/PhoneWidget-CjhHfwuG.js +100 -0
- package/Popover-DHVZdJuv.js +56 -0
- package/RichTextWidget-CgT1_zC3.js +1135 -0
- package/Tooltip-ByJRyayB.js +78 -0
- package/VerifyButton-DFKzKYxC.js +283 -0
- package/{bookingCard-BU_MdmS9.js → bookingCard-Bw4tvDYh.js} +3 -3
- package/collection.d.ts +81 -46
- package/collection.js +8 -5
- package/dist-B7TPxn7o.js +3180 -0
- package/getFieldValidations-qVzuq6mv.js +195 -0
- package/index.d.ts +5 -5
- package/index.js +1229 -1434
- package/nodeAlignment-CG3qmAuQ.js +180 -0
- package/package.json +3 -4
- package/studio.css +1 -1
- package/theme.cssm-De_pl52g.js +4 -0
- package/{utils-KqbqLlMF.js → utils-F6eBcsyI.js} +1 -1
- package/widgets-Dvyv5_uj.js +215 -0
- package/dist-DDKHTnIW.js +0 -3653
- package/widgets-B84lq4lO.js +0 -351
- /package/{Beams-CCNNOvfW.js → Beams-Blr-zwvz.js} +0 -0
- /package/{Dots-89WGkd-z.js → Dots-DeBKuibU.js} +0 -0
- /package/{Gradient-vTa_uWCj.js → Gradient-DGFxOjft.js} +0 -0
- /package/{Grid-CrtztrxK.js → Grid-A7HRCQ0T.js} +0 -0
- /package/{MessageFooter-Bu-jyPkJ.js → MessageFooter-C6DivT4m.js} +0 -0
- /package/{StripePaymentModal-CajqohNM.js → StripePaymentModal-BcePXzmC.js} +0 -0
- /package/{Waves-BhA6CLEI.js → Waves-CIT6Ngng.js} +0 -0
- /package/{card-DCbhJCO9.js → card-izMd2DvE.js} +0 -0
- /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
|
|