masumi-schema-validator-component 0.2.0 → 0.2.2
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.d.mts +12 -1
- package/dist/index.d.ts +12 -1
- package/dist/index.js +129 -32
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +129 -34
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/SchemaPlayground.tsx +11 -1
package/dist/index.d.mts
CHANGED
|
@@ -1199,4 +1199,15 @@ interface JobInputRendererProps {
|
|
|
1199
1199
|
}
|
|
1200
1200
|
declare function JobInputRenderer({ jobInputSchema, value, onChange, disabled, }: JobInputRendererProps): react_jsx_runtime.JSX.Element;
|
|
1201
1201
|
|
|
1202
|
-
|
|
1202
|
+
interface SchemaPlaygroundProps {
|
|
1203
|
+
initialSchema?: string;
|
|
1204
|
+
examples?: Array<{
|
|
1205
|
+
label: string;
|
|
1206
|
+
value: string;
|
|
1207
|
+
}>;
|
|
1208
|
+
className?: string;
|
|
1209
|
+
onSchemaChange?: (schema: string, isValid: boolean) => void;
|
|
1210
|
+
}
|
|
1211
|
+
declare function SchemaPlayground({ initialSchema, examples, className, onSchemaChange, }: SchemaPlaygroundProps): react_jsx_runtime.JSX.Element;
|
|
1212
|
+
|
|
1213
|
+
export { type JobInputBooleanSchemaType, type JobInputFileSchemaType, type JobInputNoneSchemaType, type JobInputNumberSchemaType, type JobInputOptionSchemaType, JobInputRenderer, type JobInputSchemaType, type JobInputStringSchemaType, type JobInputTextareaSchemaType, JobInputsFormRenderer, SchemaPlayground, ValidJobInputFormatValues, ValidJobInputTypes, ValidJobInputValidationTypes, type ValidationResult, formatEmailValidationSchema, formatIntegerValidationSchema, formatNonEmptyValidationSchema, formatUrlValidationSchema, getDefaultValue, isOptional, isSingleOption, jobInputBooleanSchema, jobInputFileSchema, jobInputNoneSchema, jobInputNumberSchema, jobInputOptionSchema, jobInputSchema, jobInputStringSchema, jobInputTextareaSchema, makeZodSchemaFromJobInputSchema, maxValidationSchema, minValidationSchema, optionalValidationSchema, validateSchemaWithZod };
|
package/dist/index.d.ts
CHANGED
|
@@ -1199,4 +1199,15 @@ interface JobInputRendererProps {
|
|
|
1199
1199
|
}
|
|
1200
1200
|
declare function JobInputRenderer({ jobInputSchema, value, onChange, disabled, }: JobInputRendererProps): react_jsx_runtime.JSX.Element;
|
|
1201
1201
|
|
|
1202
|
-
|
|
1202
|
+
interface SchemaPlaygroundProps {
|
|
1203
|
+
initialSchema?: string;
|
|
1204
|
+
examples?: Array<{
|
|
1205
|
+
label: string;
|
|
1206
|
+
value: string;
|
|
1207
|
+
}>;
|
|
1208
|
+
className?: string;
|
|
1209
|
+
onSchemaChange?: (schema: string, isValid: boolean) => void;
|
|
1210
|
+
}
|
|
1211
|
+
declare function SchemaPlayground({ initialSchema, examples, className, onSchemaChange, }: SchemaPlaygroundProps): react_jsx_runtime.JSX.Element;
|
|
1212
|
+
|
|
1213
|
+
export { type JobInputBooleanSchemaType, type JobInputFileSchemaType, type JobInputNoneSchemaType, type JobInputNumberSchemaType, type JobInputOptionSchemaType, JobInputRenderer, type JobInputSchemaType, type JobInputStringSchemaType, type JobInputTextareaSchemaType, JobInputsFormRenderer, SchemaPlayground, ValidJobInputFormatValues, ValidJobInputTypes, ValidJobInputValidationTypes, type ValidationResult, formatEmailValidationSchema, formatIntegerValidationSchema, formatNonEmptyValidationSchema, formatUrlValidationSchema, getDefaultValue, isOptional, isSingleOption, jobInputBooleanSchema, jobInputFileSchema, jobInputNoneSchema, jobInputNumberSchema, jobInputOptionSchema, jobInputSchema, jobInputStringSchema, jobInputTextareaSchema, makeZodSchemaFromJobInputSchema, maxValidationSchema, minValidationSchema, optionalValidationSchema, validateSchemaWithZod };
|
package/dist/index.js
CHANGED
|
@@ -5,11 +5,13 @@ var React2 = require('react');
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var clsx = require('clsx');
|
|
7
7
|
var tailwindMerge = require('tailwind-merge');
|
|
8
|
+
var Editor = require('@monaco-editor/react');
|
|
8
9
|
|
|
9
10
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
11
|
|
|
11
12
|
var React2__default = /*#__PURE__*/_interopDefault(React2);
|
|
12
13
|
var clsx__default = /*#__PURE__*/_interopDefault(clsx);
|
|
14
|
+
var Editor__default = /*#__PURE__*/_interopDefault(Editor);
|
|
13
15
|
|
|
14
16
|
// src/lib/job-input-schema.ts
|
|
15
17
|
var ValidJobInputTypes = /* @__PURE__ */ ((ValidJobInputTypes2) => {
|
|
@@ -585,7 +587,7 @@ function JobInputsFormRenderer({
|
|
|
585
587
|
initialData[schema.id] = getDefaultValue(schema);
|
|
586
588
|
});
|
|
587
589
|
setFormData(initialData);
|
|
588
|
-
}, [jobInputSchemas]);
|
|
590
|
+
}, [JSON.stringify(jobInputSchemas)]);
|
|
589
591
|
React2.useEffect(() => {
|
|
590
592
|
if (onFormDataChange) {
|
|
591
593
|
onFormDataChange(formData);
|
|
@@ -607,47 +609,142 @@ function JobInputsFormRenderer({
|
|
|
607
609
|
if (jobInputSchemas.length === 0) {
|
|
608
610
|
return /* @__PURE__ */ jsxRuntime.jsx(Card, { className, children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "pt-6", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground text-center", children: "No input fields defined in the schema." }) }) });
|
|
609
611
|
}
|
|
610
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
611
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
612
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
612
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Card, { className: cn("bg-muted/20", className), children: /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "space-y-6 pt-6", children: [
|
|
613
|
+
/* @__PURE__ */ jsxRuntime.jsx("form", { className: "space-y-4", onSubmit: (e) => e.preventDefault(), children: jobInputSchemas.map((schema, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
614
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
615
|
+
JobInputRenderer,
|
|
616
|
+
{
|
|
617
|
+
jobInputSchema: schema,
|
|
618
|
+
value: formData[schema.id],
|
|
619
|
+
onChange: (value) => handleFieldChange(schema.id, value),
|
|
620
|
+
disabled
|
|
621
|
+
}
|
|
622
|
+
),
|
|
623
|
+
index < jobInputSchemas.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "my-4" })
|
|
624
|
+
] }, schema.id)) }),
|
|
625
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between items-center pt-4", children: [
|
|
626
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
627
|
+
Button,
|
|
628
|
+
{
|
|
629
|
+
type: "button",
|
|
630
|
+
variant: "outline",
|
|
631
|
+
onClick: handleClear,
|
|
632
|
+
disabled,
|
|
633
|
+
children: "Clear Form"
|
|
634
|
+
}
|
|
635
|
+
),
|
|
636
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm text-muted-foreground", children: [
|
|
637
|
+
Object.keys(formData).length,
|
|
638
|
+
" field",
|
|
639
|
+
Object.keys(formData).length !== 1 ? "s" : ""
|
|
640
|
+
] })
|
|
641
|
+
] })
|
|
642
|
+
] }) });
|
|
643
|
+
}
|
|
644
|
+
function SchemaPlayground({
|
|
645
|
+
initialSchema = "[]",
|
|
646
|
+
examples = [],
|
|
647
|
+
className,
|
|
648
|
+
onSchemaChange
|
|
649
|
+
}) {
|
|
650
|
+
const [schemaInput, setSchemaInput] = React2.useState(initialSchema);
|
|
651
|
+
const [selectedExample, setSelectedExample] = React2.useState(examples.length > 0 ? examples[0].label : "");
|
|
652
|
+
React2.useEffect(() => {
|
|
653
|
+
if (examples.length > 0 && !selectedExample) {
|
|
654
|
+
const match = examples.find((e) => e.value === schemaInput);
|
|
655
|
+
if (match) setSelectedExample(match.label);
|
|
656
|
+
}
|
|
657
|
+
}, [examples, schemaInput, selectedExample]);
|
|
658
|
+
const handleSelectExample = (e) => {
|
|
659
|
+
const val = e.target.value;
|
|
660
|
+
setSelectedExample(val);
|
|
661
|
+
const found = examples.find((ex) => ex.label === val);
|
|
662
|
+
if (found) {
|
|
663
|
+
setSchemaInput(found.value);
|
|
664
|
+
}
|
|
665
|
+
};
|
|
666
|
+
const validationResult = validateSchemaWithZod(schemaInput);
|
|
667
|
+
React2.useEffect(() => {
|
|
668
|
+
if (onSchemaChange) {
|
|
669
|
+
onSchemaChange(schemaInput, validationResult.valid);
|
|
670
|
+
}
|
|
671
|
+
}, [schemaInput, validationResult.valid, onSchemaChange]);
|
|
672
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid grid-cols-1 lg:grid-cols-2 gap-8 h-full", className), children: [
|
|
673
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 h-full min-h-[500px]", children: [
|
|
674
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "1. Schema Definition (JSON)" }),
|
|
675
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 relative border rounded-lg overflow-hidden shadow-sm bg-white flex flex-col", children: [
|
|
676
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-b bg-gray-50", children: [
|
|
677
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: examples.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
678
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-gray-700 whitespace-nowrap", children: "Load Example:" }),
|
|
679
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
680
|
+
"select",
|
|
681
|
+
{
|
|
682
|
+
className: "border rounded px-2 py-1 text-xs bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 max-w-[200px]",
|
|
683
|
+
value: selectedExample,
|
|
684
|
+
onChange: handleSelectExample,
|
|
685
|
+
children: examples.map((ex) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: ex.label, children: ex.label }, ex.label))
|
|
686
|
+
}
|
|
687
|
+
)
|
|
688
|
+
] }) }),
|
|
689
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `text-xs px-2 py-1 rounded-full font-medium ${validationResult.valid ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800"}`, children: validationResult.valid ? "Valid Schema" : "Invalid Schema" })
|
|
690
|
+
] }),
|
|
691
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
692
|
+
Editor__default.default,
|
|
631
693
|
{
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
694
|
+
height: "100%",
|
|
695
|
+
defaultLanguage: "json",
|
|
696
|
+
value: schemaInput,
|
|
697
|
+
onChange: (value) => {
|
|
698
|
+
setSchemaInput(value || "");
|
|
699
|
+
if (examples.length > 0) {
|
|
700
|
+
const match = examples.find((e) => e.value === (value || ""));
|
|
701
|
+
if (match) {
|
|
702
|
+
setSelectedExample(match.label);
|
|
703
|
+
} else {
|
|
704
|
+
setSelectedExample("");
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
},
|
|
708
|
+
options: {
|
|
709
|
+
minimap: { enabled: false },
|
|
710
|
+
scrollBeyondLastLine: false,
|
|
711
|
+
fontSize: 14,
|
|
712
|
+
formatOnPaste: true,
|
|
713
|
+
automaticLayout: true
|
|
714
|
+
}
|
|
637
715
|
}
|
|
638
|
-
),
|
|
639
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm
|
|
640
|
-
|
|
641
|
-
"
|
|
642
|
-
|
|
716
|
+
) }),
|
|
717
|
+
!validationResult.valid && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t bg-red-50 p-4 text-sm max-h-40 overflow-y-auto z-10 relative", children: [
|
|
718
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-bold text-red-800 mb-2", children: "Validation Errors:" }),
|
|
719
|
+
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "list-disc pl-5 space-y-1 text-red-700", children: validationResult.errors.map((err, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { children: [
|
|
720
|
+
err.line ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono bg-red-100 px-1 rounded mr-1", children: [
|
|
721
|
+
"line ",
|
|
722
|
+
err.line
|
|
723
|
+
] }) : null,
|
|
724
|
+
err.message
|
|
725
|
+
] }, i)) })
|
|
643
726
|
] })
|
|
644
727
|
] })
|
|
728
|
+
] }),
|
|
729
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 h-full overflow-hidden min-h-[500px]", children: [
|
|
730
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "2. Form Preview" }) }),
|
|
731
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 flex flex-col gap-4 overflow-hidden", children: validationResult.valid ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto border rounded-lg shadow-sm bg-white p-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
732
|
+
JobInputsFormRenderer,
|
|
733
|
+
{
|
|
734
|
+
jobInputSchemas: validationResult.parsedSchemas || [],
|
|
735
|
+
className: "h-full border-0 shadow-none"
|
|
736
|
+
}
|
|
737
|
+
) }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 border-2 border-dashed border-gray-300 rounded-lg flex items-center justify-center bg-gray-50 text-gray-400", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
738
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg font-medium", children: "Preview Unavailable" }),
|
|
739
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: "Fix schema errors to see the form" })
|
|
740
|
+
] }) }) })
|
|
645
741
|
] })
|
|
646
742
|
] });
|
|
647
743
|
}
|
|
648
744
|
|
|
649
745
|
exports.JobInputRenderer = JobInputRenderer;
|
|
650
746
|
exports.JobInputsFormRenderer = JobInputsFormRenderer;
|
|
747
|
+
exports.SchemaPlayground = SchemaPlayground;
|
|
651
748
|
exports.ValidJobInputFormatValues = ValidJobInputFormatValues;
|
|
652
749
|
exports.ValidJobInputTypes = ValidJobInputTypes;
|
|
653
750
|
exports.ValidJobInputValidationTypes = ValidJobInputValidationTypes;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/job-input-schema.ts","../src/lib/validation.ts","../src/components/JobInputRenderer.tsx","../src/components/JobInputsFormRenderer.tsx"],"names":["ValidJobInputTypes","ValidJobInputValidationTypes","ValidJobInputFormatValues","z","jobInputSchema","jobInputStringSchema","jobInputTextareaSchema","jobInputNumberSchema","jobInputOptionSchema","jobInputFileSchema","React","jsx","jsxs","twMerge","clsx","useState","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n// Enums matching sokosumi's implementation\nexport enum ValidJobInputTypes {\n STRING = 'string',\n TEXTAREA = 'textarea',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n OPTION = 'option',\n FILE = 'file',\n NONE = 'none',\n}\n\nexport enum ValidJobInputValidationTypes {\n MIN = 'min',\n MAX = 'max',\n FORMAT = 'format',\n OPTIONAL = 'optional',\n}\n\nexport enum ValidJobInputFormatValues {\n URL = 'url',\n EMAIL = 'email',\n INTEGER = 'integer',\n NON_EMPTY = 'nonempty',\n}\n\n// Validation schemas\nexport const optionalValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.OPTIONAL]),\n value: z.enum(['true', 'false'] as const),\n});\n\nexport const minValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.MIN]),\n value: z.number({ coerce: true }).int().min(0),\n});\n\nexport const maxValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.MAX]),\n value: z.number({ coerce: true }).int().min(0),\n});\n\nexport const formatUrlValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.URL]),\n});\n\nexport const formatEmailValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.EMAIL]),\n});\n\nexport const formatIntegerValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.INTEGER]),\n});\n\nexport const formatNonEmptyValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.NON_EMPTY]),\n});\n\n// Job input schemas\nexport const jobInputStringSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.STRING]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z\n .array(\n optionalValidationSchema\n .or(minValidationSchema)\n .or(maxValidationSchema)\n .or(formatNonEmptyValidationSchema)\n .or(formatUrlValidationSchema)\n .or(formatEmailValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputTextareaSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.TEXTAREA]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z\n .array(\n optionalValidationSchema\n .or(minValidationSchema)\n .or(maxValidationSchema)\n .or(formatNonEmptyValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputNumberSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.NUMBER]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z\n .array(\n optionalValidationSchema\n .or(minValidationSchema)\n .or(maxValidationSchema)\n .or(formatIntegerValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputBooleanSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.BOOLEAN]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z.array(optionalValidationSchema).optional(),\n});\n\nexport const jobInputOptionSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.OPTION]),\n name: z.string().min(1),\n data: z.object({\n values: z.array(z.string().min(1)).min(1),\n placeholder: z.string().optional(),\n description: z.string().optional(),\n }),\n validations: z\n .array(\n optionalValidationSchema.or(minValidationSchema).or(maxValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputFileSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.FILE]),\n name: z.string().min(1),\n data: z.object({\n accept: z.string().optional(),\n maxSize: z.string().optional(),\n multiple: z.boolean().optional(),\n description: z.string().optional(),\n outputFormat: z.string().optional(),\n }),\n validations: z.array(optionalValidationSchema).optional(),\n});\n\nexport const jobInputNoneSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.NONE]),\n name: z.string().min(1),\n data: z\n .object({\n description: z.string().min(1).optional(),\n })\n .optional(),\n});\n\n// Union schema for all job input types\nexport const jobInputSchema = jobInputStringSchema\n .or(jobInputTextareaSchema)\n .or(jobInputNumberSchema)\n .or(jobInputBooleanSchema)\n .or(jobInputOptionSchema)\n .or(jobInputFileSchema)\n .or(jobInputNoneSchema);\n\nexport type JobInputSchemaType = z.infer<typeof jobInputSchema>;\nexport type JobInputStringSchemaType = z.infer<typeof jobInputStringSchema>;\nexport type JobInputTextareaSchemaType = z.infer<typeof jobInputTextareaSchema>;\nexport type JobInputNumberSchemaType = z.infer<typeof jobInputNumberSchema>;\nexport type JobInputBooleanSchemaType = z.infer<typeof jobInputBooleanSchema>;\nexport type JobInputOptionSchemaType = z.infer<typeof jobInputOptionSchema>;\nexport type JobInputFileSchemaType = z.infer<typeof jobInputFileSchema>;\nexport type JobInputNoneSchemaType = z.infer<typeof jobInputNoneSchema>;\n\n// Form schema generation (based on sokosumi's approach)\nexport const makeZodSchemaFromJobInputSchema = (\n jobInputSchema: JobInputSchemaType,\n) => {\n switch (jobInputSchema.type) {\n case ValidJobInputTypes.STRING:\n return makeZodSchemaFromJobInputStringSchema(jobInputSchema);\n case ValidJobInputTypes.TEXTAREA:\n return makeZodSchemaFromJobInputTextareaSchema(jobInputSchema);\n case ValidJobInputTypes.NUMBER:\n return makeZodSchemaFromJobInputNumberSchema(jobInputSchema);\n case ValidJobInputTypes.BOOLEAN:\n return makeZodSchemaFromJobInputBooleanSchema();\n case ValidJobInputTypes.OPTION:\n return makeZodSchemaFromJobInputOptionSchema(jobInputSchema);\n case ValidJobInputTypes.FILE:\n return makeZodSchemaFromJobInputFileSchema(jobInputSchema);\n case ValidJobInputTypes.NONE:\n return z.never().nullable();\n }\n};\n\nconst makeZodSchemaFromJobInputStringSchema = (\n jobInputStringSchema: JobInputStringSchemaType,\n) => {\n const { validations } = jobInputStringSchema;\n const defaultSchema = z.string();\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.FORMAT:\n switch (value) {\n case ValidJobInputFormatValues.URL:\n return acc.url();\n case ValidJobInputFormatValues.EMAIL:\n return acc.email();\n case ValidJobInputFormatValues.NON_EMPTY:\n return acc.min(1);\n default:\n return acc;\n }\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputTextareaSchema = (\n jobInputTextareaSchema: JobInputTextareaSchemaType,\n) => {\n const { validations } = jobInputTextareaSchema;\n const defaultSchema = z.string();\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.FORMAT:\n switch (value) {\n case ValidJobInputFormatValues.NON_EMPTY:\n return acc.min(1);\n default:\n return acc;\n }\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputNumberSchema = (\n jobInputNumberSchema: JobInputNumberSchemaType,\n) => {\n const { validations } = jobInputNumberSchema;\n const defaultSchema = z.number({ coerce: true });\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.FORMAT:\n switch (value) {\n case ValidJobInputFormatValues.INTEGER:\n return acc.int();\n default:\n return acc;\n }\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputBooleanSchema = () => {\n return z.boolean();\n};\n\nconst makeZodSchemaFromJobInputOptionSchema = (\n jobInputOptionSchema: JobInputOptionSchemaType,\n) => {\n const {\n data: { values },\n validations,\n } = jobInputOptionSchema;\n const defaultSchema = z.array(\n z\n .number()\n .int()\n .nonnegative()\n .max(values.length - 1),\n );\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputFileSchema = (\n jobInputFileSchema: JobInputFileSchemaType,\n) => {\n const { validations } = jobInputFileSchema;\n const defaultSchema = z.string();\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n default:\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\n// Helper functions\nexport const isOptional = (jobInputSchema: JobInputSchemaType): boolean => {\n if (!('validations' in jobInputSchema) || !jobInputSchema.validations)\n return false;\n return jobInputSchema.validations.some(\n (v) =>\n v.validation === ValidJobInputValidationTypes.OPTIONAL &&\n v.value === 'true',\n );\n};\n\nexport const isSingleOption = (jobInputSchema: JobInputSchemaType): boolean => {\n if (jobInputSchema.type !== ValidJobInputTypes.OPTION) return false;\n if (!('validations' in jobInputSchema) || !jobInputSchema.validations)\n return false;\n\n const minValidation = jobInputSchema.validations.find(\n (v) => v.validation === ValidJobInputValidationTypes.MIN,\n );\n const maxValidation = jobInputSchema.validations.find(\n (v) => v.validation === ValidJobInputValidationTypes.MAX,\n );\n\n return minValidation?.value === 1 && maxValidation?.value === 1;\n};\n\nexport const getDefaultValue = (jobInputSchema: JobInputSchemaType) => {\n const { type } = jobInputSchema;\n switch (type) {\n case ValidJobInputTypes.STRING:\n return '';\n case ValidJobInputTypes.TEXTAREA:\n return '';\n case ValidJobInputTypes.BOOLEAN:\n return false;\n case ValidJobInputTypes.NUMBER:\n return null;\n case ValidJobInputTypes.OPTION:\n return [];\n case ValidJobInputTypes.FILE:\n return null;\n case ValidJobInputTypes.NONE:\n return null;\n }\n};\n\n","// This file contains the extracted validation logic.\n// Note: It relies on jobInputSchema which is not yet provided, so we will need to update imports.\n\nimport { jobInputSchema, JobInputSchemaType } from './job-input-schema';\n\nexport type { JobInputSchemaType };\n\nexport interface ValidationResult {\n valid: boolean;\n errors: { message: string; line?: number }[];\n parsedSchemas?: JobInputSchemaType[];\n}\n\n/**\n * Validates a JSON string against the Job Input Schema.\n * Tries to provide line numbers for errors where possible.\n */\nexport function validateSchemaWithZod(input: string): ValidationResult {\n let parsed: any;\n try {\n parsed = JSON.parse(input);\n } catch (e: any) {\n // Try to extract line number from error message\n const match = e.message.match(/at position (\\d+)/);\n let line;\n if (match) {\n const pos = parseInt(match[1], 10);\n line = input.slice(0, pos).split('\\n').length;\n }\n return {\n valid: false,\n errors: [{ message: 'Invalid JSON: ' + e.message, line }],\n };\n }\n\n const errors: { message: string; line?: number }[] = [];\n const schemas: JobInputSchemaType[] = [];\n\n // Helper to get line number for a key\n const getLine = (key: string) => {\n const idx = input.indexOf('\"' + key + '\"');\n if (idx === -1) return undefined;\n return input.slice(0, idx).split('\\n').length;\n };\n\n // Handle wrapped format, single schema, and array of schemas\n let schemasToValidate: any[];\n if (parsed.input_data && Array.isArray(parsed.input_data)) {\n // Handle wrapped format: { \"input_data\": [...] }\n schemasToValidate = parsed.input_data;\n } else if (Array.isArray(parsed)) {\n // Handle array format: [...]\n schemasToValidate = parsed;\n } else {\n // Handle single schema format: { ... }\n schemasToValidate = [parsed];\n }\n\n schemasToValidate.forEach((schema: any, index: number) => {\n try {\n const validatedSchema = jobInputSchema.parse(schema);\n schemas.push(validatedSchema);\n } catch (zodError: any) {\n if (zodError.errors) {\n zodError.errors.forEach((error: any) => {\n errors.push({\n message: `Schema ${index + 1}: ${error.message}`,\n line: getLine(error.path?.[0] || ''),\n });\n });\n } else {\n errors.push({\n message: `Schema ${index + 1}: ${zodError.message}`,\n line: getLine('type'),\n });\n }\n }\n });\n\n if (errors.length > 0) {\n return { valid: false, errors };\n }\n\n return {\n valid: true,\n errors: [],\n parsedSchemas: schemas,\n };\n}\n\n","// Placeholder for JobInputRenderer component\n// This will be replaced by the actual content if provided, \n// or we need to request it. \n// Based on imports in JobInputsFormRenderer, this file is expected to exist.\n\nimport React from 'react';\nimport { JobInputSchemaType, ValidJobInputTypes } from '../lib/job-input-schema';\n\n// Simple UI Components for the renderer\nimport { cn } from './JobInputsFormRenderer';\n\nconst Label = React.forwardRef<HTMLLabelElement, React.LabelHTMLAttributes<HTMLLabelElement>>(({ className, ...props }, ref) => (\n <label ref={ref} className={cn(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\", className)} {...props} />\n));\nLabel.displayName = \"Label\";\n\nconst Input = React.forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>(({ className, type, ...props }, ref) => (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n));\nInput.displayName = \"Input\";\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, React.TextareaHTMLAttributes<HTMLTextAreaElement>>(({ className, ...props }, ref) => (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n));\nTextarea.displayName = \"Textarea\";\n\nconst Checkbox = React.forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>(({ className, ...props }, ref) => (\n <input type=\"checkbox\" ref={ref} className={cn(\"h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary\", className)} {...props} />\n));\nCheckbox.displayName = \"Checkbox\";\n\n\ninterface JobInputRendererProps {\n jobInputSchema: JobInputSchemaType;\n value: string | number | boolean | number[] | null;\n onChange: (value: string | number | boolean | number[] | null) => void;\n disabled?: boolean;\n}\n\nexport default function JobInputRenderer({\n jobInputSchema,\n value,\n onChange,\n disabled,\n}: JobInputRendererProps) {\n const { id, name, type, data } = jobInputSchema;\n const description = data?.description;\n const placeholder = 'placeholder' in (data || {}) ? (data as any).placeholder : '';\n\n const renderInput = () => {\n switch (type) {\n case ValidJobInputTypes.STRING:\n return (\n <Input\n id={id}\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n />\n );\n case ValidJobInputTypes.TEXTAREA:\n return (\n <Textarea\n id={id}\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n />\n );\n case ValidJobInputTypes.NUMBER:\n return (\n <Input\n id={id}\n type=\"number\"\n value={value !== null ? String(value) : ''}\n onChange={(e) => {\n const val = e.target.value;\n onChange(val === '' ? null : Number(val));\n }}\n placeholder={placeholder}\n disabled={disabled}\n />\n );\n case ValidJobInputTypes.BOOLEAN:\n return (\n <div className=\"flex items-center space-x-2\">\n <Checkbox\n id={id}\n checked={!!value}\n onChange={(e) => onChange(e.target.checked)}\n disabled={disabled}\n />\n <label\n htmlFor={id}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {placeholder || 'Yes'}\n </label>\n </div>\n );\n case ValidJobInputTypes.OPTION:\n const options = (data as any).values || [];\n return (\n <select\n id={id}\n className=\"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n value={Array.isArray(value) && value.length > 0 ? value[0] : ''} // Simple single select for now\n onChange={(e) => {\n // Assuming single select maps to index for now based on schema definition or simple value\n // The schema definition says number[] for value, suggesting indices\n // But let's verify logic.\n // For now, just passing index if possible or finding index\n const selectedIndex = options.indexOf(e.target.value);\n onChange(selectedIndex >= 0 ? [selectedIndex] : []);\n }}\n disabled={disabled}\n >\n <option value=\"\">Select...</option>\n {options.map((opt: string) => (\n <option key={opt} value={opt}>{opt}</option>\n ))}\n </select>\n );\n case ValidJobInputTypes.FILE:\n return (\n <Input\n id={id}\n type=\"file\"\n disabled={disabled}\n onChange={() => {\n // File handling logic would go here\n // For now, just a placeholder\n }}\n />\n )\n default:\n return <div>Unsupported input type: {type}</div>;\n }\n };\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex flex-col space-y-1\">\n <Label htmlFor={id}>\n {name}\n {'validations' in jobInputSchema && jobInputSchema.validations?.some((v: any) => v.validation === 'optional' && v.value === 'true') && \n <span className=\"text-muted-foreground font-normal ml-1\">(Optional)</span>\n }\n </Label>\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n {renderInput()}\n </div>\n );\n}\n\n","import React, { useState, useEffect } from 'react';\nimport JobInputRenderer from './JobInputRenderer';\nimport { JobInputSchemaType, getDefaultValue } from '../lib/job-input-schema';\nimport clsx from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n// Utility for merging class names\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(inputs));\n}\n\n// --- Simplified UI Components embedded for library portability ---\n// In a real scenario, you might want to accept these as props or peer dependencies,\n// but for a self-contained library that uses Tailwind, we can provide simple versions.\n\nconst Button = React.forwardRef<HTMLButtonElement, React.ButtonHTMLAttributes<HTMLButtonElement> & { variant?: 'default' | 'outline' | 'destructive' | 'secondary' | 'ghost' | 'link' }>(\n ({ className, variant = 'default', ...props }, ref) => {\n const variants = {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n };\n \n return (\n <button\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 h-10 px-4 py-2\",\n variants[variant],\n className\n )}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"rounded-lg border bg-card text-card-foreground shadow-sm\", className)} {...props} />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)} {...props} />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nconst Separator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"shrink-0 bg-border h-[1px] w-full\", className)} {...props} />\n));\nSeparator.displayName = \"Separator\";\n\n// --- Main Component ---\n\nexport interface JobInputsFormRendererProps {\n jobInputSchemas: JobInputSchemaType[];\n onFormDataChange?: (\n formData: Record<string, string | number | boolean | number[] | null>,\n ) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport default function JobInputsFormRenderer({\n jobInputSchemas,\n onFormDataChange,\n disabled = false,\n className,\n}: JobInputsFormRendererProps) {\n const [formData, setFormData] = useState<\n Record<string, string | number | boolean | number[] | null>\n >({});\n\n // Initialize form data with default values\n useEffect(() => {\n const initialData: Record<\n string,\n string | number | boolean | number[] | null\n > = {};\n jobInputSchemas.forEach((schema) => {\n initialData[schema.id] = getDefaultValue(schema);\n });\n setFormData(initialData);\n }, [jobInputSchemas]);\n\n // Notify parent of form data changes\n useEffect(() => {\n if (onFormDataChange) {\n onFormDataChange(formData);\n }\n }, [formData, onFormDataChange]);\n\n const handleFieldChange = (\n fieldId: string,\n value: string | number | boolean | number[] | null,\n ) => {\n setFormData((prev) => ({\n ...prev,\n [fieldId]: value,\n }));\n };\n\n const handleClear = () => {\n const clearedData: Record<\n string,\n string | number | boolean | number[] | null\n > = {};\n jobInputSchemas.forEach((schema) => {\n clearedData[schema.id] = getDefaultValue(schema);\n });\n setFormData(clearedData);\n };\n\n if (jobInputSchemas.length === 0) {\n return (\n <Card className={className}>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground text-center\">\n No input fields defined in the schema.\n </p>\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card className={cn(\"bg-muted/20\", className)}>\n <CardHeader>\n <CardTitle className=\"text-lg\">Rendered Form</CardTitle>\n <p className=\"text-sm text-muted-foreground\">\n This is how the form will appear in Sokosumi\n </p>\n </CardHeader>\n <CardContent className=\"space-y-6\">\n <form className=\"space-y-4\" onSubmit={(e) => e.preventDefault()}>\n {jobInputSchemas.map((schema, index) => (\n <div key={schema.id}>\n <JobInputRenderer\n jobInputSchema={schema}\n value={formData[schema.id]}\n onChange={(value) => handleFieldChange(schema.id, value)}\n disabled={disabled}\n />\n {index < jobInputSchemas.length - 1 && (\n <Separator className=\"my-4\" />\n )}\n </div>\n ))}\n </form>\n\n <div className=\"flex justify-between items-center pt-4\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleClear}\n disabled={disabled}\n >\n Clear Form\n </Button>\n\n <div className=\"text-sm text-muted-foreground\">\n {Object.keys(formData).length} field\n {Object.keys(formData).length !== 1 ? 's' : ''}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/job-input-schema.ts","../src/lib/validation.ts","../src/components/JobInputRenderer.tsx","../src/components/JobInputsFormRenderer.tsx","../src/components/SchemaPlayground.tsx"],"names":["ValidJobInputTypes","ValidJobInputValidationTypes","ValidJobInputFormatValues","z","jobInputSchema","jobInputStringSchema","jobInputTextareaSchema","jobInputNumberSchema","jobInputOptionSchema","jobInputFileSchema","React","jsx","jsxs","twMerge","clsx","useState","useEffect","Fragment","Editor"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\n\n// Enums matching sokosumi's implementation\nexport enum ValidJobInputTypes {\n STRING = 'string',\n TEXTAREA = 'textarea',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n OPTION = 'option',\n FILE = 'file',\n NONE = 'none',\n}\n\nexport enum ValidJobInputValidationTypes {\n MIN = 'min',\n MAX = 'max',\n FORMAT = 'format',\n OPTIONAL = 'optional',\n}\n\nexport enum ValidJobInputFormatValues {\n URL = 'url',\n EMAIL = 'email',\n INTEGER = 'integer',\n NON_EMPTY = 'nonempty',\n}\n\n// Validation schemas\nexport const optionalValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.OPTIONAL]),\n value: z.enum(['true', 'false'] as const),\n});\n\nexport const minValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.MIN]),\n value: z.number({ coerce: true }).int().min(0),\n});\n\nexport const maxValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.MAX]),\n value: z.number({ coerce: true }).int().min(0),\n});\n\nexport const formatUrlValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.URL]),\n});\n\nexport const formatEmailValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.EMAIL]),\n});\n\nexport const formatIntegerValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.INTEGER]),\n});\n\nexport const formatNonEmptyValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.NON_EMPTY]),\n});\n\n// Job input schemas\nexport const jobInputStringSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.STRING]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z\n .array(\n optionalValidationSchema\n .or(minValidationSchema)\n .or(maxValidationSchema)\n .or(formatNonEmptyValidationSchema)\n .or(formatUrlValidationSchema)\n .or(formatEmailValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputTextareaSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.TEXTAREA]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z\n .array(\n optionalValidationSchema\n .or(minValidationSchema)\n .or(maxValidationSchema)\n .or(formatNonEmptyValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputNumberSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.NUMBER]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z\n .array(\n optionalValidationSchema\n .or(minValidationSchema)\n .or(maxValidationSchema)\n .or(formatIntegerValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputBooleanSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.BOOLEAN]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z.array(optionalValidationSchema).optional(),\n});\n\nexport const jobInputOptionSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.OPTION]),\n name: z.string().min(1),\n data: z.object({\n values: z.array(z.string().min(1)).min(1),\n placeholder: z.string().optional(),\n description: z.string().optional(),\n }),\n validations: z\n .array(\n optionalValidationSchema.or(minValidationSchema).or(maxValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputFileSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.FILE]),\n name: z.string().min(1),\n data: z.object({\n accept: z.string().optional(),\n maxSize: z.string().optional(),\n multiple: z.boolean().optional(),\n description: z.string().optional(),\n outputFormat: z.string().optional(),\n }),\n validations: z.array(optionalValidationSchema).optional(),\n});\n\nexport const jobInputNoneSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.NONE]),\n name: z.string().min(1),\n data: z\n .object({\n description: z.string().min(1).optional(),\n })\n .optional(),\n});\n\n// Union schema for all job input types\nexport const jobInputSchema = jobInputStringSchema\n .or(jobInputTextareaSchema)\n .or(jobInputNumberSchema)\n .or(jobInputBooleanSchema)\n .or(jobInputOptionSchema)\n .or(jobInputFileSchema)\n .or(jobInputNoneSchema);\n\nexport type JobInputSchemaType = z.infer<typeof jobInputSchema>;\nexport type JobInputStringSchemaType = z.infer<typeof jobInputStringSchema>;\nexport type JobInputTextareaSchemaType = z.infer<typeof jobInputTextareaSchema>;\nexport type JobInputNumberSchemaType = z.infer<typeof jobInputNumberSchema>;\nexport type JobInputBooleanSchemaType = z.infer<typeof jobInputBooleanSchema>;\nexport type JobInputOptionSchemaType = z.infer<typeof jobInputOptionSchema>;\nexport type JobInputFileSchemaType = z.infer<typeof jobInputFileSchema>;\nexport type JobInputNoneSchemaType = z.infer<typeof jobInputNoneSchema>;\n\n// Form schema generation (based on sokosumi's approach)\nexport const makeZodSchemaFromJobInputSchema = (\n jobInputSchema: JobInputSchemaType,\n) => {\n switch (jobInputSchema.type) {\n case ValidJobInputTypes.STRING:\n return makeZodSchemaFromJobInputStringSchema(jobInputSchema);\n case ValidJobInputTypes.TEXTAREA:\n return makeZodSchemaFromJobInputTextareaSchema(jobInputSchema);\n case ValidJobInputTypes.NUMBER:\n return makeZodSchemaFromJobInputNumberSchema(jobInputSchema);\n case ValidJobInputTypes.BOOLEAN:\n return makeZodSchemaFromJobInputBooleanSchema();\n case ValidJobInputTypes.OPTION:\n return makeZodSchemaFromJobInputOptionSchema(jobInputSchema);\n case ValidJobInputTypes.FILE:\n return makeZodSchemaFromJobInputFileSchema(jobInputSchema);\n case ValidJobInputTypes.NONE:\n return z.never().nullable();\n }\n};\n\nconst makeZodSchemaFromJobInputStringSchema = (\n jobInputStringSchema: JobInputStringSchemaType,\n) => {\n const { validations } = jobInputStringSchema;\n const defaultSchema = z.string();\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.FORMAT:\n switch (value) {\n case ValidJobInputFormatValues.URL:\n return acc.url();\n case ValidJobInputFormatValues.EMAIL:\n return acc.email();\n case ValidJobInputFormatValues.NON_EMPTY:\n return acc.min(1);\n default:\n return acc;\n }\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputTextareaSchema = (\n jobInputTextareaSchema: JobInputTextareaSchemaType,\n) => {\n const { validations } = jobInputTextareaSchema;\n const defaultSchema = z.string();\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.FORMAT:\n switch (value) {\n case ValidJobInputFormatValues.NON_EMPTY:\n return acc.min(1);\n default:\n return acc;\n }\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputNumberSchema = (\n jobInputNumberSchema: JobInputNumberSchemaType,\n) => {\n const { validations } = jobInputNumberSchema;\n const defaultSchema = z.number({ coerce: true });\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.FORMAT:\n switch (value) {\n case ValidJobInputFormatValues.INTEGER:\n return acc.int();\n default:\n return acc;\n }\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputBooleanSchema = () => {\n return z.boolean();\n};\n\nconst makeZodSchemaFromJobInputOptionSchema = (\n jobInputOptionSchema: JobInputOptionSchemaType,\n) => {\n const {\n data: { values },\n validations,\n } = jobInputOptionSchema;\n const defaultSchema = z.array(\n z\n .number()\n .int()\n .nonnegative()\n .max(values.length - 1),\n );\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputFileSchema = (\n jobInputFileSchema: JobInputFileSchemaType,\n) => {\n const { validations } = jobInputFileSchema;\n const defaultSchema = z.string();\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n default:\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\n// Helper functions\nexport const isOptional = (jobInputSchema: JobInputSchemaType): boolean => {\n if (!('validations' in jobInputSchema) || !jobInputSchema.validations)\n return false;\n return jobInputSchema.validations.some(\n (v) =>\n v.validation === ValidJobInputValidationTypes.OPTIONAL &&\n v.value === 'true',\n );\n};\n\nexport const isSingleOption = (jobInputSchema: JobInputSchemaType): boolean => {\n if (jobInputSchema.type !== ValidJobInputTypes.OPTION) return false;\n if (!('validations' in jobInputSchema) || !jobInputSchema.validations)\n return false;\n\n const minValidation = jobInputSchema.validations.find(\n (v) => v.validation === ValidJobInputValidationTypes.MIN,\n );\n const maxValidation = jobInputSchema.validations.find(\n (v) => v.validation === ValidJobInputValidationTypes.MAX,\n );\n\n return minValidation?.value === 1 && maxValidation?.value === 1;\n};\n\nexport const getDefaultValue = (jobInputSchema: JobInputSchemaType) => {\n const { type } = jobInputSchema;\n switch (type) {\n case ValidJobInputTypes.STRING:\n return '';\n case ValidJobInputTypes.TEXTAREA:\n return '';\n case ValidJobInputTypes.BOOLEAN:\n return false;\n case ValidJobInputTypes.NUMBER:\n return null;\n case ValidJobInputTypes.OPTION:\n return [];\n case ValidJobInputTypes.FILE:\n return null;\n case ValidJobInputTypes.NONE:\n return null;\n }\n};\n\n\n","// This file contains the extracted validation logic.\n// Note: It relies on jobInputSchema which is not yet provided, so we will need to update imports.\n\nimport { jobInputSchema, JobInputSchemaType } from './job-input-schema';\n\nexport type { JobInputSchemaType };\n\nexport interface ValidationResult {\n valid: boolean;\n errors: { message: string; line?: number }[];\n parsedSchemas?: JobInputSchemaType[];\n}\n\n/**\n * Validates a JSON string against the Job Input Schema.\n * Tries to provide line numbers for errors where possible.\n */\nexport function validateSchemaWithZod(input: string): ValidationResult {\n let parsed: any;\n try {\n parsed = JSON.parse(input);\n } catch (e: any) {\n // Try to extract line number from error message\n const match = e.message.match(/at position (\\d+)/);\n let line;\n if (match) {\n const pos = parseInt(match[1], 10);\n line = input.slice(0, pos).split('\\n').length;\n }\n return {\n valid: false,\n errors: [{ message: 'Invalid JSON: ' + e.message, line }],\n };\n }\n\n const errors: { message: string; line?: number }[] = [];\n const schemas: JobInputSchemaType[] = [];\n\n // Helper to get line number for a key\n const getLine = (key: string) => {\n const idx = input.indexOf('\"' + key + '\"');\n if (idx === -1) return undefined;\n return input.slice(0, idx).split('\\n').length;\n };\n\n // Handle wrapped format, single schema, and array of schemas\n let schemasToValidate: any[];\n if (parsed.input_data && Array.isArray(parsed.input_data)) {\n // Handle wrapped format: { \"input_data\": [...] }\n schemasToValidate = parsed.input_data;\n } else if (Array.isArray(parsed)) {\n // Handle array format: [...]\n schemasToValidate = parsed;\n } else {\n // Handle single schema format: { ... }\n schemasToValidate = [parsed];\n }\n\n schemasToValidate.forEach((schema: any, index: number) => {\n try {\n const validatedSchema = jobInputSchema.parse(schema);\n schemas.push(validatedSchema);\n } catch (zodError: any) {\n if (zodError.errors) {\n zodError.errors.forEach((error: any) => {\n errors.push({\n message: `Schema ${index + 1}: ${error.message}`,\n line: getLine(error.path?.[0] || ''),\n });\n });\n } else {\n errors.push({\n message: `Schema ${index + 1}: ${zodError.message}`,\n line: getLine('type'),\n });\n }\n }\n });\n\n if (errors.length > 0) {\n return { valid: false, errors };\n }\n\n return {\n valid: true,\n errors: [],\n parsedSchemas: schemas,\n };\n}\n\n","// Placeholder for JobInputRenderer component\n// This will be replaced by the actual content if provided, \n// or we need to request it. \n// Based on imports in JobInputsFormRenderer, this file is expected to exist.\n\nimport React from 'react';\nimport { JobInputSchemaType, ValidJobInputTypes } from '../lib/job-input-schema';\n\n// Simple UI Components for the renderer\nimport { cn } from './JobInputsFormRenderer';\n\nconst Label = React.forwardRef<HTMLLabelElement, React.LabelHTMLAttributes<HTMLLabelElement>>(({ className, ...props }, ref) => (\n <label ref={ref} className={cn(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\", className)} {...props} />\n));\nLabel.displayName = \"Label\";\n\nconst Input = React.forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>(({ className, type, ...props }, ref) => (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n));\nInput.displayName = \"Input\";\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, React.TextareaHTMLAttributes<HTMLTextAreaElement>>(({ className, ...props }, ref) => (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n));\nTextarea.displayName = \"Textarea\";\n\nconst Checkbox = React.forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>(({ className, ...props }, ref) => (\n <input type=\"checkbox\" ref={ref} className={cn(\"h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary\", className)} {...props} />\n));\nCheckbox.displayName = \"Checkbox\";\n\n\ninterface JobInputRendererProps {\n jobInputSchema: JobInputSchemaType;\n value: string | number | boolean | number[] | null;\n onChange: (value: string | number | boolean | number[] | null) => void;\n disabled?: boolean;\n}\n\nexport default function JobInputRenderer({\n jobInputSchema,\n value,\n onChange,\n disabled,\n}: JobInputRendererProps) {\n const { id, name, type, data } = jobInputSchema;\n const description = data?.description;\n const placeholder = 'placeholder' in (data || {}) ? (data as any).placeholder : '';\n\n const renderInput = () => {\n switch (type) {\n case ValidJobInputTypes.STRING:\n return (\n <Input\n id={id}\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n />\n );\n case ValidJobInputTypes.TEXTAREA:\n return (\n <Textarea\n id={id}\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n />\n );\n case ValidJobInputTypes.NUMBER:\n return (\n <Input\n id={id}\n type=\"number\"\n value={value !== null ? String(value) : ''}\n onChange={(e) => {\n const val = e.target.value;\n onChange(val === '' ? null : Number(val));\n }}\n placeholder={placeholder}\n disabled={disabled}\n />\n );\n case ValidJobInputTypes.BOOLEAN:\n return (\n <div className=\"flex items-center space-x-2\">\n <Checkbox\n id={id}\n checked={!!value}\n onChange={(e) => onChange(e.target.checked)}\n disabled={disabled}\n />\n <label\n htmlFor={id}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {placeholder || 'Yes'}\n </label>\n </div>\n );\n case ValidJobInputTypes.OPTION:\n const options = (data as any).values || [];\n return (\n <select\n id={id}\n className=\"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n value={Array.isArray(value) && value.length > 0 ? value[0] : ''} // Simple single select for now\n onChange={(e) => {\n // Assuming single select maps to index for now based on schema definition or simple value\n // The schema definition says number[] for value, suggesting indices\n // But let's verify logic.\n // For now, just passing index if possible or finding index\n const selectedIndex = options.indexOf(e.target.value);\n onChange(selectedIndex >= 0 ? [selectedIndex] : []);\n }}\n disabled={disabled}\n >\n <option value=\"\">Select...</option>\n {options.map((opt: string) => (\n <option key={opt} value={opt}>{opt}</option>\n ))}\n </select>\n );\n case ValidJobInputTypes.FILE:\n return (\n <Input\n id={id}\n type=\"file\"\n disabled={disabled}\n onChange={() => {\n // File handling logic would go here\n // For now, just a placeholder\n }}\n />\n )\n default:\n return <div>Unsupported input type: {type}</div>;\n }\n };\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex flex-col space-y-1\">\n <Label htmlFor={id}>\n {name}\n {'validations' in jobInputSchema && jobInputSchema.validations?.some((v: any) => v.validation === 'optional' && v.value === 'true') && \n <span className=\"text-muted-foreground font-normal ml-1\">(Optional)</span>\n }\n </Label>\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n {renderInput()}\n </div>\n );\n}\n\n","import React, { useState, useEffect } from 'react';\nimport JobInputRenderer from './JobInputRenderer';\nimport { JobInputSchemaType, getDefaultValue } from '../lib/job-input-schema';\nimport clsx from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n// Utility for merging class names\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(inputs));\n}\n\n// --- Simplified UI Components embedded for library portability ---\n// In a real scenario, you might want to accept these as props or peer dependencies,\n// but for a self-contained library that uses Tailwind, we can provide simple versions.\n\nconst Button = React.forwardRef<HTMLButtonElement, React.ButtonHTMLAttributes<HTMLButtonElement> & { variant?: 'default' | 'outline' | 'destructive' | 'secondary' | 'ghost' | 'link' }>(\n ({ className, variant = 'default', ...props }, ref) => {\n const variants = {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n };\n \n return (\n <button\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 h-10 px-4 py-2\",\n variants[variant],\n className\n )}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"rounded-lg border bg-card text-card-foreground shadow-sm\", className)} {...props} />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)} {...props} />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nconst Separator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"shrink-0 bg-border h-[1px] w-full\", className)} {...props} />\n));\nSeparator.displayName = \"Separator\";\n\n// --- Main Component ---\n\nexport interface JobInputsFormRendererProps {\n jobInputSchemas: JobInputSchemaType[];\n onFormDataChange?: (\n formData: Record<string, string | number | boolean | number[] | null>,\n ) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport default function JobInputsFormRenderer({\n jobInputSchemas,\n onFormDataChange,\n disabled = false,\n className,\n}: JobInputsFormRendererProps) {\n const [formData, setFormData] = useState<\n Record<string, string | number | boolean | number[] | null>\n >({});\n\n // Initialize form data with default values\n useEffect(() => {\n const initialData: Record<\n string,\n string | number | boolean | number[] | null\n > = {};\n jobInputSchemas.forEach((schema) => {\n initialData[schema.id] = getDefaultValue(schema);\n });\n setFormData(initialData);\n // Intentionally omitting jobInputSchemas from dependency array to prevent infinite loops \n // if the array reference changes on every render from the parent.\n // We really only want to reset when the *content* of schemas changes significantly \n // or on mount, but basic array comparison is reference-based.\n // A better approach would be to use a JSON.stringify comparison or just let parent handle keying.\n // For now, we will depend on JSON.stringify(jobInputSchemas) to detect actual changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(jobInputSchemas)]);\n\n // Notify parent of form data changes\n useEffect(() => {\n if (onFormDataChange) {\n onFormDataChange(formData);\n }\n }, [formData, onFormDataChange]);\n\n const handleFieldChange = (\n fieldId: string,\n value: string | number | boolean | number[] | null,\n ) => {\n setFormData((prev) => ({\n ...prev,\n [fieldId]: value,\n }));\n };\n\n const handleClear = () => {\n const clearedData: Record<\n string,\n string | number | boolean | number[] | null\n > = {};\n jobInputSchemas.forEach((schema) => {\n clearedData[schema.id] = getDefaultValue(schema);\n });\n setFormData(clearedData);\n };\n\n if (jobInputSchemas.length === 0) {\n return (\n <Card className={className}>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground text-center\">\n No input fields defined in the schema.\n </p>\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card className={cn(\"bg-muted/20\", className)}>\n <CardContent className=\"space-y-6 pt-6\">\n <form className=\"space-y-4\" onSubmit={(e) => e.preventDefault()}>\n {jobInputSchemas.map((schema, index) => (\n <div key={schema.id}>\n <JobInputRenderer\n jobInputSchema={schema}\n value={formData[schema.id]}\n onChange={(value) => handleFieldChange(schema.id, value)}\n disabled={disabled}\n />\n {index < jobInputSchemas.length - 1 && (\n <Separator className=\"my-4\" />\n )}\n </div>\n ))}\n </form>\n\n <div className=\"flex justify-between items-center pt-4\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleClear}\n disabled={disabled}\n >\n Clear Form\n </Button>\n\n <div className=\"text-sm text-muted-foreground\">\n {Object.keys(formData).length} field\n {Object.keys(formData).length !== 1 ? 's' : ''}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n}\n\n","import React, { useState, useEffect } from 'react';\nimport Editor from '@monaco-editor/react';\nimport JobInputsFormRenderer from './JobInputsFormRenderer';\nimport { validateSchemaWithZod } from '../lib/validation';\nimport { cn } from './JobInputsFormRenderer';\n\nexport interface SchemaPlaygroundProps {\n initialSchema?: string;\n examples?: Array<{ label: string; value: string }>;\n className?: string;\n onSchemaChange?: (schema: string, isValid: boolean) => void;\n}\n\nexport default function SchemaPlayground({\n initialSchema = '[]',\n examples = [],\n className,\n onSchemaChange,\n}: SchemaPlaygroundProps) {\n const [schemaInput, setSchemaInput] = useState(initialSchema);\n const [selectedExample, setSelectedExample] = useState(examples.length > 0 ? examples[0].label : '');\n \n // Reset form data when schema changes (if we were tracking it)\n // useEffect(() => {\n // setFormData({});\n // }, [schemaInput]);\n\n // Use effect for initial example selection if provided and initialSchema is not set/matches\n useEffect(() => {\n if (examples.length > 0 && !selectedExample) {\n // If current input matches an example, select it\n const match = examples.find(e => e.value === schemaInput);\n if (match) setSelectedExample(match.label);\n }\n }, [examples, schemaInput, selectedExample]);\n\n const handleSelectExample = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const val = e.target.value;\n setSelectedExample(val);\n const found = examples.find((ex) => ex.label === val);\n if (found) {\n setSchemaInput(found.value);\n }\n };\n\n const validationResult = validateSchemaWithZod(schemaInput);\n\n useEffect(() => {\n if (onSchemaChange) {\n onSchemaChange(schemaInput, validationResult.valid);\n }\n }, [schemaInput, validationResult.valid, onSchemaChange]);\n\n return (\n <div className={cn(\"grid grid-cols-1 lg:grid-cols-2 gap-8 h-full\", className)}>\n {/* Left Column: Schema Editor */}\n <div className=\"flex flex-col gap-4 h-full min-h-[500px]\">\n <h2 className=\"text-lg font-semibold text-gray-900\">1. Schema Definition (JSON)</h2>\n \n <div className=\"flex-1 relative border rounded-lg overflow-hidden shadow-sm bg-white flex flex-col\">\n <div className=\"flex items-center justify-between px-4 py-2 border-b bg-gray-50\">\n <div className=\"flex items-center gap-2\">\n {examples.length > 0 && (\n <>\n <span className=\"text-xs font-medium text-gray-700 whitespace-nowrap\">Load Example:</span>\n <select\n className=\"border rounded px-2 py-1 text-xs bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 max-w-[200px]\"\n value={selectedExample}\n onChange={handleSelectExample}\n >\n {examples.map((ex) => (\n <option key={ex.label} value={ex.label}>\n {ex.label}\n </option>\n ))}\n </select>\n </>\n )}\n </div>\n <div className={`text-xs px-2 py-1 rounded-full font-medium ${validationResult.valid ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800'}`}>\n {validationResult.valid ? 'Valid Schema' : 'Invalid Schema'}\n </div>\n </div>\n\n <div className=\"flex-1\">\n <Editor\n height=\"100%\"\n defaultLanguage=\"json\"\n value={schemaInput}\n onChange={(value) => {\n setSchemaInput(value || '');\n if (examples.length > 0) {\n // Check if still matches an example, otherwise clear selection\n const match = examples.find(e => e.value === (value || ''));\n if (match) {\n setSelectedExample(match.label);\n } else {\n setSelectedExample('');\n }\n }\n }}\n options={{\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n fontSize: 14,\n formatOnPaste: true,\n automaticLayout: true,\n }}\n />\n </div>\n \n {!validationResult.valid && (\n <div className=\"border-t bg-red-50 p-4 text-sm max-h-40 overflow-y-auto z-10 relative\">\n <p className=\"font-bold text-red-800 mb-2\">Validation Errors:</p>\n <ul className=\"list-disc pl-5 space-y-1 text-red-700\">\n {validationResult.errors.map((err, i) => (\n <li key={i}>\n {err.line ? <span className=\"font-mono bg-red-100 px-1 rounded mr-1\">line {err.line}</span> : null}\n {err.message}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n </div>\n\n {/* Right Column: Preview */}\n <div className=\"flex flex-col gap-4 h-full overflow-hidden min-h-[500px]\">\n <div>\n <h2 className=\"text-lg font-semibold text-gray-900\">2. Form Preview</h2>\n </div>\n \n <div className=\"flex-1 flex flex-col gap-4 overflow-hidden\">\n {validationResult.valid ? (\n <>\n <div className=\"flex-1 overflow-y-auto border rounded-lg shadow-sm bg-white p-1\">\n {/* Component Preview Wrapper */}\n <JobInputsFormRenderer\n jobInputSchemas={validationResult.parsedSchemas || []}\n className=\"h-full border-0 shadow-none\" \n />\n </div>\n </>\n ) : (\n <div className=\"flex-1 border-2 border-dashed border-gray-300 rounded-lg flex items-center justify-center bg-gray-50 text-gray-400\">\n <div className=\"text-center\">\n <p className=\"text-lg font-medium\">Preview Unavailable</p>\n <p className=\"text-sm\">Fix schema errors to see the form</p>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import React2, { useState, useEffect } from 'react';
|
|
3
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
4
|
import clsx from 'clsx';
|
|
5
5
|
import { twMerge } from 'tailwind-merge';
|
|
6
|
+
import Editor from '@monaco-editor/react';
|
|
6
7
|
|
|
7
8
|
// src/lib/job-input-schema.ts
|
|
8
9
|
var ValidJobInputTypes = /* @__PURE__ */ ((ValidJobInputTypes2) => {
|
|
@@ -578,7 +579,7 @@ function JobInputsFormRenderer({
|
|
|
578
579
|
initialData[schema.id] = getDefaultValue(schema);
|
|
579
580
|
});
|
|
580
581
|
setFormData(initialData);
|
|
581
|
-
}, [jobInputSchemas]);
|
|
582
|
+
}, [JSON.stringify(jobInputSchemas)]);
|
|
582
583
|
useEffect(() => {
|
|
583
584
|
if (onFormDataChange) {
|
|
584
585
|
onFormDataChange(formData);
|
|
@@ -600,45 +601,139 @@ function JobInputsFormRenderer({
|
|
|
600
601
|
if (jobInputSchemas.length === 0) {
|
|
601
602
|
return /* @__PURE__ */ jsx(Card, { className, children: /* @__PURE__ */ jsx(CardContent, { className: "pt-6", children: /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground text-center", children: "No input fields defined in the schema." }) }) });
|
|
602
603
|
}
|
|
603
|
-
return /* @__PURE__ */
|
|
604
|
-
/* @__PURE__ */ jsxs(
|
|
605
|
-
/* @__PURE__ */ jsx(
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
604
|
+
return /* @__PURE__ */ jsx(Card, { className: cn("bg-muted/20", className), children: /* @__PURE__ */ jsxs(CardContent, { className: "space-y-6 pt-6", children: [
|
|
605
|
+
/* @__PURE__ */ jsx("form", { className: "space-y-4", onSubmit: (e) => e.preventDefault(), children: jobInputSchemas.map((schema, index) => /* @__PURE__ */ jsxs("div", { children: [
|
|
606
|
+
/* @__PURE__ */ jsx(
|
|
607
|
+
JobInputRenderer,
|
|
608
|
+
{
|
|
609
|
+
jobInputSchema: schema,
|
|
610
|
+
value: formData[schema.id],
|
|
611
|
+
onChange: (value) => handleFieldChange(schema.id, value),
|
|
612
|
+
disabled
|
|
613
|
+
}
|
|
614
|
+
),
|
|
615
|
+
index < jobInputSchemas.length - 1 && /* @__PURE__ */ jsx(Separator, { className: "my-4" })
|
|
616
|
+
] }, schema.id)) }),
|
|
617
|
+
/* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center pt-4", children: [
|
|
618
|
+
/* @__PURE__ */ jsx(
|
|
619
|
+
Button,
|
|
620
|
+
{
|
|
621
|
+
type: "button",
|
|
622
|
+
variant: "outline",
|
|
623
|
+
onClick: handleClear,
|
|
624
|
+
disabled,
|
|
625
|
+
children: "Clear Form"
|
|
626
|
+
}
|
|
627
|
+
),
|
|
628
|
+
/* @__PURE__ */ jsxs("div", { className: "text-sm text-muted-foreground", children: [
|
|
629
|
+
Object.keys(formData).length,
|
|
630
|
+
" field",
|
|
631
|
+
Object.keys(formData).length !== 1 ? "s" : ""
|
|
632
|
+
] })
|
|
633
|
+
] })
|
|
634
|
+
] }) });
|
|
635
|
+
}
|
|
636
|
+
function SchemaPlayground({
|
|
637
|
+
initialSchema = "[]",
|
|
638
|
+
examples = [],
|
|
639
|
+
className,
|
|
640
|
+
onSchemaChange
|
|
641
|
+
}) {
|
|
642
|
+
const [schemaInput, setSchemaInput] = useState(initialSchema);
|
|
643
|
+
const [selectedExample, setSelectedExample] = useState(examples.length > 0 ? examples[0].label : "");
|
|
644
|
+
useEffect(() => {
|
|
645
|
+
if (examples.length > 0 && !selectedExample) {
|
|
646
|
+
const match = examples.find((e) => e.value === schemaInput);
|
|
647
|
+
if (match) setSelectedExample(match.label);
|
|
648
|
+
}
|
|
649
|
+
}, [examples, schemaInput, selectedExample]);
|
|
650
|
+
const handleSelectExample = (e) => {
|
|
651
|
+
const val = e.target.value;
|
|
652
|
+
setSelectedExample(val);
|
|
653
|
+
const found = examples.find((ex) => ex.label === val);
|
|
654
|
+
if (found) {
|
|
655
|
+
setSchemaInput(found.value);
|
|
656
|
+
}
|
|
657
|
+
};
|
|
658
|
+
const validationResult = validateSchemaWithZod(schemaInput);
|
|
659
|
+
useEffect(() => {
|
|
660
|
+
if (onSchemaChange) {
|
|
661
|
+
onSchemaChange(schemaInput, validationResult.valid);
|
|
662
|
+
}
|
|
663
|
+
}, [schemaInput, validationResult.valid, onSchemaChange]);
|
|
664
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("grid grid-cols-1 lg:grid-cols-2 gap-8 h-full", className), children: [
|
|
665
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 h-full min-h-[500px]", children: [
|
|
666
|
+
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "1. Schema Definition (JSON)" }),
|
|
667
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 relative border rounded-lg overflow-hidden shadow-sm bg-white flex flex-col", children: [
|
|
668
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-b bg-gray-50", children: [
|
|
669
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: examples.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
670
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-gray-700 whitespace-nowrap", children: "Load Example:" }),
|
|
671
|
+
/* @__PURE__ */ jsx(
|
|
672
|
+
"select",
|
|
673
|
+
{
|
|
674
|
+
className: "border rounded px-2 py-1 text-xs bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 max-w-[200px]",
|
|
675
|
+
value: selectedExample,
|
|
676
|
+
onChange: handleSelectExample,
|
|
677
|
+
children: examples.map((ex) => /* @__PURE__ */ jsx("option", { value: ex.label, children: ex.label }, ex.label))
|
|
678
|
+
}
|
|
679
|
+
)
|
|
680
|
+
] }) }),
|
|
681
|
+
/* @__PURE__ */ jsx("div", { className: `text-xs px-2 py-1 rounded-full font-medium ${validationResult.valid ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800"}`, children: validationResult.valid ? "Valid Schema" : "Invalid Schema" })
|
|
682
|
+
] }),
|
|
683
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(
|
|
684
|
+
Editor,
|
|
624
685
|
{
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
686
|
+
height: "100%",
|
|
687
|
+
defaultLanguage: "json",
|
|
688
|
+
value: schemaInput,
|
|
689
|
+
onChange: (value) => {
|
|
690
|
+
setSchemaInput(value || "");
|
|
691
|
+
if (examples.length > 0) {
|
|
692
|
+
const match = examples.find((e) => e.value === (value || ""));
|
|
693
|
+
if (match) {
|
|
694
|
+
setSelectedExample(match.label);
|
|
695
|
+
} else {
|
|
696
|
+
setSelectedExample("");
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
},
|
|
700
|
+
options: {
|
|
701
|
+
minimap: { enabled: false },
|
|
702
|
+
scrollBeyondLastLine: false,
|
|
703
|
+
fontSize: 14,
|
|
704
|
+
formatOnPaste: true,
|
|
705
|
+
automaticLayout: true
|
|
706
|
+
}
|
|
630
707
|
}
|
|
631
|
-
),
|
|
632
|
-
/* @__PURE__ */ jsxs("div", { className: "text-sm
|
|
633
|
-
|
|
634
|
-
"
|
|
635
|
-
|
|
708
|
+
) }),
|
|
709
|
+
!validationResult.valid && /* @__PURE__ */ jsxs("div", { className: "border-t bg-red-50 p-4 text-sm max-h-40 overflow-y-auto z-10 relative", children: [
|
|
710
|
+
/* @__PURE__ */ jsx("p", { className: "font-bold text-red-800 mb-2", children: "Validation Errors:" }),
|
|
711
|
+
/* @__PURE__ */ jsx("ul", { className: "list-disc pl-5 space-y-1 text-red-700", children: validationResult.errors.map((err, i) => /* @__PURE__ */ jsxs("li", { children: [
|
|
712
|
+
err.line ? /* @__PURE__ */ jsxs("span", { className: "font-mono bg-red-100 px-1 rounded mr-1", children: [
|
|
713
|
+
"line ",
|
|
714
|
+
err.line
|
|
715
|
+
] }) : null,
|
|
716
|
+
err.message
|
|
717
|
+
] }, i)) })
|
|
636
718
|
] })
|
|
637
719
|
] })
|
|
720
|
+
] }),
|
|
721
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 h-full overflow-hidden min-h-[500px]", children: [
|
|
722
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "2. Form Preview" }) }),
|
|
723
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 flex flex-col gap-4 overflow-hidden", children: validationResult.valid ? /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto border rounded-lg shadow-sm bg-white p-1", children: /* @__PURE__ */ jsx(
|
|
724
|
+
JobInputsFormRenderer,
|
|
725
|
+
{
|
|
726
|
+
jobInputSchemas: validationResult.parsedSchemas || [],
|
|
727
|
+
className: "h-full border-0 shadow-none"
|
|
728
|
+
}
|
|
729
|
+
) }) }) : /* @__PURE__ */ jsx("div", { className: "flex-1 border-2 border-dashed border-gray-300 rounded-lg flex items-center justify-center bg-gray-50 text-gray-400", children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
730
|
+
/* @__PURE__ */ jsx("p", { className: "text-lg font-medium", children: "Preview Unavailable" }),
|
|
731
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm", children: "Fix schema errors to see the form" })
|
|
732
|
+
] }) }) })
|
|
638
733
|
] })
|
|
639
734
|
] });
|
|
640
735
|
}
|
|
641
736
|
|
|
642
|
-
export { JobInputRenderer, JobInputsFormRenderer, ValidJobInputFormatValues, ValidJobInputTypes, ValidJobInputValidationTypes, formatEmailValidationSchema, formatIntegerValidationSchema, formatNonEmptyValidationSchema, formatUrlValidationSchema, getDefaultValue, isOptional, isSingleOption, jobInputBooleanSchema, jobInputFileSchema, jobInputNoneSchema, jobInputNumberSchema, jobInputOptionSchema, jobInputSchema, jobInputStringSchema, jobInputTextareaSchema, makeZodSchemaFromJobInputSchema, maxValidationSchema, minValidationSchema, optionalValidationSchema, validateSchemaWithZod };
|
|
737
|
+
export { JobInputRenderer, JobInputsFormRenderer, SchemaPlayground, ValidJobInputFormatValues, ValidJobInputTypes, ValidJobInputValidationTypes, formatEmailValidationSchema, formatIntegerValidationSchema, formatNonEmptyValidationSchema, formatUrlValidationSchema, getDefaultValue, isOptional, isSingleOption, jobInputBooleanSchema, jobInputFileSchema, jobInputNoneSchema, jobInputNumberSchema, jobInputOptionSchema, jobInputSchema, jobInputStringSchema, jobInputTextareaSchema, makeZodSchemaFromJobInputSchema, maxValidationSchema, minValidationSchema, optionalValidationSchema, validateSchemaWithZod };
|
|
643
738
|
//# sourceMappingURL=index.mjs.map
|
|
644
739
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/job-input-schema.ts","../src/lib/validation.ts","../src/components/JobInputRenderer.tsx","../src/components/JobInputsFormRenderer.tsx"],"names":["ValidJobInputTypes","ValidJobInputValidationTypes","ValidJobInputFormatValues","jobInputSchema","jobInputStringSchema","jobInputTextareaSchema","jobInputNumberSchema","jobInputOptionSchema","jobInputFileSchema","React","jsx","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["import { z } from 'zod';\n\n// Enums matching sokosumi's implementation\nexport enum ValidJobInputTypes {\n STRING = 'string',\n TEXTAREA = 'textarea',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n OPTION = 'option',\n FILE = 'file',\n NONE = 'none',\n}\n\nexport enum ValidJobInputValidationTypes {\n MIN = 'min',\n MAX = 'max',\n FORMAT = 'format',\n OPTIONAL = 'optional',\n}\n\nexport enum ValidJobInputFormatValues {\n URL = 'url',\n EMAIL = 'email',\n INTEGER = 'integer',\n NON_EMPTY = 'nonempty',\n}\n\n// Validation schemas\nexport const optionalValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.OPTIONAL]),\n value: z.enum(['true', 'false'] as const),\n});\n\nexport const minValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.MIN]),\n value: z.number({ coerce: true }).int().min(0),\n});\n\nexport const maxValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.MAX]),\n value: z.number({ coerce: true }).int().min(0),\n});\n\nexport const formatUrlValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.URL]),\n});\n\nexport const formatEmailValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.EMAIL]),\n});\n\nexport const formatIntegerValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.INTEGER]),\n});\n\nexport const formatNonEmptyValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.NON_EMPTY]),\n});\n\n// Job input schemas\nexport const jobInputStringSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.STRING]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z\n .array(\n optionalValidationSchema\n .or(minValidationSchema)\n .or(maxValidationSchema)\n .or(formatNonEmptyValidationSchema)\n .or(formatUrlValidationSchema)\n .or(formatEmailValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputTextareaSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.TEXTAREA]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z\n .array(\n optionalValidationSchema\n .or(minValidationSchema)\n .or(maxValidationSchema)\n .or(formatNonEmptyValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputNumberSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.NUMBER]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z\n .array(\n optionalValidationSchema\n .or(minValidationSchema)\n .or(maxValidationSchema)\n .or(formatIntegerValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputBooleanSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.BOOLEAN]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z.array(optionalValidationSchema).optional(),\n});\n\nexport const jobInputOptionSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.OPTION]),\n name: z.string().min(1),\n data: z.object({\n values: z.array(z.string().min(1)).min(1),\n placeholder: z.string().optional(),\n description: z.string().optional(),\n }),\n validations: z\n .array(\n optionalValidationSchema.or(minValidationSchema).or(maxValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputFileSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.FILE]),\n name: z.string().min(1),\n data: z.object({\n accept: z.string().optional(),\n maxSize: z.string().optional(),\n multiple: z.boolean().optional(),\n description: z.string().optional(),\n outputFormat: z.string().optional(),\n }),\n validations: z.array(optionalValidationSchema).optional(),\n});\n\nexport const jobInputNoneSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.NONE]),\n name: z.string().min(1),\n data: z\n .object({\n description: z.string().min(1).optional(),\n })\n .optional(),\n});\n\n// Union schema for all job input types\nexport const jobInputSchema = jobInputStringSchema\n .or(jobInputTextareaSchema)\n .or(jobInputNumberSchema)\n .or(jobInputBooleanSchema)\n .or(jobInputOptionSchema)\n .or(jobInputFileSchema)\n .or(jobInputNoneSchema);\n\nexport type JobInputSchemaType = z.infer<typeof jobInputSchema>;\nexport type JobInputStringSchemaType = z.infer<typeof jobInputStringSchema>;\nexport type JobInputTextareaSchemaType = z.infer<typeof jobInputTextareaSchema>;\nexport type JobInputNumberSchemaType = z.infer<typeof jobInputNumberSchema>;\nexport type JobInputBooleanSchemaType = z.infer<typeof jobInputBooleanSchema>;\nexport type JobInputOptionSchemaType = z.infer<typeof jobInputOptionSchema>;\nexport type JobInputFileSchemaType = z.infer<typeof jobInputFileSchema>;\nexport type JobInputNoneSchemaType = z.infer<typeof jobInputNoneSchema>;\n\n// Form schema generation (based on sokosumi's approach)\nexport const makeZodSchemaFromJobInputSchema = (\n jobInputSchema: JobInputSchemaType,\n) => {\n switch (jobInputSchema.type) {\n case ValidJobInputTypes.STRING:\n return makeZodSchemaFromJobInputStringSchema(jobInputSchema);\n case ValidJobInputTypes.TEXTAREA:\n return makeZodSchemaFromJobInputTextareaSchema(jobInputSchema);\n case ValidJobInputTypes.NUMBER:\n return makeZodSchemaFromJobInputNumberSchema(jobInputSchema);\n case ValidJobInputTypes.BOOLEAN:\n return makeZodSchemaFromJobInputBooleanSchema();\n case ValidJobInputTypes.OPTION:\n return makeZodSchemaFromJobInputOptionSchema(jobInputSchema);\n case ValidJobInputTypes.FILE:\n return makeZodSchemaFromJobInputFileSchema(jobInputSchema);\n case ValidJobInputTypes.NONE:\n return z.never().nullable();\n }\n};\n\nconst makeZodSchemaFromJobInputStringSchema = (\n jobInputStringSchema: JobInputStringSchemaType,\n) => {\n const { validations } = jobInputStringSchema;\n const defaultSchema = z.string();\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.FORMAT:\n switch (value) {\n case ValidJobInputFormatValues.URL:\n return acc.url();\n case ValidJobInputFormatValues.EMAIL:\n return acc.email();\n case ValidJobInputFormatValues.NON_EMPTY:\n return acc.min(1);\n default:\n return acc;\n }\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputTextareaSchema = (\n jobInputTextareaSchema: JobInputTextareaSchemaType,\n) => {\n const { validations } = jobInputTextareaSchema;\n const defaultSchema = z.string();\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.FORMAT:\n switch (value) {\n case ValidJobInputFormatValues.NON_EMPTY:\n return acc.min(1);\n default:\n return acc;\n }\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputNumberSchema = (\n jobInputNumberSchema: JobInputNumberSchemaType,\n) => {\n const { validations } = jobInputNumberSchema;\n const defaultSchema = z.number({ coerce: true });\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.FORMAT:\n switch (value) {\n case ValidJobInputFormatValues.INTEGER:\n return acc.int();\n default:\n return acc;\n }\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputBooleanSchema = () => {\n return z.boolean();\n};\n\nconst makeZodSchemaFromJobInputOptionSchema = (\n jobInputOptionSchema: JobInputOptionSchemaType,\n) => {\n const {\n data: { values },\n validations,\n } = jobInputOptionSchema;\n const defaultSchema = z.array(\n z\n .number()\n .int()\n .nonnegative()\n .max(values.length - 1),\n );\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputFileSchema = (\n jobInputFileSchema: JobInputFileSchemaType,\n) => {\n const { validations } = jobInputFileSchema;\n const defaultSchema = z.string();\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n default:\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\n// Helper functions\nexport const isOptional = (jobInputSchema: JobInputSchemaType): boolean => {\n if (!('validations' in jobInputSchema) || !jobInputSchema.validations)\n return false;\n return jobInputSchema.validations.some(\n (v) =>\n v.validation === ValidJobInputValidationTypes.OPTIONAL &&\n v.value === 'true',\n );\n};\n\nexport const isSingleOption = (jobInputSchema: JobInputSchemaType): boolean => {\n if (jobInputSchema.type !== ValidJobInputTypes.OPTION) return false;\n if (!('validations' in jobInputSchema) || !jobInputSchema.validations)\n return false;\n\n const minValidation = jobInputSchema.validations.find(\n (v) => v.validation === ValidJobInputValidationTypes.MIN,\n );\n const maxValidation = jobInputSchema.validations.find(\n (v) => v.validation === ValidJobInputValidationTypes.MAX,\n );\n\n return minValidation?.value === 1 && maxValidation?.value === 1;\n};\n\nexport const getDefaultValue = (jobInputSchema: JobInputSchemaType) => {\n const { type } = jobInputSchema;\n switch (type) {\n case ValidJobInputTypes.STRING:\n return '';\n case ValidJobInputTypes.TEXTAREA:\n return '';\n case ValidJobInputTypes.BOOLEAN:\n return false;\n case ValidJobInputTypes.NUMBER:\n return null;\n case ValidJobInputTypes.OPTION:\n return [];\n case ValidJobInputTypes.FILE:\n return null;\n case ValidJobInputTypes.NONE:\n return null;\n }\n};\n\n","// This file contains the extracted validation logic.\n// Note: It relies on jobInputSchema which is not yet provided, so we will need to update imports.\n\nimport { jobInputSchema, JobInputSchemaType } from './job-input-schema';\n\nexport type { JobInputSchemaType };\n\nexport interface ValidationResult {\n valid: boolean;\n errors: { message: string; line?: number }[];\n parsedSchemas?: JobInputSchemaType[];\n}\n\n/**\n * Validates a JSON string against the Job Input Schema.\n * Tries to provide line numbers for errors where possible.\n */\nexport function validateSchemaWithZod(input: string): ValidationResult {\n let parsed: any;\n try {\n parsed = JSON.parse(input);\n } catch (e: any) {\n // Try to extract line number from error message\n const match = e.message.match(/at position (\\d+)/);\n let line;\n if (match) {\n const pos = parseInt(match[1], 10);\n line = input.slice(0, pos).split('\\n').length;\n }\n return {\n valid: false,\n errors: [{ message: 'Invalid JSON: ' + e.message, line }],\n };\n }\n\n const errors: { message: string; line?: number }[] = [];\n const schemas: JobInputSchemaType[] = [];\n\n // Helper to get line number for a key\n const getLine = (key: string) => {\n const idx = input.indexOf('\"' + key + '\"');\n if (idx === -1) return undefined;\n return input.slice(0, idx).split('\\n').length;\n };\n\n // Handle wrapped format, single schema, and array of schemas\n let schemasToValidate: any[];\n if (parsed.input_data && Array.isArray(parsed.input_data)) {\n // Handle wrapped format: { \"input_data\": [...] }\n schemasToValidate = parsed.input_data;\n } else if (Array.isArray(parsed)) {\n // Handle array format: [...]\n schemasToValidate = parsed;\n } else {\n // Handle single schema format: { ... }\n schemasToValidate = [parsed];\n }\n\n schemasToValidate.forEach((schema: any, index: number) => {\n try {\n const validatedSchema = jobInputSchema.parse(schema);\n schemas.push(validatedSchema);\n } catch (zodError: any) {\n if (zodError.errors) {\n zodError.errors.forEach((error: any) => {\n errors.push({\n message: `Schema ${index + 1}: ${error.message}`,\n line: getLine(error.path?.[0] || ''),\n });\n });\n } else {\n errors.push({\n message: `Schema ${index + 1}: ${zodError.message}`,\n line: getLine('type'),\n });\n }\n }\n });\n\n if (errors.length > 0) {\n return { valid: false, errors };\n }\n\n return {\n valid: true,\n errors: [],\n parsedSchemas: schemas,\n };\n}\n\n","// Placeholder for JobInputRenderer component\n// This will be replaced by the actual content if provided, \n// or we need to request it. \n// Based on imports in JobInputsFormRenderer, this file is expected to exist.\n\nimport React from 'react';\nimport { JobInputSchemaType, ValidJobInputTypes } from '../lib/job-input-schema';\n\n// Simple UI Components for the renderer\nimport { cn } from './JobInputsFormRenderer';\n\nconst Label = React.forwardRef<HTMLLabelElement, React.LabelHTMLAttributes<HTMLLabelElement>>(({ className, ...props }, ref) => (\n <label ref={ref} className={cn(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\", className)} {...props} />\n));\nLabel.displayName = \"Label\";\n\nconst Input = React.forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>(({ className, type, ...props }, ref) => (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n));\nInput.displayName = \"Input\";\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, React.TextareaHTMLAttributes<HTMLTextAreaElement>>(({ className, ...props }, ref) => (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n));\nTextarea.displayName = \"Textarea\";\n\nconst Checkbox = React.forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>(({ className, ...props }, ref) => (\n <input type=\"checkbox\" ref={ref} className={cn(\"h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary\", className)} {...props} />\n));\nCheckbox.displayName = \"Checkbox\";\n\n\ninterface JobInputRendererProps {\n jobInputSchema: JobInputSchemaType;\n value: string | number | boolean | number[] | null;\n onChange: (value: string | number | boolean | number[] | null) => void;\n disabled?: boolean;\n}\n\nexport default function JobInputRenderer({\n jobInputSchema,\n value,\n onChange,\n disabled,\n}: JobInputRendererProps) {\n const { id, name, type, data } = jobInputSchema;\n const description = data?.description;\n const placeholder = 'placeholder' in (data || {}) ? (data as any).placeholder : '';\n\n const renderInput = () => {\n switch (type) {\n case ValidJobInputTypes.STRING:\n return (\n <Input\n id={id}\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n />\n );\n case ValidJobInputTypes.TEXTAREA:\n return (\n <Textarea\n id={id}\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n />\n );\n case ValidJobInputTypes.NUMBER:\n return (\n <Input\n id={id}\n type=\"number\"\n value={value !== null ? String(value) : ''}\n onChange={(e) => {\n const val = e.target.value;\n onChange(val === '' ? null : Number(val));\n }}\n placeholder={placeholder}\n disabled={disabled}\n />\n );\n case ValidJobInputTypes.BOOLEAN:\n return (\n <div className=\"flex items-center space-x-2\">\n <Checkbox\n id={id}\n checked={!!value}\n onChange={(e) => onChange(e.target.checked)}\n disabled={disabled}\n />\n <label\n htmlFor={id}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {placeholder || 'Yes'}\n </label>\n </div>\n );\n case ValidJobInputTypes.OPTION:\n const options = (data as any).values || [];\n return (\n <select\n id={id}\n className=\"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n value={Array.isArray(value) && value.length > 0 ? value[0] : ''} // Simple single select for now\n onChange={(e) => {\n // Assuming single select maps to index for now based on schema definition or simple value\n // The schema definition says number[] for value, suggesting indices\n // But let's verify logic.\n // For now, just passing index if possible or finding index\n const selectedIndex = options.indexOf(e.target.value);\n onChange(selectedIndex >= 0 ? [selectedIndex] : []);\n }}\n disabled={disabled}\n >\n <option value=\"\">Select...</option>\n {options.map((opt: string) => (\n <option key={opt} value={opt}>{opt}</option>\n ))}\n </select>\n );\n case ValidJobInputTypes.FILE:\n return (\n <Input\n id={id}\n type=\"file\"\n disabled={disabled}\n onChange={() => {\n // File handling logic would go here\n // For now, just a placeholder\n }}\n />\n )\n default:\n return <div>Unsupported input type: {type}</div>;\n }\n };\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex flex-col space-y-1\">\n <Label htmlFor={id}>\n {name}\n {'validations' in jobInputSchema && jobInputSchema.validations?.some((v: any) => v.validation === 'optional' && v.value === 'true') && \n <span className=\"text-muted-foreground font-normal ml-1\">(Optional)</span>\n }\n </Label>\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n {renderInput()}\n </div>\n );\n}\n\n","import React, { useState, useEffect } from 'react';\nimport JobInputRenderer from './JobInputRenderer';\nimport { JobInputSchemaType, getDefaultValue } from '../lib/job-input-schema';\nimport clsx from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n// Utility for merging class names\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(inputs));\n}\n\n// --- Simplified UI Components embedded for library portability ---\n// In a real scenario, you might want to accept these as props or peer dependencies,\n// but for a self-contained library that uses Tailwind, we can provide simple versions.\n\nconst Button = React.forwardRef<HTMLButtonElement, React.ButtonHTMLAttributes<HTMLButtonElement> & { variant?: 'default' | 'outline' | 'destructive' | 'secondary' | 'ghost' | 'link' }>(\n ({ className, variant = 'default', ...props }, ref) => {\n const variants = {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n };\n \n return (\n <button\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 h-10 px-4 py-2\",\n variants[variant],\n className\n )}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"rounded-lg border bg-card text-card-foreground shadow-sm\", className)} {...props} />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)} {...props} />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nconst Separator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"shrink-0 bg-border h-[1px] w-full\", className)} {...props} />\n));\nSeparator.displayName = \"Separator\";\n\n// --- Main Component ---\n\nexport interface JobInputsFormRendererProps {\n jobInputSchemas: JobInputSchemaType[];\n onFormDataChange?: (\n formData: Record<string, string | number | boolean | number[] | null>,\n ) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport default function JobInputsFormRenderer({\n jobInputSchemas,\n onFormDataChange,\n disabled = false,\n className,\n}: JobInputsFormRendererProps) {\n const [formData, setFormData] = useState<\n Record<string, string | number | boolean | number[] | null>\n >({});\n\n // Initialize form data with default values\n useEffect(() => {\n const initialData: Record<\n string,\n string | number | boolean | number[] | null\n > = {};\n jobInputSchemas.forEach((schema) => {\n initialData[schema.id] = getDefaultValue(schema);\n });\n setFormData(initialData);\n }, [jobInputSchemas]);\n\n // Notify parent of form data changes\n useEffect(() => {\n if (onFormDataChange) {\n onFormDataChange(formData);\n }\n }, [formData, onFormDataChange]);\n\n const handleFieldChange = (\n fieldId: string,\n value: string | number | boolean | number[] | null,\n ) => {\n setFormData((prev) => ({\n ...prev,\n [fieldId]: value,\n }));\n };\n\n const handleClear = () => {\n const clearedData: Record<\n string,\n string | number | boolean | number[] | null\n > = {};\n jobInputSchemas.forEach((schema) => {\n clearedData[schema.id] = getDefaultValue(schema);\n });\n setFormData(clearedData);\n };\n\n if (jobInputSchemas.length === 0) {\n return (\n <Card className={className}>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground text-center\">\n No input fields defined in the schema.\n </p>\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card className={cn(\"bg-muted/20\", className)}>\n <CardHeader>\n <CardTitle className=\"text-lg\">Rendered Form</CardTitle>\n <p className=\"text-sm text-muted-foreground\">\n This is how the form will appear in Sokosumi\n </p>\n </CardHeader>\n <CardContent className=\"space-y-6\">\n <form className=\"space-y-4\" onSubmit={(e) => e.preventDefault()}>\n {jobInputSchemas.map((schema, index) => (\n <div key={schema.id}>\n <JobInputRenderer\n jobInputSchema={schema}\n value={formData[schema.id]}\n onChange={(value) => handleFieldChange(schema.id, value)}\n disabled={disabled}\n />\n {index < jobInputSchemas.length - 1 && (\n <Separator className=\"my-4\" />\n )}\n </div>\n ))}\n </form>\n\n <div className=\"flex justify-between items-center pt-4\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleClear}\n disabled={disabled}\n >\n Clear Form\n </Button>\n\n <div className=\"text-sm text-muted-foreground\">\n {Object.keys(formData).length} field\n {Object.keys(formData).length !== 1 ? 's' : ''}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/job-input-schema.ts","../src/lib/validation.ts","../src/components/JobInputRenderer.tsx","../src/components/JobInputsFormRenderer.tsx","../src/components/SchemaPlayground.tsx"],"names":["ValidJobInputTypes","ValidJobInputValidationTypes","ValidJobInputFormatValues","jobInputSchema","jobInputStringSchema","jobInputTextareaSchema","jobInputNumberSchema","jobInputOptionSchema","jobInputFileSchema","React","jsx","jsxs","useState","useEffect"],"mappings":"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","file":"index.mjs","sourcesContent":["import { z } from 'zod';\n\n// Enums matching sokosumi's implementation\nexport enum ValidJobInputTypes {\n STRING = 'string',\n TEXTAREA = 'textarea',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n OPTION = 'option',\n FILE = 'file',\n NONE = 'none',\n}\n\nexport enum ValidJobInputValidationTypes {\n MIN = 'min',\n MAX = 'max',\n FORMAT = 'format',\n OPTIONAL = 'optional',\n}\n\nexport enum ValidJobInputFormatValues {\n URL = 'url',\n EMAIL = 'email',\n INTEGER = 'integer',\n NON_EMPTY = 'nonempty',\n}\n\n// Validation schemas\nexport const optionalValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.OPTIONAL]),\n value: z.enum(['true', 'false'] as const),\n});\n\nexport const minValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.MIN]),\n value: z.number({ coerce: true }).int().min(0),\n});\n\nexport const maxValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.MAX]),\n value: z.number({ coerce: true }).int().min(0),\n});\n\nexport const formatUrlValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.URL]),\n});\n\nexport const formatEmailValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.EMAIL]),\n});\n\nexport const formatIntegerValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.INTEGER]),\n});\n\nexport const formatNonEmptyValidationSchema = z.object({\n validation: z.enum([ValidJobInputValidationTypes.FORMAT]),\n value: z.enum([ValidJobInputFormatValues.NON_EMPTY]),\n});\n\n// Job input schemas\nexport const jobInputStringSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.STRING]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z\n .array(\n optionalValidationSchema\n .or(minValidationSchema)\n .or(maxValidationSchema)\n .or(formatNonEmptyValidationSchema)\n .or(formatUrlValidationSchema)\n .or(formatEmailValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputTextareaSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.TEXTAREA]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z\n .array(\n optionalValidationSchema\n .or(minValidationSchema)\n .or(maxValidationSchema)\n .or(formatNonEmptyValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputNumberSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.NUMBER]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z\n .array(\n optionalValidationSchema\n .or(minValidationSchema)\n .or(maxValidationSchema)\n .or(formatIntegerValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputBooleanSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.BOOLEAN]),\n name: z.string().min(1),\n data: z\n .object({\n placeholder: z.string().optional(),\n description: z.string().optional(),\n })\n .optional(),\n validations: z.array(optionalValidationSchema).optional(),\n});\n\nexport const jobInputOptionSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.OPTION]),\n name: z.string().min(1),\n data: z.object({\n values: z.array(z.string().min(1)).min(1),\n placeholder: z.string().optional(),\n description: z.string().optional(),\n }),\n validations: z\n .array(\n optionalValidationSchema.or(minValidationSchema).or(maxValidationSchema),\n )\n .optional(),\n});\n\nexport const jobInputFileSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.FILE]),\n name: z.string().min(1),\n data: z.object({\n accept: z.string().optional(),\n maxSize: z.string().optional(),\n multiple: z.boolean().optional(),\n description: z.string().optional(),\n outputFormat: z.string().optional(),\n }),\n validations: z.array(optionalValidationSchema).optional(),\n});\n\nexport const jobInputNoneSchema = z.object({\n id: z.string().min(1),\n type: z.enum([ValidJobInputTypes.NONE]),\n name: z.string().min(1),\n data: z\n .object({\n description: z.string().min(1).optional(),\n })\n .optional(),\n});\n\n// Union schema for all job input types\nexport const jobInputSchema = jobInputStringSchema\n .or(jobInputTextareaSchema)\n .or(jobInputNumberSchema)\n .or(jobInputBooleanSchema)\n .or(jobInputOptionSchema)\n .or(jobInputFileSchema)\n .or(jobInputNoneSchema);\n\nexport type JobInputSchemaType = z.infer<typeof jobInputSchema>;\nexport type JobInputStringSchemaType = z.infer<typeof jobInputStringSchema>;\nexport type JobInputTextareaSchemaType = z.infer<typeof jobInputTextareaSchema>;\nexport type JobInputNumberSchemaType = z.infer<typeof jobInputNumberSchema>;\nexport type JobInputBooleanSchemaType = z.infer<typeof jobInputBooleanSchema>;\nexport type JobInputOptionSchemaType = z.infer<typeof jobInputOptionSchema>;\nexport type JobInputFileSchemaType = z.infer<typeof jobInputFileSchema>;\nexport type JobInputNoneSchemaType = z.infer<typeof jobInputNoneSchema>;\n\n// Form schema generation (based on sokosumi's approach)\nexport const makeZodSchemaFromJobInputSchema = (\n jobInputSchema: JobInputSchemaType,\n) => {\n switch (jobInputSchema.type) {\n case ValidJobInputTypes.STRING:\n return makeZodSchemaFromJobInputStringSchema(jobInputSchema);\n case ValidJobInputTypes.TEXTAREA:\n return makeZodSchemaFromJobInputTextareaSchema(jobInputSchema);\n case ValidJobInputTypes.NUMBER:\n return makeZodSchemaFromJobInputNumberSchema(jobInputSchema);\n case ValidJobInputTypes.BOOLEAN:\n return makeZodSchemaFromJobInputBooleanSchema();\n case ValidJobInputTypes.OPTION:\n return makeZodSchemaFromJobInputOptionSchema(jobInputSchema);\n case ValidJobInputTypes.FILE:\n return makeZodSchemaFromJobInputFileSchema(jobInputSchema);\n case ValidJobInputTypes.NONE:\n return z.never().nullable();\n }\n};\n\nconst makeZodSchemaFromJobInputStringSchema = (\n jobInputStringSchema: JobInputStringSchemaType,\n) => {\n const { validations } = jobInputStringSchema;\n const defaultSchema = z.string();\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.FORMAT:\n switch (value) {\n case ValidJobInputFormatValues.URL:\n return acc.url();\n case ValidJobInputFormatValues.EMAIL:\n return acc.email();\n case ValidJobInputFormatValues.NON_EMPTY:\n return acc.min(1);\n default:\n return acc;\n }\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputTextareaSchema = (\n jobInputTextareaSchema: JobInputTextareaSchemaType,\n) => {\n const { validations } = jobInputTextareaSchema;\n const defaultSchema = z.string();\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.FORMAT:\n switch (value) {\n case ValidJobInputFormatValues.NON_EMPTY:\n return acc.min(1);\n default:\n return acc;\n }\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputNumberSchema = (\n jobInputNumberSchema: JobInputNumberSchemaType,\n) => {\n const { validations } = jobInputNumberSchema;\n const defaultSchema = z.number({ coerce: true });\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.FORMAT:\n switch (value) {\n case ValidJobInputFormatValues.INTEGER:\n return acc.int();\n default:\n return acc;\n }\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputBooleanSchema = () => {\n return z.boolean();\n};\n\nconst makeZodSchemaFromJobInputOptionSchema = (\n jobInputOptionSchema: JobInputOptionSchemaType,\n) => {\n const {\n data: { values },\n validations,\n } = jobInputOptionSchema;\n const defaultSchema = z.array(\n z\n .number()\n .int()\n .nonnegative()\n .max(values.length - 1),\n );\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.MIN:\n return acc.min(value);\n case ValidJobInputValidationTypes.MAX:\n return acc.max(value);\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\nconst makeZodSchemaFromJobInputFileSchema = (\n jobInputFileSchema: JobInputFileSchemaType,\n) => {\n const { validations } = jobInputFileSchema;\n const defaultSchema = z.string();\n if (!validations) return defaultSchema;\n\n let canBeOptional: boolean = false;\n const schema = validations.reduce((acc, cur) => {\n const { validation, value } = cur;\n switch (validation) {\n case ValidJobInputValidationTypes.OPTIONAL:\n canBeOptional = value === 'true';\n return acc;\n default:\n return acc;\n }\n }, defaultSchema);\n\n return canBeOptional ? schema.optional() : schema;\n};\n\n// Helper functions\nexport const isOptional = (jobInputSchema: JobInputSchemaType): boolean => {\n if (!('validations' in jobInputSchema) || !jobInputSchema.validations)\n return false;\n return jobInputSchema.validations.some(\n (v) =>\n v.validation === ValidJobInputValidationTypes.OPTIONAL &&\n v.value === 'true',\n );\n};\n\nexport const isSingleOption = (jobInputSchema: JobInputSchemaType): boolean => {\n if (jobInputSchema.type !== ValidJobInputTypes.OPTION) return false;\n if (!('validations' in jobInputSchema) || !jobInputSchema.validations)\n return false;\n\n const minValidation = jobInputSchema.validations.find(\n (v) => v.validation === ValidJobInputValidationTypes.MIN,\n );\n const maxValidation = jobInputSchema.validations.find(\n (v) => v.validation === ValidJobInputValidationTypes.MAX,\n );\n\n return minValidation?.value === 1 && maxValidation?.value === 1;\n};\n\nexport const getDefaultValue = (jobInputSchema: JobInputSchemaType) => {\n const { type } = jobInputSchema;\n switch (type) {\n case ValidJobInputTypes.STRING:\n return '';\n case ValidJobInputTypes.TEXTAREA:\n return '';\n case ValidJobInputTypes.BOOLEAN:\n return false;\n case ValidJobInputTypes.NUMBER:\n return null;\n case ValidJobInputTypes.OPTION:\n return [];\n case ValidJobInputTypes.FILE:\n return null;\n case ValidJobInputTypes.NONE:\n return null;\n }\n};\n\n\n","// This file contains the extracted validation logic.\n// Note: It relies on jobInputSchema which is not yet provided, so we will need to update imports.\n\nimport { jobInputSchema, JobInputSchemaType } from './job-input-schema';\n\nexport type { JobInputSchemaType };\n\nexport interface ValidationResult {\n valid: boolean;\n errors: { message: string; line?: number }[];\n parsedSchemas?: JobInputSchemaType[];\n}\n\n/**\n * Validates a JSON string against the Job Input Schema.\n * Tries to provide line numbers for errors where possible.\n */\nexport function validateSchemaWithZod(input: string): ValidationResult {\n let parsed: any;\n try {\n parsed = JSON.parse(input);\n } catch (e: any) {\n // Try to extract line number from error message\n const match = e.message.match(/at position (\\d+)/);\n let line;\n if (match) {\n const pos = parseInt(match[1], 10);\n line = input.slice(0, pos).split('\\n').length;\n }\n return {\n valid: false,\n errors: [{ message: 'Invalid JSON: ' + e.message, line }],\n };\n }\n\n const errors: { message: string; line?: number }[] = [];\n const schemas: JobInputSchemaType[] = [];\n\n // Helper to get line number for a key\n const getLine = (key: string) => {\n const idx = input.indexOf('\"' + key + '\"');\n if (idx === -1) return undefined;\n return input.slice(0, idx).split('\\n').length;\n };\n\n // Handle wrapped format, single schema, and array of schemas\n let schemasToValidate: any[];\n if (parsed.input_data && Array.isArray(parsed.input_data)) {\n // Handle wrapped format: { \"input_data\": [...] }\n schemasToValidate = parsed.input_data;\n } else if (Array.isArray(parsed)) {\n // Handle array format: [...]\n schemasToValidate = parsed;\n } else {\n // Handle single schema format: { ... }\n schemasToValidate = [parsed];\n }\n\n schemasToValidate.forEach((schema: any, index: number) => {\n try {\n const validatedSchema = jobInputSchema.parse(schema);\n schemas.push(validatedSchema);\n } catch (zodError: any) {\n if (zodError.errors) {\n zodError.errors.forEach((error: any) => {\n errors.push({\n message: `Schema ${index + 1}: ${error.message}`,\n line: getLine(error.path?.[0] || ''),\n });\n });\n } else {\n errors.push({\n message: `Schema ${index + 1}: ${zodError.message}`,\n line: getLine('type'),\n });\n }\n }\n });\n\n if (errors.length > 0) {\n return { valid: false, errors };\n }\n\n return {\n valid: true,\n errors: [],\n parsedSchemas: schemas,\n };\n}\n\n","// Placeholder for JobInputRenderer component\n// This will be replaced by the actual content if provided, \n// or we need to request it. \n// Based on imports in JobInputsFormRenderer, this file is expected to exist.\n\nimport React from 'react';\nimport { JobInputSchemaType, ValidJobInputTypes } from '../lib/job-input-schema';\n\n// Simple UI Components for the renderer\nimport { cn } from './JobInputsFormRenderer';\n\nconst Label = React.forwardRef<HTMLLabelElement, React.LabelHTMLAttributes<HTMLLabelElement>>(({ className, ...props }, ref) => (\n <label ref={ref} className={cn(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\", className)} {...props} />\n));\nLabel.displayName = \"Label\";\n\nconst Input = React.forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>(({ className, type, ...props }, ref) => (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n));\nInput.displayName = \"Input\";\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, React.TextareaHTMLAttributes<HTMLTextAreaElement>>(({ className, ...props }, ref) => (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n));\nTextarea.displayName = \"Textarea\";\n\nconst Checkbox = React.forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>(({ className, ...props }, ref) => (\n <input type=\"checkbox\" ref={ref} className={cn(\"h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary\", className)} {...props} />\n));\nCheckbox.displayName = \"Checkbox\";\n\n\ninterface JobInputRendererProps {\n jobInputSchema: JobInputSchemaType;\n value: string | number | boolean | number[] | null;\n onChange: (value: string | number | boolean | number[] | null) => void;\n disabled?: boolean;\n}\n\nexport default function JobInputRenderer({\n jobInputSchema,\n value,\n onChange,\n disabled,\n}: JobInputRendererProps) {\n const { id, name, type, data } = jobInputSchema;\n const description = data?.description;\n const placeholder = 'placeholder' in (data || {}) ? (data as any).placeholder : '';\n\n const renderInput = () => {\n switch (type) {\n case ValidJobInputTypes.STRING:\n return (\n <Input\n id={id}\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n />\n );\n case ValidJobInputTypes.TEXTAREA:\n return (\n <Textarea\n id={id}\n value={(value as string) || ''}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n />\n );\n case ValidJobInputTypes.NUMBER:\n return (\n <Input\n id={id}\n type=\"number\"\n value={value !== null ? String(value) : ''}\n onChange={(e) => {\n const val = e.target.value;\n onChange(val === '' ? null : Number(val));\n }}\n placeholder={placeholder}\n disabled={disabled}\n />\n );\n case ValidJobInputTypes.BOOLEAN:\n return (\n <div className=\"flex items-center space-x-2\">\n <Checkbox\n id={id}\n checked={!!value}\n onChange={(e) => onChange(e.target.checked)}\n disabled={disabled}\n />\n <label\n htmlFor={id}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {placeholder || 'Yes'}\n </label>\n </div>\n );\n case ValidJobInputTypes.OPTION:\n const options = (data as any).values || [];\n return (\n <select\n id={id}\n className=\"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n value={Array.isArray(value) && value.length > 0 ? value[0] : ''} // Simple single select for now\n onChange={(e) => {\n // Assuming single select maps to index for now based on schema definition or simple value\n // The schema definition says number[] for value, suggesting indices\n // But let's verify logic.\n // For now, just passing index if possible or finding index\n const selectedIndex = options.indexOf(e.target.value);\n onChange(selectedIndex >= 0 ? [selectedIndex] : []);\n }}\n disabled={disabled}\n >\n <option value=\"\">Select...</option>\n {options.map((opt: string) => (\n <option key={opt} value={opt}>{opt}</option>\n ))}\n </select>\n );\n case ValidJobInputTypes.FILE:\n return (\n <Input\n id={id}\n type=\"file\"\n disabled={disabled}\n onChange={() => {\n // File handling logic would go here\n // For now, just a placeholder\n }}\n />\n )\n default:\n return <div>Unsupported input type: {type}</div>;\n }\n };\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex flex-col space-y-1\">\n <Label htmlFor={id}>\n {name}\n {'validations' in jobInputSchema && jobInputSchema.validations?.some((v: any) => v.validation === 'optional' && v.value === 'true') && \n <span className=\"text-muted-foreground font-normal ml-1\">(Optional)</span>\n }\n </Label>\n {description && (\n <p className=\"text-sm text-muted-foreground\">{description}</p>\n )}\n </div>\n {renderInput()}\n </div>\n );\n}\n\n","import React, { useState, useEffect } from 'react';\nimport JobInputRenderer from './JobInputRenderer';\nimport { JobInputSchemaType, getDefaultValue } from '../lib/job-input-schema';\nimport clsx from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n// Utility for merging class names\nexport function cn(...inputs: (string | undefined | null | false)[]) {\n return twMerge(clsx(inputs));\n}\n\n// --- Simplified UI Components embedded for library portability ---\n// In a real scenario, you might want to accept these as props or peer dependencies,\n// but for a self-contained library that uses Tailwind, we can provide simple versions.\n\nconst Button = React.forwardRef<HTMLButtonElement, React.ButtonHTMLAttributes<HTMLButtonElement> & { variant?: 'default' | 'outline' | 'destructive' | 'secondary' | 'ghost' | 'link' }>(\n ({ className, variant = 'default', ...props }, ref) => {\n const variants = {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n };\n \n return (\n <button\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 h-10 px-4 py-2\",\n variants[variant],\n className\n )}\n {...props}\n />\n );\n }\n);\nButton.displayName = \"Button\";\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"rounded-lg border bg-card text-card-foreground shadow-sm\", className)} {...props} />\n));\nCard.displayName = \"Card\";\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col space-y-1.5 p-6\", className)} {...props} />\n));\nCardHeader.displayName = \"CardHeader\";\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn(\"text-2xl font-semibold leading-none tracking-tight\", className)} {...props} />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nconst Separator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"shrink-0 bg-border h-[1px] w-full\", className)} {...props} />\n));\nSeparator.displayName = \"Separator\";\n\n// --- Main Component ---\n\nexport interface JobInputsFormRendererProps {\n jobInputSchemas: JobInputSchemaType[];\n onFormDataChange?: (\n formData: Record<string, string | number | boolean | number[] | null>,\n ) => void;\n disabled?: boolean;\n className?: string;\n}\n\nexport default function JobInputsFormRenderer({\n jobInputSchemas,\n onFormDataChange,\n disabled = false,\n className,\n}: JobInputsFormRendererProps) {\n const [formData, setFormData] = useState<\n Record<string, string | number | boolean | number[] | null>\n >({});\n\n // Initialize form data with default values\n useEffect(() => {\n const initialData: Record<\n string,\n string | number | boolean | number[] | null\n > = {};\n jobInputSchemas.forEach((schema) => {\n initialData[schema.id] = getDefaultValue(schema);\n });\n setFormData(initialData);\n // Intentionally omitting jobInputSchemas from dependency array to prevent infinite loops \n // if the array reference changes on every render from the parent.\n // We really only want to reset when the *content* of schemas changes significantly \n // or on mount, but basic array comparison is reference-based.\n // A better approach would be to use a JSON.stringify comparison or just let parent handle keying.\n // For now, we will depend on JSON.stringify(jobInputSchemas) to detect actual changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(jobInputSchemas)]);\n\n // Notify parent of form data changes\n useEffect(() => {\n if (onFormDataChange) {\n onFormDataChange(formData);\n }\n }, [formData, onFormDataChange]);\n\n const handleFieldChange = (\n fieldId: string,\n value: string | number | boolean | number[] | null,\n ) => {\n setFormData((prev) => ({\n ...prev,\n [fieldId]: value,\n }));\n };\n\n const handleClear = () => {\n const clearedData: Record<\n string,\n string | number | boolean | number[] | null\n > = {};\n jobInputSchemas.forEach((schema) => {\n clearedData[schema.id] = getDefaultValue(schema);\n });\n setFormData(clearedData);\n };\n\n if (jobInputSchemas.length === 0) {\n return (\n <Card className={className}>\n <CardContent className=\"pt-6\">\n <p className=\"text-sm text-muted-foreground text-center\">\n No input fields defined in the schema.\n </p>\n </CardContent>\n </Card>\n );\n }\n\n return (\n <Card className={cn(\"bg-muted/20\", className)}>\n <CardContent className=\"space-y-6 pt-6\">\n <form className=\"space-y-4\" onSubmit={(e) => e.preventDefault()}>\n {jobInputSchemas.map((schema, index) => (\n <div key={schema.id}>\n <JobInputRenderer\n jobInputSchema={schema}\n value={formData[schema.id]}\n onChange={(value) => handleFieldChange(schema.id, value)}\n disabled={disabled}\n />\n {index < jobInputSchemas.length - 1 && (\n <Separator className=\"my-4\" />\n )}\n </div>\n ))}\n </form>\n\n <div className=\"flex justify-between items-center pt-4\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleClear}\n disabled={disabled}\n >\n Clear Form\n </Button>\n\n <div className=\"text-sm text-muted-foreground\">\n {Object.keys(formData).length} field\n {Object.keys(formData).length !== 1 ? 's' : ''}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n}\n\n","import React, { useState, useEffect } from 'react';\nimport Editor from '@monaco-editor/react';\nimport JobInputsFormRenderer from './JobInputsFormRenderer';\nimport { validateSchemaWithZod } from '../lib/validation';\nimport { cn } from './JobInputsFormRenderer';\n\nexport interface SchemaPlaygroundProps {\n initialSchema?: string;\n examples?: Array<{ label: string; value: string }>;\n className?: string;\n onSchemaChange?: (schema: string, isValid: boolean) => void;\n}\n\nexport default function SchemaPlayground({\n initialSchema = '[]',\n examples = [],\n className,\n onSchemaChange,\n}: SchemaPlaygroundProps) {\n const [schemaInput, setSchemaInput] = useState(initialSchema);\n const [selectedExample, setSelectedExample] = useState(examples.length > 0 ? examples[0].label : '');\n \n // Reset form data when schema changes (if we were tracking it)\n // useEffect(() => {\n // setFormData({});\n // }, [schemaInput]);\n\n // Use effect for initial example selection if provided and initialSchema is not set/matches\n useEffect(() => {\n if (examples.length > 0 && !selectedExample) {\n // If current input matches an example, select it\n const match = examples.find(e => e.value === schemaInput);\n if (match) setSelectedExample(match.label);\n }\n }, [examples, schemaInput, selectedExample]);\n\n const handleSelectExample = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const val = e.target.value;\n setSelectedExample(val);\n const found = examples.find((ex) => ex.label === val);\n if (found) {\n setSchemaInput(found.value);\n }\n };\n\n const validationResult = validateSchemaWithZod(schemaInput);\n\n useEffect(() => {\n if (onSchemaChange) {\n onSchemaChange(schemaInput, validationResult.valid);\n }\n }, [schemaInput, validationResult.valid, onSchemaChange]);\n\n return (\n <div className={cn(\"grid grid-cols-1 lg:grid-cols-2 gap-8 h-full\", className)}>\n {/* Left Column: Schema Editor */}\n <div className=\"flex flex-col gap-4 h-full min-h-[500px]\">\n <h2 className=\"text-lg font-semibold text-gray-900\">1. Schema Definition (JSON)</h2>\n \n <div className=\"flex-1 relative border rounded-lg overflow-hidden shadow-sm bg-white flex flex-col\">\n <div className=\"flex items-center justify-between px-4 py-2 border-b bg-gray-50\">\n <div className=\"flex items-center gap-2\">\n {examples.length > 0 && (\n <>\n <span className=\"text-xs font-medium text-gray-700 whitespace-nowrap\">Load Example:</span>\n <select\n className=\"border rounded px-2 py-1 text-xs bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 max-w-[200px]\"\n value={selectedExample}\n onChange={handleSelectExample}\n >\n {examples.map((ex) => (\n <option key={ex.label} value={ex.label}>\n {ex.label}\n </option>\n ))}\n </select>\n </>\n )}\n </div>\n <div className={`text-xs px-2 py-1 rounded-full font-medium ${validationResult.valid ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800'}`}>\n {validationResult.valid ? 'Valid Schema' : 'Invalid Schema'}\n </div>\n </div>\n\n <div className=\"flex-1\">\n <Editor\n height=\"100%\"\n defaultLanguage=\"json\"\n value={schemaInput}\n onChange={(value) => {\n setSchemaInput(value || '');\n if (examples.length > 0) {\n // Check if still matches an example, otherwise clear selection\n const match = examples.find(e => e.value === (value || ''));\n if (match) {\n setSelectedExample(match.label);\n } else {\n setSelectedExample('');\n }\n }\n }}\n options={{\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n fontSize: 14,\n formatOnPaste: true,\n automaticLayout: true,\n }}\n />\n </div>\n \n {!validationResult.valid && (\n <div className=\"border-t bg-red-50 p-4 text-sm max-h-40 overflow-y-auto z-10 relative\">\n <p className=\"font-bold text-red-800 mb-2\">Validation Errors:</p>\n <ul className=\"list-disc pl-5 space-y-1 text-red-700\">\n {validationResult.errors.map((err, i) => (\n <li key={i}>\n {err.line ? <span className=\"font-mono bg-red-100 px-1 rounded mr-1\">line {err.line}</span> : null}\n {err.message}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n </div>\n\n {/* Right Column: Preview */}\n <div className=\"flex flex-col gap-4 h-full overflow-hidden min-h-[500px]\">\n <div>\n <h2 className=\"text-lg font-semibold text-gray-900\">2. Form Preview</h2>\n </div>\n \n <div className=\"flex-1 flex flex-col gap-4 overflow-hidden\">\n {validationResult.valid ? (\n <>\n <div className=\"flex-1 overflow-y-auto border rounded-lg shadow-sm bg-white p-1\">\n {/* Component Preview Wrapper */}\n <JobInputsFormRenderer\n jobInputSchemas={validationResult.parsedSchemas || []}\n className=\"h-full border-0 shadow-none\" \n />\n </div>\n </>\n ) : (\n <div className=\"flex-1 border-2 border-dashed border-gray-300 rounded-lg flex items-center justify-center bg-gray-50 text-gray-400\">\n <div className=\"text-center\">\n <p className=\"text-lg font-medium\">Preview Unavailable</p>\n <p className=\"text-sm\">Fix schema errors to see the form</p>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n"]}
|
package/package.json
CHANGED
|
@@ -9,6 +9,7 @@ export interface SchemaPlaygroundProps {
|
|
|
9
9
|
examples?: Array<{ label: string; value: string }>;
|
|
10
10
|
className?: string;
|
|
11
11
|
onSchemaChange?: (schema: string, isValid: boolean) => void;
|
|
12
|
+
layoutBreakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export default function SchemaPlayground({
|
|
@@ -16,6 +17,7 @@ export default function SchemaPlayground({
|
|
|
16
17
|
examples = [],
|
|
17
18
|
className,
|
|
18
19
|
onSchemaChange,
|
|
20
|
+
layoutBreakpoint = 'lg',
|
|
19
21
|
}: SchemaPlaygroundProps) {
|
|
20
22
|
const [schemaInput, setSchemaInput] = useState(initialSchema);
|
|
21
23
|
const [selectedExample, setSelectedExample] = useState(examples.length > 0 ? examples[0].label : '');
|
|
@@ -52,8 +54,16 @@ export default function SchemaPlayground({
|
|
|
52
54
|
}
|
|
53
55
|
}, [schemaInput, validationResult.valid, onSchemaChange]);
|
|
54
56
|
|
|
57
|
+
const breakpointClasses = {
|
|
58
|
+
sm: 'sm:grid-cols-2',
|
|
59
|
+
md: 'md:grid-cols-2',
|
|
60
|
+
lg: 'lg:grid-cols-2',
|
|
61
|
+
xl: 'xl:grid-cols-2',
|
|
62
|
+
'2xl': '2xl:grid-cols-2',
|
|
63
|
+
};
|
|
64
|
+
|
|
55
65
|
return (
|
|
56
|
-
<div className={cn("grid grid-cols-1
|
|
66
|
+
<div className={cn("grid grid-cols-1 gap-8 h-full", breakpointClasses[layoutBreakpoint], className)}>
|
|
57
67
|
{/* Left Column: Schema Editor */}
|
|
58
68
|
<div className="flex flex-col gap-4 h-full min-h-[500px]">
|
|
59
69
|
<h2 className="text-lg font-semibold text-gray-900">1. Schema Definition (JSON)</h2>
|