masumi-schema-validator-component 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +15 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +15 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/JobInputRenderer.tsx +1 -1
- package/src/index.ts +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -1207,7 +1207,8 @@ interface SchemaPlaygroundProps {
|
|
|
1207
1207
|
}>;
|
|
1208
1208
|
className?: string;
|
|
1209
1209
|
onSchemaChange?: (schema: string, isValid: boolean) => void;
|
|
1210
|
+
layoutBreakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
1210
1211
|
}
|
|
1211
|
-
declare function SchemaPlayground({ initialSchema, examples, className, onSchemaChange, }: SchemaPlaygroundProps): react_jsx_runtime.JSX.Element;
|
|
1212
|
+
declare function SchemaPlayground({ initialSchema, examples, className, onSchemaChange, layoutBreakpoint, }: SchemaPlaygroundProps): react_jsx_runtime.JSX.Element;
|
|
1212
1213
|
|
|
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 };
|
|
1214
|
+
export { type JobInputBooleanSchemaType, type JobInputFileSchemaType, type JobInputNoneSchemaType, type JobInputNumberSchemaType, type JobInputOptionSchemaType, JobInputRenderer, type JobInputRendererProps, type JobInputSchemaType, type JobInputStringSchemaType, type JobInputTextareaSchemaType, JobInputsFormRenderer, type JobInputsFormRendererProps, SchemaPlayground, type SchemaPlaygroundProps, 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
|
@@ -1207,7 +1207,8 @@ interface SchemaPlaygroundProps {
|
|
|
1207
1207
|
}>;
|
|
1208
1208
|
className?: string;
|
|
1209
1209
|
onSchemaChange?: (schema: string, isValid: boolean) => void;
|
|
1210
|
+
layoutBreakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
1210
1211
|
}
|
|
1211
|
-
declare function SchemaPlayground({ initialSchema, examples, className, onSchemaChange, }: SchemaPlaygroundProps): react_jsx_runtime.JSX.Element;
|
|
1212
|
+
declare function SchemaPlayground({ initialSchema, examples, className, onSchemaChange, layoutBreakpoint, }: SchemaPlaygroundProps): react_jsx_runtime.JSX.Element;
|
|
1212
1213
|
|
|
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 };
|
|
1214
|
+
export { type JobInputBooleanSchemaType, type JobInputFileSchemaType, type JobInputNoneSchemaType, type JobInputNumberSchemaType, type JobInputOptionSchemaType, JobInputRenderer, type JobInputRendererProps, type JobInputSchemaType, type JobInputStringSchemaType, type JobInputTextareaSchemaType, JobInputsFormRenderer, type JobInputsFormRendererProps, SchemaPlayground, type SchemaPlaygroundProps, 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
|
@@ -645,10 +645,15 @@ function SchemaPlayground({
|
|
|
645
645
|
initialSchema = "[]",
|
|
646
646
|
examples = [],
|
|
647
647
|
className,
|
|
648
|
-
onSchemaChange
|
|
648
|
+
onSchemaChange,
|
|
649
|
+
layoutBreakpoint = "lg"
|
|
649
650
|
}) {
|
|
650
651
|
const [schemaInput, setSchemaInput] = React2.useState(initialSchema);
|
|
651
652
|
const [selectedExample, setSelectedExample] = React2.useState(examples.length > 0 ? examples[0].label : "");
|
|
653
|
+
const [, setFormData] = React2.useState({});
|
|
654
|
+
React2.useEffect(() => {
|
|
655
|
+
setFormData({});
|
|
656
|
+
}, [schemaInput]);
|
|
652
657
|
React2.useEffect(() => {
|
|
653
658
|
if (examples.length > 0 && !selectedExample) {
|
|
654
659
|
const match = examples.find((e) => e.value === schemaInput);
|
|
@@ -669,7 +674,14 @@ function SchemaPlayground({
|
|
|
669
674
|
onSchemaChange(schemaInput, validationResult.valid);
|
|
670
675
|
}
|
|
671
676
|
}, [schemaInput, validationResult.valid, onSchemaChange]);
|
|
672
|
-
|
|
677
|
+
const breakpointClasses = {
|
|
678
|
+
sm: "sm:grid-cols-2",
|
|
679
|
+
md: "md:grid-cols-2",
|
|
680
|
+
lg: "lg:grid-cols-2",
|
|
681
|
+
xl: "xl:grid-cols-2",
|
|
682
|
+
"2xl": "2xl:grid-cols-2"
|
|
683
|
+
};
|
|
684
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid grid-cols-1 gap-8 h-full", breakpointClasses[layoutBreakpoint], className), children: [
|
|
673
685
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 h-full min-h-[500px]", children: [
|
|
674
686
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "1. Schema Definition (JSON)" }),
|
|
675
687
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 relative border rounded-lg overflow-hidden shadow-sm bg-white flex flex-col", children: [
|
|
@@ -732,6 +744,7 @@ function SchemaPlayground({
|
|
|
732
744
|
JobInputsFormRenderer,
|
|
733
745
|
{
|
|
734
746
|
jobInputSchemas: validationResult.parsedSchemas || [],
|
|
747
|
+
onFormDataChange: setFormData,
|
|
735
748
|
className: "h-full border-0 shadow-none"
|
|
736
749
|
}
|
|
737
750
|
) }) }) : /* @__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: [
|
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","../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"]}
|
|
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\nexport interface 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 layoutBreakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n}\n\nexport default function SchemaPlayground({\n initialSchema = '[]',\n examples = [],\n className,\n onSchemaChange,\n layoutBreakpoint = 'lg',\n}: SchemaPlaygroundProps) {\n const [schemaInput, setSchemaInput] = useState(initialSchema);\n const [selectedExample, setSelectedExample] = useState(examples.length > 0 ? examples[0].label : '');\n const [, setFormData] = useState({});\n \n // Reset form data when schema changes\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 const breakpointClasses = {\n sm: 'sm:grid-cols-2',\n md: 'md:grid-cols-2',\n lg: 'lg:grid-cols-2',\n xl: 'xl:grid-cols-2',\n '2xl': '2xl:grid-cols-2',\n };\n\n return (\n <div className={cn(\"grid grid-cols-1 gap-8 h-full\", breakpointClasses[layoutBreakpoint], 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 onFormDataChange={setFormData}\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
|
@@ -637,10 +637,15 @@ function SchemaPlayground({
|
|
|
637
637
|
initialSchema = "[]",
|
|
638
638
|
examples = [],
|
|
639
639
|
className,
|
|
640
|
-
onSchemaChange
|
|
640
|
+
onSchemaChange,
|
|
641
|
+
layoutBreakpoint = "lg"
|
|
641
642
|
}) {
|
|
642
643
|
const [schemaInput, setSchemaInput] = useState(initialSchema);
|
|
643
644
|
const [selectedExample, setSelectedExample] = useState(examples.length > 0 ? examples[0].label : "");
|
|
645
|
+
const [, setFormData] = useState({});
|
|
646
|
+
useEffect(() => {
|
|
647
|
+
setFormData({});
|
|
648
|
+
}, [schemaInput]);
|
|
644
649
|
useEffect(() => {
|
|
645
650
|
if (examples.length > 0 && !selectedExample) {
|
|
646
651
|
const match = examples.find((e) => e.value === schemaInput);
|
|
@@ -661,7 +666,14 @@ function SchemaPlayground({
|
|
|
661
666
|
onSchemaChange(schemaInput, validationResult.valid);
|
|
662
667
|
}
|
|
663
668
|
}, [schemaInput, validationResult.valid, onSchemaChange]);
|
|
664
|
-
|
|
669
|
+
const breakpointClasses = {
|
|
670
|
+
sm: "sm:grid-cols-2",
|
|
671
|
+
md: "md:grid-cols-2",
|
|
672
|
+
lg: "lg:grid-cols-2",
|
|
673
|
+
xl: "xl:grid-cols-2",
|
|
674
|
+
"2xl": "2xl:grid-cols-2"
|
|
675
|
+
};
|
|
676
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("grid grid-cols-1 gap-8 h-full", breakpointClasses[layoutBreakpoint], className), children: [
|
|
665
677
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 h-full min-h-[500px]", children: [
|
|
666
678
|
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "1. Schema Definition (JSON)" }),
|
|
667
679
|
/* @__PURE__ */ jsxs("div", { className: "flex-1 relative border rounded-lg overflow-hidden shadow-sm bg-white flex flex-col", children: [
|
|
@@ -724,6 +736,7 @@ function SchemaPlayground({
|
|
|
724
736
|
JobInputsFormRenderer,
|
|
725
737
|
{
|
|
726
738
|
jobInputSchemas: validationResult.parsedSchemas || [],
|
|
739
|
+
onFormDataChange: setFormData,
|
|
727
740
|
className: "h-full border-0 shadow-none"
|
|
728
741
|
}
|
|
729
742
|
) }) }) : /* @__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: [
|
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","../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"]}
|
|
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\nexport interface 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 layoutBreakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n}\n\nexport default function SchemaPlayground({\n initialSchema = '[]',\n examples = [],\n className,\n onSchemaChange,\n layoutBreakpoint = 'lg',\n}: SchemaPlaygroundProps) {\n const [schemaInput, setSchemaInput] = useState(initialSchema);\n const [selectedExample, setSelectedExample] = useState(examples.length > 0 ? examples[0].label : '');\n const [, setFormData] = useState({});\n \n // Reset form data when schema changes\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 const breakpointClasses = {\n sm: 'sm:grid-cols-2',\n md: 'md:grid-cols-2',\n lg: 'lg:grid-cols-2',\n xl: 'xl:grid-cols-2',\n '2xl': '2xl:grid-cols-2',\n };\n\n return (\n <div className={cn(\"grid grid-cols-1 gap-8 h-full\", breakpointClasses[layoutBreakpoint], 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 onFormDataChange={setFormData}\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
|
@@ -45,7 +45,7 @@ const Checkbox = React.forwardRef<HTMLInputElement, React.InputHTMLAttributes<HT
|
|
|
45
45
|
Checkbox.displayName = "Checkbox";
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
interface JobInputRendererProps {
|
|
48
|
+
export interface JobInputRendererProps {
|
|
49
49
|
jobInputSchema: JobInputSchemaType;
|
|
50
50
|
value: string | number | boolean | number[] | null;
|
|
51
51
|
onChange: (value: string | number | boolean | number[] | null) => void;
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export * from './lib/validation';
|
|
2
2
|
export * from './lib/job-input-schema';
|
|
3
|
-
export { default as JobInputsFormRenderer } from './components/JobInputsFormRenderer';
|
|
4
|
-
export { default as JobInputRenderer } from './components/JobInputRenderer';
|
|
5
|
-
export { default as SchemaPlayground } from './components/SchemaPlayground';
|
|
3
|
+
export { default as JobInputsFormRenderer, type JobInputsFormRendererProps } from './components/JobInputsFormRenderer';
|
|
4
|
+
export { default as JobInputRenderer, type JobInputRendererProps } from './components/JobInputRenderer';
|
|
5
|
+
export { default as SchemaPlayground, type SchemaPlaygroundProps } from './components/SchemaPlayground';
|