masumi-schema-validator-component 0.2.4 → 0.2.6
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.js +37 -16
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +37 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/SchemaPlayground.tsx +49 -16
package/dist/index.js
CHANGED
|
@@ -673,30 +673,51 @@ function SchemaPlayground({
|
|
|
673
673
|
onSchemaChange(schemaInput, validationResult.valid);
|
|
674
674
|
}
|
|
675
675
|
}, [schemaInput, validationResult.valid, onSchemaChange]);
|
|
676
|
-
|
|
676
|
+
const [isDarkMode, setIsDarkMode] = React2.useState(false);
|
|
677
|
+
React2.useEffect(() => {
|
|
678
|
+
const checkTheme = () => {
|
|
679
|
+
const isDark = document.documentElement.classList.contains("dark") || window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
680
|
+
setIsDarkMode(isDark);
|
|
681
|
+
};
|
|
682
|
+
checkTheme();
|
|
683
|
+
const observer = new MutationObserver(checkTheme);
|
|
684
|
+
observer.observe(document.documentElement, {
|
|
685
|
+
attributes: true,
|
|
686
|
+
attributeFilter: ["class"]
|
|
687
|
+
});
|
|
688
|
+
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
|
689
|
+
const handleChange = () => checkTheme();
|
|
690
|
+
mediaQuery.addEventListener("change", handleChange);
|
|
691
|
+
return () => {
|
|
692
|
+
observer.disconnect();
|
|
693
|
+
mediaQuery.removeEventListener("change", handleChange);
|
|
694
|
+
};
|
|
695
|
+
}, []);
|
|
696
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid grid-cols-2 gap-4 h-full", className), children: [
|
|
677
697
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 h-full min-h-[500px]", children: [
|
|
678
|
-
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "1. Schema Definition (JSON)" }),
|
|
679
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 relative border rounded-lg overflow-hidden shadow-sm bg-white flex flex-col", children: [
|
|
680
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-b bg-gray-50", children: [
|
|
698
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-gray-900 dark:text-gray-100", children: "1. Schema Definition (JSON)" }),
|
|
699
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 relative border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden shadow-sm bg-white dark:bg-gray-800 flex flex-col", children: [
|
|
700
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900", children: [
|
|
681
701
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: examples.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
682
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-gray-700 whitespace-nowrap", children: "Load Example:" }),
|
|
702
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium text-gray-700 dark:text-gray-300 whitespace-nowrap", children: "Load Example:" }),
|
|
683
703
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
684
704
|
"select",
|
|
685
705
|
{
|
|
686
|
-
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]",
|
|
706
|
+
className: "border border-gray-200 dark:border-gray-700 rounded px-2 py-1 text-xs bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 max-w-[200px]",
|
|
687
707
|
value: selectedExample,
|
|
688
708
|
onChange: handleSelectExample,
|
|
689
709
|
children: examples.map((ex) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: ex.label, children: ex.label }, ex.label))
|
|
690
710
|
}
|
|
691
711
|
)
|
|
692
712
|
] }) }),
|
|
693
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `text-xs px-2 py-1 rounded-full font-medium ${validationResult.valid ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800"}`, children: validationResult.valid ? "Valid Schema" : "Invalid Schema" })
|
|
713
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `text-xs px-2 py-1 rounded-full font-medium ${validationResult.valid ? "bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200" : "bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200"}`, children: validationResult.valid ? "Valid Schema" : "Invalid Schema" })
|
|
694
714
|
] }),
|
|
695
715
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
696
716
|
Editor__default.default,
|
|
697
717
|
{
|
|
698
718
|
height: "100%",
|
|
699
719
|
defaultLanguage: "json",
|
|
720
|
+
theme: isDarkMode ? "vs-dark" : "vs-light",
|
|
700
721
|
value: schemaInput,
|
|
701
722
|
onChange: (value) => {
|
|
702
723
|
setSchemaInput(value || "");
|
|
@@ -718,10 +739,10 @@ function SchemaPlayground({
|
|
|
718
739
|
}
|
|
719
740
|
}
|
|
720
741
|
) }),
|
|
721
|
-
!validationResult.valid && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t bg-red-50 p-4 text-sm max-h-40 overflow-y-auto z-10 relative", children: [
|
|
722
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-bold text-red-800 mb-2", children: "Validation Errors:" }),
|
|
723
|
-
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "list-disc pl-5 space-y-1 text-red-700", children: validationResult.errors.map((err, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { children: [
|
|
724
|
-
err.line ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono bg-red-100 px-1 rounded mr-1", children: [
|
|
742
|
+
!validationResult.valid && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t border-gray-200 dark:border-gray-700 bg-red-50 dark:bg-red-900/20 p-4 text-sm max-h-40 overflow-y-auto z-10 relative", children: [
|
|
743
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-bold text-red-800 dark:text-red-300 mb-2", children: "Validation Errors:" }),
|
|
744
|
+
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "list-disc pl-5 space-y-1 text-red-700 dark:text-red-300", children: validationResult.errors.map((err, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { children: [
|
|
745
|
+
err.line ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono bg-red-100 dark:bg-red-900/40 text-red-800 dark:text-red-300 px-1 rounded mr-1", children: [
|
|
725
746
|
"line ",
|
|
726
747
|
err.line
|
|
727
748
|
] }) : null,
|
|
@@ -731,17 +752,17 @@ function SchemaPlayground({
|
|
|
731
752
|
] })
|
|
732
753
|
] }),
|
|
733
754
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 h-full overflow-hidden min-h-[500px]", children: [
|
|
734
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "2. Form Preview" }) }),
|
|
735
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 flex flex-col gap-4 overflow-hidden", children: validationResult.valid ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto border rounded-lg shadow-sm bg-white p-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
755
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-gray-900 dark:text-gray-100", children: "2. Form Preview" }) }),
|
|
756
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 flex flex-col gap-4 overflow-hidden", children: validationResult.valid ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto border border-gray-200 dark:border-gray-700 rounded-lg shadow-sm bg-white dark:bg-gray-800 p-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
736
757
|
JobInputsFormRenderer,
|
|
737
758
|
{
|
|
738
759
|
jobInputSchemas: validationResult.parsedSchemas || [],
|
|
739
760
|
onFormDataChange: setFormData,
|
|
740
761
|
className: "h-full border-0 shadow-none"
|
|
741
762
|
}
|
|
742
|
-
) }) }) : /* @__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: [
|
|
743
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg font-medium", children: "Preview Unavailable" }),
|
|
744
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: "Fix schema errors to see the form" })
|
|
763
|
+
) }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 border-2 border-dashed border-gray-300 dark:border-gray-700 rounded-lg flex items-center justify-center bg-gray-50 dark:bg-gray-900 text-gray-400 dark:text-gray-500", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
764
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg font-medium text-gray-600 dark:text-gray-400", children: "Preview Unavailable" }),
|
|
765
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-gray-500 dark:text-gray-500", children: "Fix schema errors to see the form" })
|
|
745
766
|
] }) }) })
|
|
746
767
|
] })
|
|
747
768
|
] });
|
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\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}\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 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 return (\n <div className={cn(\"grid 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 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"]}
|
|
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}\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 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 // Detect dark mode for Monaco Editor\n const [isDarkMode, setIsDarkMode] = useState(false);\n\n useEffect(() => {\n // Check initial theme\n const checkTheme = () => {\n const isDark = \n document.documentElement.classList.contains('dark') ||\n (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches);\n setIsDarkMode(isDark);\n };\n\n checkTheme();\n\n // Watch for theme changes\n const observer = new MutationObserver(checkTheme);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n\n // Watch for system theme changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => checkTheme();\n mediaQuery.addEventListener('change', handleChange);\n\n return () => {\n observer.disconnect();\n mediaQuery.removeEventListener('change', handleChange);\n };\n }, []);\n\n return (\n <div className={cn(\"grid grid-cols-2 gap-4 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 dark:text-gray-100\">1. Schema Definition (JSON)</h2>\n \n <div className=\"flex-1 relative border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden shadow-sm bg-white dark:bg-gray-800 flex flex-col\">\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900\">\n <div className=\"flex items-center gap-2\">\n {examples.length > 0 && (\n <>\n <span className=\"text-xs font-medium text-gray-700 dark:text-gray-300 whitespace-nowrap\">Load Example:</span>\n <select\n className=\"border border-gray-200 dark:border-gray-700 rounded px-2 py-1 text-xs bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-700 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 dark:bg-green-900 text-green-800 dark:text-green-200' : 'bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200'}`}>\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 theme={isDarkMode ? 'vs-dark' : 'vs-light'}\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 border-gray-200 dark:border-gray-700 bg-red-50 dark:bg-red-900/20 p-4 text-sm max-h-40 overflow-y-auto z-10 relative\">\n <p className=\"font-bold text-red-800 dark:text-red-300 mb-2\">Validation Errors:</p>\n <ul className=\"list-disc pl-5 space-y-1 text-red-700 dark:text-red-300\">\n {validationResult.errors.map((err, i) => (\n <li key={i}>\n {err.line ? <span className=\"font-mono bg-red-100 dark:bg-red-900/40 text-red-800 dark:text-red-300 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 dark:text-gray-100\">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 border-gray-200 dark:border-gray-700 rounded-lg shadow-sm bg-white dark:bg-gray-800 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 dark:border-gray-700 rounded-lg flex items-center justify-center bg-gray-50 dark:bg-gray-900 text-gray-400 dark:text-gray-500\">\n <div className=\"text-center\">\n <p className=\"text-lg font-medium text-gray-600 dark:text-gray-400\">Preview Unavailable</p>\n <p className=\"text-sm text-gray-500 dark:text-gray-500\">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
|
@@ -665,30 +665,51 @@ function SchemaPlayground({
|
|
|
665
665
|
onSchemaChange(schemaInput, validationResult.valid);
|
|
666
666
|
}
|
|
667
667
|
}, [schemaInput, validationResult.valid, onSchemaChange]);
|
|
668
|
-
|
|
668
|
+
const [isDarkMode, setIsDarkMode] = useState(false);
|
|
669
|
+
useEffect(() => {
|
|
670
|
+
const checkTheme = () => {
|
|
671
|
+
const isDark = document.documentElement.classList.contains("dark") || window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
672
|
+
setIsDarkMode(isDark);
|
|
673
|
+
};
|
|
674
|
+
checkTheme();
|
|
675
|
+
const observer = new MutationObserver(checkTheme);
|
|
676
|
+
observer.observe(document.documentElement, {
|
|
677
|
+
attributes: true,
|
|
678
|
+
attributeFilter: ["class"]
|
|
679
|
+
});
|
|
680
|
+
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
|
681
|
+
const handleChange = () => checkTheme();
|
|
682
|
+
mediaQuery.addEventListener("change", handleChange);
|
|
683
|
+
return () => {
|
|
684
|
+
observer.disconnect();
|
|
685
|
+
mediaQuery.removeEventListener("change", handleChange);
|
|
686
|
+
};
|
|
687
|
+
}, []);
|
|
688
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("grid grid-cols-2 gap-4 h-full", className), children: [
|
|
669
689
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 h-full min-h-[500px]", children: [
|
|
670
|
-
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "1. Schema Definition (JSON)" }),
|
|
671
|
-
/* @__PURE__ */ jsxs("div", { className: "flex-1 relative border rounded-lg overflow-hidden shadow-sm bg-white flex flex-col", children: [
|
|
672
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-b bg-gray-50", children: [
|
|
690
|
+
/* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold text-gray-900 dark:text-gray-100", children: "1. Schema Definition (JSON)" }),
|
|
691
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 relative border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden shadow-sm bg-white dark:bg-gray-800 flex flex-col", children: [
|
|
692
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900", children: [
|
|
673
693
|
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: examples.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
674
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-gray-700 whitespace-nowrap", children: "Load Example:" }),
|
|
694
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-gray-700 dark:text-gray-300 whitespace-nowrap", children: "Load Example:" }),
|
|
675
695
|
/* @__PURE__ */ jsx(
|
|
676
696
|
"select",
|
|
677
697
|
{
|
|
678
|
-
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]",
|
|
698
|
+
className: "border border-gray-200 dark:border-gray-700 rounded px-2 py-1 text-xs bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 max-w-[200px]",
|
|
679
699
|
value: selectedExample,
|
|
680
700
|
onChange: handleSelectExample,
|
|
681
701
|
children: examples.map((ex) => /* @__PURE__ */ jsx("option", { value: ex.label, children: ex.label }, ex.label))
|
|
682
702
|
}
|
|
683
703
|
)
|
|
684
704
|
] }) }),
|
|
685
|
-
/* @__PURE__ */ jsx("div", { className: `text-xs px-2 py-1 rounded-full font-medium ${validationResult.valid ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800"}`, children: validationResult.valid ? "Valid Schema" : "Invalid Schema" })
|
|
705
|
+
/* @__PURE__ */ jsx("div", { className: `text-xs px-2 py-1 rounded-full font-medium ${validationResult.valid ? "bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200" : "bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200"}`, children: validationResult.valid ? "Valid Schema" : "Invalid Schema" })
|
|
686
706
|
] }),
|
|
687
707
|
/* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(
|
|
688
708
|
Editor,
|
|
689
709
|
{
|
|
690
710
|
height: "100%",
|
|
691
711
|
defaultLanguage: "json",
|
|
712
|
+
theme: isDarkMode ? "vs-dark" : "vs-light",
|
|
692
713
|
value: schemaInput,
|
|
693
714
|
onChange: (value) => {
|
|
694
715
|
setSchemaInput(value || "");
|
|
@@ -710,10 +731,10 @@ function SchemaPlayground({
|
|
|
710
731
|
}
|
|
711
732
|
}
|
|
712
733
|
) }),
|
|
713
|
-
!validationResult.valid && /* @__PURE__ */ jsxs("div", { className: "border-t bg-red-50 p-4 text-sm max-h-40 overflow-y-auto z-10 relative", children: [
|
|
714
|
-
/* @__PURE__ */ jsx("p", { className: "font-bold text-red-800 mb-2", children: "Validation Errors:" }),
|
|
715
|
-
/* @__PURE__ */ jsx("ul", { className: "list-disc pl-5 space-y-1 text-red-700", children: validationResult.errors.map((err, i) => /* @__PURE__ */ jsxs("li", { children: [
|
|
716
|
-
err.line ? /* @__PURE__ */ jsxs("span", { className: "font-mono bg-red-100 px-1 rounded mr-1", children: [
|
|
734
|
+
!validationResult.valid && /* @__PURE__ */ jsxs("div", { className: "border-t border-gray-200 dark:border-gray-700 bg-red-50 dark:bg-red-900/20 p-4 text-sm max-h-40 overflow-y-auto z-10 relative", children: [
|
|
735
|
+
/* @__PURE__ */ jsx("p", { className: "font-bold text-red-800 dark:text-red-300 mb-2", children: "Validation Errors:" }),
|
|
736
|
+
/* @__PURE__ */ jsx("ul", { className: "list-disc pl-5 space-y-1 text-red-700 dark:text-red-300", children: validationResult.errors.map((err, i) => /* @__PURE__ */ jsxs("li", { children: [
|
|
737
|
+
err.line ? /* @__PURE__ */ jsxs("span", { className: "font-mono bg-red-100 dark:bg-red-900/40 text-red-800 dark:text-red-300 px-1 rounded mr-1", children: [
|
|
717
738
|
"line ",
|
|
718
739
|
err.line
|
|
719
740
|
] }) : null,
|
|
@@ -723,17 +744,17 @@ function SchemaPlayground({
|
|
|
723
744
|
] })
|
|
724
745
|
] }),
|
|
725
746
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 h-full overflow-hidden min-h-[500px]", children: [
|
|
726
|
-
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold text-gray-900", children: "2. Form Preview" }) }),
|
|
727
|
-
/* @__PURE__ */ jsx("div", { className: "flex-1 flex flex-col gap-4 overflow-hidden", children: validationResult.valid ? /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto border rounded-lg shadow-sm bg-white p-1", children: /* @__PURE__ */ jsx(
|
|
747
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold text-gray-900 dark:text-gray-100", children: "2. Form Preview" }) }),
|
|
748
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 flex flex-col gap-4 overflow-hidden", children: validationResult.valid ? /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto border border-gray-200 dark:border-gray-700 rounded-lg shadow-sm bg-white dark:bg-gray-800 p-1", children: /* @__PURE__ */ jsx(
|
|
728
749
|
JobInputsFormRenderer,
|
|
729
750
|
{
|
|
730
751
|
jobInputSchemas: validationResult.parsedSchemas || [],
|
|
731
752
|
onFormDataChange: setFormData,
|
|
732
753
|
className: "h-full border-0 shadow-none"
|
|
733
754
|
}
|
|
734
|
-
) }) }) : /* @__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: [
|
|
735
|
-
/* @__PURE__ */ jsx("p", { className: "text-lg font-medium", children: "Preview Unavailable" }),
|
|
736
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm", children: "Fix schema errors to see the form" })
|
|
755
|
+
) }) }) : /* @__PURE__ */ jsx("div", { className: "flex-1 border-2 border-dashed border-gray-300 dark:border-gray-700 rounded-lg flex items-center justify-center bg-gray-50 dark:bg-gray-900 text-gray-400 dark:text-gray-500", children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
756
|
+
/* @__PURE__ */ jsx("p", { className: "text-lg font-medium text-gray-600 dark:text-gray-400", children: "Preview Unavailable" }),
|
|
757
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-gray-500 dark:text-gray-500", children: "Fix schema errors to see the form" })
|
|
737
758
|
] }) }) })
|
|
738
759
|
] })
|
|
739
760
|
] });
|
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\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}\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 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 return (\n <div className={cn(\"grid 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 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"]}
|
|
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}\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 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 // Detect dark mode for Monaco Editor\n const [isDarkMode, setIsDarkMode] = useState(false);\n\n useEffect(() => {\n // Check initial theme\n const checkTheme = () => {\n const isDark = \n document.documentElement.classList.contains('dark') ||\n (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches);\n setIsDarkMode(isDark);\n };\n\n checkTheme();\n\n // Watch for theme changes\n const observer = new MutationObserver(checkTheme);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n });\n\n // Watch for system theme changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => checkTheme();\n mediaQuery.addEventListener('change', handleChange);\n\n return () => {\n observer.disconnect();\n mediaQuery.removeEventListener('change', handleChange);\n };\n }, []);\n\n return (\n <div className={cn(\"grid grid-cols-2 gap-4 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 dark:text-gray-100\">1. Schema Definition (JSON)</h2>\n \n <div className=\"flex-1 relative border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden shadow-sm bg-white dark:bg-gray-800 flex flex-col\">\n <div className=\"flex items-center justify-between px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900\">\n <div className=\"flex items-center gap-2\">\n {examples.length > 0 && (\n <>\n <span className=\"text-xs font-medium text-gray-700 dark:text-gray-300 whitespace-nowrap\">Load Example:</span>\n <select\n className=\"border border-gray-200 dark:border-gray-700 rounded px-2 py-1 text-xs bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-700 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 dark:bg-green-900 text-green-800 dark:text-green-200' : 'bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200'}`}>\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 theme={isDarkMode ? 'vs-dark' : 'vs-light'}\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 border-gray-200 dark:border-gray-700 bg-red-50 dark:bg-red-900/20 p-4 text-sm max-h-40 overflow-y-auto z-10 relative\">\n <p className=\"font-bold text-red-800 dark:text-red-300 mb-2\">Validation Errors:</p>\n <ul className=\"list-disc pl-5 space-y-1 text-red-700 dark:text-red-300\">\n {validationResult.errors.map((err, i) => (\n <li key={i}>\n {err.line ? <span className=\"font-mono bg-red-100 dark:bg-red-900/40 text-red-800 dark:text-red-300 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 dark:text-gray-100\">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 border-gray-200 dark:border-gray-700 rounded-lg shadow-sm bg-white dark:bg-gray-800 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 dark:border-gray-700 rounded-lg flex items-center justify-center bg-gray-50 dark:bg-gray-900 text-gray-400 dark:text-gray-500\">\n <div className=\"text-center\">\n <p className=\"text-lg font-medium text-gray-600 dark:text-gray-400\">Preview Unavailable</p>\n <p className=\"text-sm text-gray-500 dark:text-gray-500\">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
|
@@ -52,20 +52,52 @@ export default function SchemaPlayground({
|
|
|
52
52
|
}
|
|
53
53
|
}, [schemaInput, validationResult.valid, onSchemaChange]);
|
|
54
54
|
|
|
55
|
+
// Detect dark mode for Monaco Editor
|
|
56
|
+
const [isDarkMode, setIsDarkMode] = useState(false);
|
|
57
|
+
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
// Check initial theme
|
|
60
|
+
const checkTheme = () => {
|
|
61
|
+
const isDark =
|
|
62
|
+
document.documentElement.classList.contains('dark') ||
|
|
63
|
+
(window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches);
|
|
64
|
+
setIsDarkMode(isDark);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
checkTheme();
|
|
68
|
+
|
|
69
|
+
// Watch for theme changes
|
|
70
|
+
const observer = new MutationObserver(checkTheme);
|
|
71
|
+
observer.observe(document.documentElement, {
|
|
72
|
+
attributes: true,
|
|
73
|
+
attributeFilter: ['class'],
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// Watch for system theme changes
|
|
77
|
+
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
78
|
+
const handleChange = () => checkTheme();
|
|
79
|
+
mediaQuery.addEventListener('change', handleChange);
|
|
80
|
+
|
|
81
|
+
return () => {
|
|
82
|
+
observer.disconnect();
|
|
83
|
+
mediaQuery.removeEventListener('change', handleChange);
|
|
84
|
+
};
|
|
85
|
+
}, []);
|
|
86
|
+
|
|
55
87
|
return (
|
|
56
|
-
<div className={cn("grid grid-cols-2 gap-
|
|
88
|
+
<div className={cn("grid grid-cols-2 gap-4 h-full", className)}>
|
|
57
89
|
{/* Left Column: Schema Editor */}
|
|
58
90
|
<div className="flex flex-col gap-4 h-full min-h-[500px]">
|
|
59
|
-
<h2 className="text-lg font-semibold text-gray-900">1. Schema Definition (JSON)</h2>
|
|
91
|
+
<h2 className="text-lg font-semibold text-gray-900 dark:text-gray-100">1. Schema Definition (JSON)</h2>
|
|
60
92
|
|
|
61
|
-
<div className="flex-1 relative border rounded-lg overflow-hidden shadow-sm bg-white flex flex-col">
|
|
62
|
-
<div className="flex items-center justify-between px-4 py-2 border-b bg-gray-50">
|
|
93
|
+
<div className="flex-1 relative border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden shadow-sm bg-white dark:bg-gray-800 flex flex-col">
|
|
94
|
+
<div className="flex items-center justify-between px-4 py-2 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-900">
|
|
63
95
|
<div className="flex items-center gap-2">
|
|
64
96
|
{examples.length > 0 && (
|
|
65
97
|
<>
|
|
66
|
-
<span className="text-xs font-medium text-gray-700 whitespace-nowrap">Load Example:</span>
|
|
98
|
+
<span className="text-xs font-medium text-gray-700 dark:text-gray-300 whitespace-nowrap">Load Example:</span>
|
|
67
99
|
<select
|
|
68
|
-
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]"
|
|
100
|
+
className="border border-gray-200 dark:border-gray-700 rounded px-2 py-1 text-xs bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 max-w-[200px]"
|
|
69
101
|
value={selectedExample}
|
|
70
102
|
onChange={handleSelectExample}
|
|
71
103
|
>
|
|
@@ -78,7 +110,7 @@ export default function SchemaPlayground({
|
|
|
78
110
|
</>
|
|
79
111
|
)}
|
|
80
112
|
</div>
|
|
81
|
-
<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'}`}>
|
|
113
|
+
<div className={`text-xs px-2 py-1 rounded-full font-medium ${validationResult.valid ? 'bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200' : 'bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200'}`}>
|
|
82
114
|
{validationResult.valid ? 'Valid Schema' : 'Invalid Schema'}
|
|
83
115
|
</div>
|
|
84
116
|
</div>
|
|
@@ -87,6 +119,7 @@ export default function SchemaPlayground({
|
|
|
87
119
|
<Editor
|
|
88
120
|
height="100%"
|
|
89
121
|
defaultLanguage="json"
|
|
122
|
+
theme={isDarkMode ? 'vs-dark' : 'vs-light'}
|
|
90
123
|
value={schemaInput}
|
|
91
124
|
onChange={(value) => {
|
|
92
125
|
setSchemaInput(value || '');
|
|
@@ -111,12 +144,12 @@ export default function SchemaPlayground({
|
|
|
111
144
|
</div>
|
|
112
145
|
|
|
113
146
|
{!validationResult.valid && (
|
|
114
|
-
<div className="border-t bg-red-50 p-4 text-sm max-h-40 overflow-y-auto z-10 relative">
|
|
115
|
-
<p className="font-bold text-red-800 mb-2">Validation Errors:</p>
|
|
116
|
-
<ul className="list-disc pl-5 space-y-1 text-red-700">
|
|
147
|
+
<div className="border-t border-gray-200 dark:border-gray-700 bg-red-50 dark:bg-red-900/20 p-4 text-sm max-h-40 overflow-y-auto z-10 relative">
|
|
148
|
+
<p className="font-bold text-red-800 dark:text-red-300 mb-2">Validation Errors:</p>
|
|
149
|
+
<ul className="list-disc pl-5 space-y-1 text-red-700 dark:text-red-300">
|
|
117
150
|
{validationResult.errors.map((err, i) => (
|
|
118
151
|
<li key={i}>
|
|
119
|
-
{err.line ? <span className="font-mono bg-red-100 px-1 rounded mr-1">line {err.line}</span> : null}
|
|
152
|
+
{err.line ? <span className="font-mono bg-red-100 dark:bg-red-900/40 text-red-800 dark:text-red-300 px-1 rounded mr-1">line {err.line}</span> : null}
|
|
120
153
|
{err.message}
|
|
121
154
|
</li>
|
|
122
155
|
))}
|
|
@@ -129,13 +162,13 @@ export default function SchemaPlayground({
|
|
|
129
162
|
{/* Right Column: Preview */}
|
|
130
163
|
<div className="flex flex-col gap-4 h-full overflow-hidden min-h-[500px]">
|
|
131
164
|
<div>
|
|
132
|
-
<h2 className="text-lg font-semibold text-gray-900">2. Form Preview</h2>
|
|
165
|
+
<h2 className="text-lg font-semibold text-gray-900 dark:text-gray-100">2. Form Preview</h2>
|
|
133
166
|
</div>
|
|
134
167
|
|
|
135
168
|
<div className="flex-1 flex flex-col gap-4 overflow-hidden">
|
|
136
169
|
{validationResult.valid ? (
|
|
137
170
|
<>
|
|
138
|
-
<div className="flex-1 overflow-y-auto border rounded-lg shadow-sm bg-white p-1">
|
|
171
|
+
<div className="flex-1 overflow-y-auto border border-gray-200 dark:border-gray-700 rounded-lg shadow-sm bg-white dark:bg-gray-800 p-1">
|
|
139
172
|
{/* Component Preview Wrapper */}
|
|
140
173
|
<JobInputsFormRenderer
|
|
141
174
|
jobInputSchemas={validationResult.parsedSchemas || []}
|
|
@@ -145,10 +178,10 @@ export default function SchemaPlayground({
|
|
|
145
178
|
</div>
|
|
146
179
|
</>
|
|
147
180
|
) : (
|
|
148
|
-
<div className="flex-1 border-2 border-dashed border-gray-300 rounded-lg flex items-center justify-center bg-gray-50 text-gray-400">
|
|
181
|
+
<div className="flex-1 border-2 border-dashed border-gray-300 dark:border-gray-700 rounded-lg flex items-center justify-center bg-gray-50 dark:bg-gray-900 text-gray-400 dark:text-gray-500">
|
|
149
182
|
<div className="text-center">
|
|
150
|
-
<p className="text-lg font-medium">Preview Unavailable</p>
|
|
151
|
-
<p className="text-sm">Fix schema errors to see the form</p>
|
|
183
|
+
<p className="text-lg font-medium text-gray-600 dark:text-gray-400">Preview Unavailable</p>
|
|
184
|
+
<p className="text-sm text-gray-500 dark:text-gray-500">Fix schema errors to see the form</p>
|
|
152
185
|
</div>
|
|
153
186
|
</div>
|
|
154
187
|
)}
|