@algorithm-shift/design-system 1.2.36 → 1.2.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +16 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +15 -4
- package/dist/index.d.ts +15 -4
- package/dist/index.js +163 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +162 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import React$1 from 'react';
|
|
3
|
+
import { z } from 'zod';
|
|
3
4
|
import { ClassValue } from 'clsx';
|
|
4
5
|
|
|
5
6
|
interface ElementProps {
|
|
@@ -192,11 +193,11 @@ interface NavbarProps extends ElementProps {
|
|
|
192
193
|
|
|
193
194
|
declare const Modal: ({ children, onClose, label, className, style }: ModalProps) => react_jsx_runtime.JSX.Element;
|
|
194
195
|
|
|
195
|
-
declare const Flex: ({ children, className, style }: ElementProps) => react_jsx_runtime.JSX.Element;
|
|
196
|
+
declare const Flex: ({ children, className, style, ...props }: ElementProps) => react_jsx_runtime.JSX.Element;
|
|
196
197
|
|
|
197
|
-
declare const Grid: ({ children, className, style }: ElementProps) => react_jsx_runtime.JSX.Element;
|
|
198
|
+
declare const Grid: ({ children, className, style, ...props }: ElementProps) => react_jsx_runtime.JSX.Element;
|
|
198
199
|
|
|
199
|
-
declare const Container: ({ children, className, style }: ElementProps) => react_jsx_runtime.JSX.Element;
|
|
200
|
+
declare const Container: ({ children, className, style, ...props }: ElementProps) => react_jsx_runtime.JSX.Element;
|
|
200
201
|
|
|
201
202
|
declare const ButtonWrapper: ({ className, style, textContent, ...props }: ButtonProps) => react_jsx_runtime.JSX.Element;
|
|
202
203
|
|
|
@@ -299,6 +300,16 @@ type CanvasAction = {
|
|
|
299
300
|
};
|
|
300
301
|
declare function stateReducer(state: CanvasState, action: CanvasAction): CanvasState;
|
|
301
302
|
|
|
303
|
+
interface FormWrapperProps<T extends z.ZodObject<any>> {
|
|
304
|
+
validation?: any[];
|
|
305
|
+
formName?: string;
|
|
306
|
+
defaultValues?: Partial<z.infer<T>> | any;
|
|
307
|
+
children?: React$1.ReactNode;
|
|
308
|
+
onSubmit?: (data: z.infer<T>) => void;
|
|
309
|
+
onReset?: () => void;
|
|
310
|
+
}
|
|
311
|
+
declare const FormWrapper: <T extends z.ZodObject<any>>({ validation, defaultValues, children, onSubmit, onReset, }: FormWrapperProps<T>) => react_jsx_runtime.JSX.Element;
|
|
312
|
+
|
|
302
313
|
declare function cn(...inputs: ClassValue[]): string;
|
|
303
314
|
|
|
304
|
-
export { ChartComponent as BarChart, ButtonWrapper as Button, CheckboxInput as Checkbox, Container, DatePicker, DateRange, Dropdown, EmailInput as Email, EmailComposer, FileInput, Flex as FlexLayout, Grid as GridLayout, ImageControl as Image, Logo, Modal, MultiCheckbox, Navbar, Notification, NumberInput, CustomPagination as Pagination, PasswordInput as Password, PhoneInput as Phone, DonutChart as PieChart, Profile, RadioInput as RadioGroup, RichText, SearchInput as Search, Shape, Spacer, StagesComponent as Stages, StateProvider, SwitchToggle, Table, Tabs, TextInput as Text, TextInputGroup, Textarea, Typography, UrlInput as URL, cn, showSonnerToast, stateReducer, useAppState };
|
|
315
|
+
export { ChartComponent as BarChart, ButtonWrapper as Button, CheckboxInput as Checkbox, Container, DatePicker, DateRange, Dropdown, EmailInput as Email, EmailComposer, FileInput, Flex as FlexLayout, FormWrapper as Form, Grid as GridLayout, ImageControl as Image, Logo, Modal, MultiCheckbox, Navbar, Notification, NumberInput, CustomPagination as Pagination, PasswordInput as Password, PhoneInput as Phone, DonutChart as PieChart, Profile, RadioInput as RadioGroup, RichText, SearchInput as Search, Shape, Spacer, StagesComponent as Stages, StateProvider, SwitchToggle, Table, Tabs, TextInput as Text, TextInputGroup, Textarea, Typography, UrlInput as URL, cn, showSonnerToast, stateReducer, useAppState };
|
package/dist/index.js
CHANGED
|
@@ -41,6 +41,7 @@ __export(index_exports, {
|
|
|
41
41
|
EmailComposer: () => EmailComposer,
|
|
42
42
|
FileInput: () => FileInput_default,
|
|
43
43
|
FlexLayout: () => Flex_default,
|
|
44
|
+
Form: () => Wrapper_default,
|
|
44
45
|
GridLayout: () => Grid_default,
|
|
45
46
|
Image: () => Image_default,
|
|
46
47
|
Logo: () => Logo_default,
|
|
@@ -108,9 +109,10 @@ var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
|
108
109
|
var Flex = ({
|
|
109
110
|
children,
|
|
110
111
|
className,
|
|
111
|
-
style
|
|
112
|
+
style,
|
|
113
|
+
...props
|
|
112
114
|
}) => {
|
|
113
|
-
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className, style, children });
|
|
115
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { ...props, className, style, children });
|
|
114
116
|
};
|
|
115
117
|
var Flex_default = Flex;
|
|
116
118
|
|
|
@@ -119,9 +121,10 @@ var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
|
119
121
|
var Grid = ({
|
|
120
122
|
children,
|
|
121
123
|
className,
|
|
122
|
-
style
|
|
124
|
+
style,
|
|
125
|
+
...props
|
|
123
126
|
}) => {
|
|
124
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className, style, children });
|
|
127
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { ...props, className, style, children });
|
|
125
128
|
};
|
|
126
129
|
var Grid_default = Grid;
|
|
127
130
|
|
|
@@ -130,9 +133,10 @@ var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
|
130
133
|
var Container = ({
|
|
131
134
|
children,
|
|
132
135
|
className,
|
|
133
|
-
style
|
|
136
|
+
style,
|
|
137
|
+
...props
|
|
134
138
|
}) => {
|
|
135
|
-
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className, style, children });
|
|
139
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { ...props, className, style, children });
|
|
136
140
|
};
|
|
137
141
|
var Container_default = Container;
|
|
138
142
|
|
|
@@ -2872,6 +2876,158 @@ function StateProvider({ children }) {
|
|
|
2872
2876
|
function useAppState() {
|
|
2873
2877
|
return (0, import_react15.useContext)(StateContext);
|
|
2874
2878
|
}
|
|
2879
|
+
|
|
2880
|
+
// src/components/Form/Wrapper.tsx
|
|
2881
|
+
var import_react16 = __toESM(require("react"));
|
|
2882
|
+
var import_zod = require("@hookform/resolvers/zod");
|
|
2883
|
+
var import_react_hook_form = require("react-hook-form");
|
|
2884
|
+
var import_zod2 = require("zod");
|
|
2885
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
2886
|
+
function generateZodSchema(data) {
|
|
2887
|
+
const fields = data.reduce((acc, f) => {
|
|
2888
|
+
const name = f.name || "unnamed";
|
|
2889
|
+
const message = f.message || `${name} is invalid`;
|
|
2890
|
+
const passwordLen = f.passwordLength;
|
|
2891
|
+
let fieldSchema = import_zod2.z.string({ message });
|
|
2892
|
+
switch (f.type) {
|
|
2893
|
+
case "Text":
|
|
2894
|
+
case "Search":
|
|
2895
|
+
fieldSchema = import_zod2.z.string({ message });
|
|
2896
|
+
if (f?.min && f?.min !== "") fieldSchema = fieldSchema.min(f.min);
|
|
2897
|
+
else if (f.isRequired) fieldSchema = fieldSchema.min(1, { message: `${message}. Cannot be empty` });
|
|
2898
|
+
if (f?.max && f?.max !== "") fieldSchema = fieldSchema.max(f.max);
|
|
2899
|
+
if (f?.email) fieldSchema = fieldSchema.email();
|
|
2900
|
+
if (f?.url) fieldSchema = fieldSchema.url();
|
|
2901
|
+
if (f?.regex) fieldSchema = fieldSchema.regex(new RegExp(f.regex));
|
|
2902
|
+
break;
|
|
2903
|
+
case "Email":
|
|
2904
|
+
fieldSchema = import_zod2.z.email({ message });
|
|
2905
|
+
break;
|
|
2906
|
+
case "Password":
|
|
2907
|
+
fieldSchema = import_zod2.z.string({ message }).min(passwordLen, { message: `Password must be at least ${passwordLen} characters long` });
|
|
2908
|
+
break;
|
|
2909
|
+
case "Phone":
|
|
2910
|
+
fieldSchema = import_zod2.z.string().transform((val) => val.replace(/\D/g, "")).transform((val) => val.slice(-10)).refine((val) => {
|
|
2911
|
+
return val.length === 10;
|
|
2912
|
+
}, {
|
|
2913
|
+
message: "Phone number must be 10 digits long"
|
|
2914
|
+
});
|
|
2915
|
+
break;
|
|
2916
|
+
case "DatePicker":
|
|
2917
|
+
fieldSchema = import_zod2.z.iso.date({ message });
|
|
2918
|
+
break;
|
|
2919
|
+
case "FileInput":
|
|
2920
|
+
fieldSchema = import_zod2.z.instanceof(File, { message: "Please select a file" });
|
|
2921
|
+
if (f?.maxSize) {
|
|
2922
|
+
fieldSchema = fieldSchema.refine(
|
|
2923
|
+
(file) => file.size <= f.maxSize,
|
|
2924
|
+
{ message: `File size must be less than ${f.maxSize / 1024 / 1024}MB` }
|
|
2925
|
+
);
|
|
2926
|
+
}
|
|
2927
|
+
if (f?.acceptedTypes) {
|
|
2928
|
+
fieldSchema = fieldSchema.refine(
|
|
2929
|
+
(file) => f.acceptedTypes.includes(file.type),
|
|
2930
|
+
{ message: `File type must be one of: ${f.acceptedTypes.join(", ")}` }
|
|
2931
|
+
);
|
|
2932
|
+
}
|
|
2933
|
+
break;
|
|
2934
|
+
case "Checkbox":
|
|
2935
|
+
fieldSchema = import_zod2.z.boolean({ message });
|
|
2936
|
+
break;
|
|
2937
|
+
case "Dropdown":
|
|
2938
|
+
fieldSchema = import_zod2.z.string({ message });
|
|
2939
|
+
break;
|
|
2940
|
+
case "NumberInput":
|
|
2941
|
+
fieldSchema = import_zod2.z.number({ message });
|
|
2942
|
+
if (f?.min !== void 0) fieldSchema = fieldSchema.min(f.min);
|
|
2943
|
+
if (f?.max !== void 0) fieldSchema = fieldSchema.max(f.max);
|
|
2944
|
+
break;
|
|
2945
|
+
default:
|
|
2946
|
+
fieldSchema = import_zod2.z.any();
|
|
2947
|
+
}
|
|
2948
|
+
if (!f.isRequired) fieldSchema = fieldSchema.optional();
|
|
2949
|
+
acc[name] = fieldSchema;
|
|
2950
|
+
return acc;
|
|
2951
|
+
}, {});
|
|
2952
|
+
return import_zod2.z.object(fields);
|
|
2953
|
+
}
|
|
2954
|
+
var FormWrapper = ({
|
|
2955
|
+
validation,
|
|
2956
|
+
defaultValues,
|
|
2957
|
+
children,
|
|
2958
|
+
onSubmit,
|
|
2959
|
+
onReset
|
|
2960
|
+
}) => {
|
|
2961
|
+
const schema = (0, import_react16.useMemo)(() => {
|
|
2962
|
+
if (!validation || validation.length === 0) return null;
|
|
2963
|
+
return generateZodSchema(validation);
|
|
2964
|
+
}, [validation]);
|
|
2965
|
+
const {
|
|
2966
|
+
handleSubmit,
|
|
2967
|
+
control,
|
|
2968
|
+
formState: { errors },
|
|
2969
|
+
reset
|
|
2970
|
+
} = (0, import_react_hook_form.useForm)({
|
|
2971
|
+
resolver: schema ? (0, import_zod.zodResolver)(schema) : void 0,
|
|
2972
|
+
defaultValues
|
|
2973
|
+
});
|
|
2974
|
+
const formSubmit = (data) => {
|
|
2975
|
+
if (onSubmit) onSubmit(data);
|
|
2976
|
+
};
|
|
2977
|
+
const handleReset = () => {
|
|
2978
|
+
reset();
|
|
2979
|
+
if (onReset) onReset();
|
|
2980
|
+
};
|
|
2981
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
2982
|
+
"form",
|
|
2983
|
+
{
|
|
2984
|
+
onSubmit: handleSubmit(formSubmit),
|
|
2985
|
+
onReset: handleReset,
|
|
2986
|
+
className: cn(
|
|
2987
|
+
"space-y-4 min-h-[100px] h-auto flex justify-between flex-col"
|
|
2988
|
+
),
|
|
2989
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "min-h-[50px]", children: import_react16.default.Children.map(children, (child) => {
|
|
2990
|
+
const processChild = (child2) => {
|
|
2991
|
+
if (import_react16.default.isValidElement(child2)) {
|
|
2992
|
+
const node = child2.props?.node;
|
|
2993
|
+
if (node?.category === "Form Controls") {
|
|
2994
|
+
const name = node.properties?.name || "unnamed";
|
|
2995
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "flex flex-col", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
2996
|
+
import_react_hook_form.Controller,
|
|
2997
|
+
{
|
|
2998
|
+
name,
|
|
2999
|
+
control,
|
|
3000
|
+
render: ({ field: controllerField }) => {
|
|
3001
|
+
const childElement = child2;
|
|
3002
|
+
return import_react16.default.cloneElement(childElement, {
|
|
3003
|
+
input: {
|
|
3004
|
+
...controllerField,
|
|
3005
|
+
hasFormContainer: true,
|
|
3006
|
+
validateOnMount: true,
|
|
3007
|
+
errorMessage: errors[name]?.message || null
|
|
3008
|
+
},
|
|
3009
|
+
children: void 0
|
|
3010
|
+
});
|
|
3011
|
+
}
|
|
3012
|
+
}
|
|
3013
|
+
) }, node.id);
|
|
3014
|
+
}
|
|
3015
|
+
if (child2.props?.children) {
|
|
3016
|
+
const childElement = child2;
|
|
3017
|
+
return import_react16.default.cloneElement(childElement, {
|
|
3018
|
+
children: import_react16.default.Children.map(childElement.props.children, processChild)
|
|
3019
|
+
});
|
|
3020
|
+
}
|
|
3021
|
+
return import_react16.default.cloneElement(child2);
|
|
3022
|
+
}
|
|
3023
|
+
return child2;
|
|
3024
|
+
};
|
|
3025
|
+
return processChild(child);
|
|
3026
|
+
}) })
|
|
3027
|
+
}
|
|
3028
|
+
);
|
|
3029
|
+
};
|
|
3030
|
+
var Wrapper_default = FormWrapper;
|
|
2875
3031
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2876
3032
|
0 && (module.exports = {
|
|
2877
3033
|
BarChart,
|
|
@@ -2885,6 +3041,7 @@ function useAppState() {
|
|
|
2885
3041
|
EmailComposer,
|
|
2886
3042
|
FileInput,
|
|
2887
3043
|
FlexLayout,
|
|
3044
|
+
Form,
|
|
2888
3045
|
GridLayout,
|
|
2889
3046
|
Image,
|
|
2890
3047
|
Logo,
|