{"version":3,"sources":["../src/index.ts","#style-inject","../src/index.css","../src/hooks/useSchemaState.ts","../src/components/ui/card.tsx","../src/lib/utils.ts","../src/components/ui/scroll-area.tsx","../src/components/ui/input.tsx","../src/components/ui/select.tsx","../src/components/ui/switch.tsx","../src/components/ui/button.tsx","../src/components/schema/PropertyEditor.tsx","../src/components/schema/EnumEditor.tsx","../src/components/schema/ArrayTypeEditor.tsx","../src/components/schema/ObjectTypeEditor.tsx","../src/components/schema/SchemaHeader.tsx","../src/components/schema/SchemaOutput.tsx","../src/utils/schemaUtils.ts","../src/components/SchemaBuilder.tsx","../src/utils/tailwindContent.ts"],"sourcesContent":["import './index.css';\n\nexport { SchemaBuilder } from './components/SchemaBuilder';\nexport { useSchemaState } from './hooks/useSchemaState';\nexport { tailwindContent } from './utils/tailwindContent';","\n          export default function styleInject(css, { insertAt } = {}) {\n            if (!css || typeof document === 'undefined') return\n          \n            const head = document.head || document.getElementsByTagName('head')[0]\n            const style = document.createElement('style')\n            style.type = 'text/css'\n          \n            if (insertAt === 'top') {\n              if (head.firstChild) {\n                head.insertBefore(style, head.firstChild)\n              } else {\n                head.appendChild(style)\n              }\n            } else {\n              head.appendChild(style)\n            }\n          \n            if (style.styleSheet) {\n              style.styleSheet.cssText = css\n            } else {\n              style.appendChild(document.createTextNode(css))\n            }\n          }\n          ","import styleInject from '#style-inject';styleInject(\"*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: \\\"\\\"}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 98%;--foreground: 240 10% 3.9%;--card: 0 0% 100%;--card-foreground: 240 10% 3.9%;--popover: 0 0% 100%;--popover-foreground: 240 10% 3.9%;--primary: 240 5.9% 10%;--primary-foreground: 0 0% 98%;--secondary: 240 4.8% 95.9%;--secondary-foreground: 240 5.9% 10%;--muted: 240 4.8% 95.9%;--muted-foreground: 240 3.8% 46.1%;--accent: 240 4.8% 95.9%;--accent-foreground: 240 5.9% 10%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 240 5.9% 90%;--input: 240 5.9% 90%;--ring: 240 5.9% 10%;--radius: .75rem}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.left-2{left:.5rem}.z-50{z-index:50}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mb-6{margin-bottom:1.5rem}.ml-8{margin-left:2rem}.mr-2{margin-right:.5rem}.mt-2{margin-top:.5rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-2\\\\.5{height:.625rem}.h-3{height:.75rem}.h-3\\\\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-9{height:2.25rem}.h-\\\\[calc\\\\(100vh-200px\\\\)\\\\]{height:calc(100vh - 200px)}.h-\\\\[var\\\\(--radix-select-trigger-height\\\\)\\\\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-96{max-height:24rem}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-2\\\\.5{width:.625rem}.w-3{width:.75rem}.w-3\\\\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-\\\\[180px\\\\]{width:180px}.w-full{width:100%}.min-w-\\\\[600px\\\\]{min-width:600px}.min-w-\\\\[8rem\\\\]{min-width:8rem}.min-w-\\\\[var\\\\(--radix-select-trigger-width\\\\)\\\\]{min-width:var(--radix-select-trigger-width)}.max-w-\\\\[800px\\\\]{max-width:800px}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:fade-in .3s ease-out}@keyframes slide-in{0%{transform:translate(-10px);opacity:0}to{transform:translate(0);opacity:1}}.animate-slide-in{animation:slide-in .3s ease-out}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\\\\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-\\\\[inherit\\\\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.border{border-width:1px}.border-2{border-width:2px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\\\\/50{border-color:hsl(var(--destructive) / .5)}.border-input{border-color:hsl(var(--input))}.border-transparent{border-color:transparent}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-background{background-color:hsl(var(--background))}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\\\\/50{background-color:hsl(var(--muted) / .5)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-opacity-50{--tw-bg-opacity: .5}.p-0{padding:0}.p-1{padding:.25rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-\\\\[1px\\\\]{padding:1px}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\\\\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pt-0{padding-top:0}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-none{line-height:1}.tracking-tight{letter-spacing:-.025em}.text-card-foreground{color:hsl(var(--card-foreground))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.blur-\\\\[2px\\\\]{--tw-blur: blur(2px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:hsl(var(--muted));border-radius:4px}::-webkit-scrollbar-thumb:hover{background:hsl(var(--muted-foreground))}.file\\\\:border-0::file-selector-button{border-width:0px}.file\\\\:bg-transparent::file-selector-button{background-color:transparent}.file\\\\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\\\\:font-medium::file-selector-button{font-weight:500}.file\\\\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\\\\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\\\\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.hover\\\\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\\\\:bg-destructive\\\\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\\\\:bg-primary\\\\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\\\\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\\\\:bg-secondary\\\\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\\\\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\\\\:text-destructive\\\\/90:hover{color:hsl(var(--destructive) / .9)}.hover\\\\:underline:hover{text-decoration-line:underline}.hover\\\\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\\\\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\\\\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\\\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\\\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\\\\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\\\\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\\\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\\\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\\\\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\\\\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\\\\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.active\\\\:cursor-grabbing:active{cursor:grabbing}.disabled\\\\:pointer-events-none:disabled{pointer-events:none}.disabled\\\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\\\:opacity-50:disabled{opacity:.5}.data-\\\\[disabled\\\\]\\\\:pointer-events-none[data-disabled]{pointer-events:none}.data-\\\\[side\\\\=bottom\\\\]\\\\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\\\[side\\\\=left\\\\]\\\\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\\\[side\\\\=right\\\\]\\\\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\\\[side\\\\=top\\\\]\\\\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\\\[state\\\\=checked\\\\]\\\\:translate-x-5[data-state=checked]{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\\\[state\\\\=unchecked\\\\]\\\\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\\\[state\\\\=checked\\\\]\\\\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\\\\[state\\\\=unchecked\\\\]\\\\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\\\\[disabled\\\\]\\\\:opacity-50[data-disabled]{opacity:.5}.data-\\\\[state\\\\=open\\\\]\\\\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\\\\[state\\\\=closed\\\\]\\\\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\\\\[state\\\\=closed\\\\]\\\\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\\\\[state\\\\=open\\\\]\\\\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\\\\[state\\\\=closed\\\\]\\\\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\\\\[state\\\\=open\\\\]\\\\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\\\\[side\\\\=bottom\\\\]\\\\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\\\\[side\\\\=left\\\\]\\\\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\\\\[side\\\\=right\\\\]\\\\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\\\\[side\\\\=top\\\\]\\\\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.dark\\\\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}@media (min-width: 768px){.md\\\\:text-sm{font-size:.875rem;line-height:1.25rem}}.\\\\[\\\\&\\\\>span\\\\]\\\\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\\\\[\\\\&\\\\>svg\\\\+div\\\\]\\\\:translate-y-\\\\[-3px\\\\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\\\\[\\\\&\\\\>svg\\\\]\\\\:absolute>svg{position:absolute}.\\\\[\\\\&\\\\>svg\\\\]\\\\:left-4>svg{left:1rem}.\\\\[\\\\&\\\\>svg\\\\]\\\\:top-4>svg{top:1rem}.\\\\[\\\\&\\\\>svg\\\\]\\\\:text-destructive>svg{color:hsl(var(--destructive))}.\\\\[\\\\&\\\\>svg\\\\]\\\\:text-foreground>svg{color:hsl(var(--foreground))}.\\\\[\\\\&\\\\>svg\\\\~\\\\*\\\\]\\\\:pl-7>svg~*{padding-left:1.75rem}.\\\\[\\\\&_p\\\\]\\\\:leading-relaxed p{line-height:1.625}.\\\\[\\\\&_svg\\\\]\\\\:pointer-events-none svg{pointer-events:none}.\\\\[\\\\&_svg\\\\]\\\\:size-4 svg{width:1rem;height:1rem}.\\\\[\\\\&_svg\\\\]\\\\:shrink-0 svg{flex-shrink:0}\\n\")","import { useState } from \"react\";\nimport { SchemaDefinition, SchemaProperty } from \"@/types/schema\";\nimport { arrayMove } from \"@dnd-kit/sortable\";\n\nconst defaultSchema: SchemaDefinition = {\n  properties: [],\n  additionalProperties: false,\n};\n\nexport const useSchemaState = (\n  initialSchema: SchemaDefinition = defaultSchema,\n  initialStrictMode = true\n) => {\n  const [schema, setSchema] = useState<SchemaDefinition>(initialSchema);\n  const [isStrictMode, setIsStrictMode] = useState(initialStrictMode);\n  const [enumInputValues, setEnumInputValues] = useState<{ [key: number]: string }>({});\n\n  const addProperty = () => {\n    setSchema((prev) => ({\n      ...prev,\n      properties: [\n        ...prev.properties,\n        {\n          name: \"\",\n          type: \"string\",\n          required: isStrictMode,\n          hasEnum: false,\n          enum: [],\n        },\n      ],\n    }));\n  };\n\n  const removeProperty = (index: number) => {\n    setSchema((prev) => ({\n      ...prev,\n      properties: prev.properties.filter((_, i) => i !== index),\n    }));\n  };\n\n  const updateProperty = (index: number, updates: Partial<SchemaProperty>) => {\n    setSchema((prev) => ({\n      ...prev,\n      properties: prev.properties.map((prop, i) => {\n        if (i !== index) return prop;\n        \n        if (updates.type && updates.type !== prop.type) {\n          return {\n            ...prop,\n            ...updates,\n            hasEnum: false,\n            enum: [],\n          };\n        }\n        \n        return { ...prop, ...updates };\n      })\n    }));\n  };\n\n  const handlePropertyReorder = (oldIndex: number, newIndex: number) => {\n    setSchema((prev) => ({\n      ...prev,\n      properties: arrayMove(prev.properties, oldIndex, newIndex),\n    }));\n  };\n\n  const handleStrictModeChange = (checked: boolean) => {\n    setIsStrictMode(checked);\n    setSchema((prev) => ({\n      ...prev,\n      properties: prev.properties.map(prop => ({\n        ...prop,\n        required: checked ? true : prop.required\n      }))\n    }));\n  };\n\n  // Return an object with all state and methods\n  return {\n    schema,\n    isStrictMode,\n    enumInputValues,\n    setEnumInputValues,\n    addProperty,\n    removeProperty,\n    updateProperty,\n    handlePropertyReorder,\n    handleStrictModeChange,\n  };\n};\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Card = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(\n      \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n      className\n    )}\n    {...props}\n  />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n    {...props}\n  />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n  <h3\n    ref={ref}\n    className={cn(\n      \"text-2xl font-semibold leading-none tracking-tight\",\n      className\n    )}\n    {...props}\n  />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n  <p\n    ref={ref}\n    className={cn(\"text-sm text-muted-foreground\", className)}\n    {...props}\n  />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n  <div\n    ref={ref}\n    className={cn(\"flex items-center p-6 pt-0\", className)}\n    {...props}\n  />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n  React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n  <ScrollAreaPrimitive.Root\n    ref={ref}\n    className={cn(\"relative overflow-hidden\", className)}\n    {...props}\n  >\n    <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n      {children}\n    </ScrollAreaPrimitive.Viewport>\n    <ScrollBar />\n    <ScrollAreaPrimitive.Corner />\n  </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n  React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n  React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n  <ScrollAreaPrimitive.ScrollAreaScrollbar\n    ref={ref}\n    orientation={orientation}\n    className={cn(\n      \"flex touch-none select-none transition-colors\",\n      orientation === \"vertical\" &&\n        \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n      orientation === \"horizontal\" &&\n        \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n      className\n    )}\n    {...props}\n  >\n    <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n  </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n  ({ className, type, ...props }, ref) => {\n    return (\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-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground 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 md:text-sm\",\n          className\n        )}\n        ref={ref}\n        {...props}\n      />\n    )\n  }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n  <SelectPrimitive.Trigger\n    ref={ref}\n    className={cn(\n      \"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 [&>span]:line-clamp-1\",\n      className\n    )}\n    {...props}\n  >\n    {children}\n    <SelectPrimitive.Icon asChild>\n      <ChevronDown className=\"h-4 w-4 opacity-50\" />\n    </SelectPrimitive.Icon>\n  </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.ScrollUpButton\n    ref={ref}\n    className={cn(\n      \"flex cursor-default items-center justify-center py-1\",\n      className\n    )}\n    {...props}\n  >\n    <ChevronUp className=\"h-4 w-4\" />\n  </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.ScrollDownButton\n    ref={ref}\n    className={cn(\n      \"flex cursor-default items-center justify-center py-1\",\n      className\n    )}\n    {...props}\n  >\n    <ChevronDown className=\"h-4 w-4\" />\n  </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n  SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n  <SelectPrimitive.Portal>\n    <SelectPrimitive.Content\n      ref={ref}\n      className={cn(\n        \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n        position === \"popper\" &&\n          \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n        className\n      )}\n      position={position}\n      {...props}\n    >\n      <SelectScrollUpButton />\n      <SelectPrimitive.Viewport\n        className={cn(\n          \"p-1\",\n          position === \"popper\" &&\n            \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n        )}\n      >\n        {children}\n      </SelectPrimitive.Viewport>\n      <SelectScrollDownButton />\n    </SelectPrimitive.Content>\n  </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Label>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.Label\n    ref={ref}\n    className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n    {...props}\n  />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n  <SelectPrimitive.Item\n    ref={ref}\n    className={cn(\n      \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n      className\n    )}\n    {...props}\n  >\n    <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n      <SelectPrimitive.ItemIndicator>\n        <Check className=\"h-4 w-4\" />\n      </SelectPrimitive.ItemIndicator>\n    </span>\n\n    <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n  </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n  React.ElementRef<typeof SelectPrimitive.Separator>,\n  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n  <SelectPrimitive.Separator\n    ref={ref}\n    className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n    {...props}\n  />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n  Select,\n  SelectGroup,\n  SelectValue,\n  SelectTrigger,\n  SelectContent,\n  SelectLabel,\n  SelectItem,\n  SelectSeparator,\n  SelectScrollUpButton,\n  SelectScrollDownButton,\n}\n","import * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Switch = React.forwardRef<\n  React.ElementRef<typeof SwitchPrimitives.Root>,\n  React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n  <SwitchPrimitives.Root\n    className={cn(\n      \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n      className\n    )}\n    {...props}\n    ref={ref}\n  >\n    <SwitchPrimitives.Thumb\n      className={cn(\n        \"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0\"\n      )}\n    />\n  </SwitchPrimitives.Root>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center gap-2 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 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n        destructive:\n          \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n        outline:\n          \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n        secondary:\n          \"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      size: {\n        default: \"h-10 px-4 py-2\",\n        sm: \"h-9 rounded-md px-3\",\n        lg: \"h-11 rounded-md px-8\",\n        icon: \"h-10 w-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nexport interface ButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n    VariantProps<typeof buttonVariants> {\n  asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  ({ className, variant, size, asChild = false, ...props }, ref) => {\n    const Comp = asChild ? Slot : \"button\"\n    return (\n      <Comp\n        className={cn(buttonVariants({ variant, size, className }))}\n        ref={ref}\n        {...props}\n      />\n    )\n  }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import { Input } from \"../ui/input\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select\";\nimport { Switch } from \"../ui/switch\";\nimport { Button } from \"../ui/button\";\nimport { Card } from \"../ui/card\";\nimport { Trash2, GripVertical, AlertTriangle } from \"lucide-react\";\nimport { SchemaProperty } from \"@/types/schema\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { EnumEditor } from \"./EnumEditor\";\nimport { ArrayTypeEditor } from \"./ArrayTypeEditor\";\nimport { ObjectTypeEditor } from \"./ObjectTypeEditor\";\nimport { ValidationError } from \"@/utils/schemaUtils\";\nimport { cn } from \"@/lib/utils\";\n\ninterface PropertyEditorProps {\n  property: SchemaProperty;\n  index: number;\n  isStrictMode: boolean;\n  enumInputValue: string;\n  validationErrors?: ValidationError[];\n  onPropertyUpdate: (index: number, updates: Partial<SchemaProperty>) => void;\n  onRemoveProperty: (index: number) => void;\n  onEnumInputChange: (index: number, value: string) => void;\n  onAddEnumValue: (index: number) => void;\n  onRemoveEnumValue: (propertyIndex: number, enumIndex: number) => void;\n  nestingLevel?: number;\n}\n\nexport function PropertyEditor({\n  property,\n  index,\n  isStrictMode,\n  enumInputValue,\n  validationErrors = [],\n  onPropertyUpdate,\n  onRemoveProperty,\n  onEnumInputChange,\n  onAddEnumValue,\n  onRemoveEnumValue,\n  nestingLevel = 0,\n}: PropertyEditorProps) {\n  const {\n    attributes,\n    listeners,\n    setNodeRef,\n    transform,\n    transition,\n    isDragging,\n  } = useSortable({\n    id: `property-${index}`,\n  });\n\n  const style = {\n    transform: CSS.Transform.toString(transform),\n    transition,\n    zIndex: isDragging ? 1 : undefined,\n  };\n\n  const propertyErrors = validationErrors.filter(error => \n    error.path === `root[${index}]` || error.path.startsWith(`root[${index}].${property.name}`)\n  );\n\n  return (\n    <Card \n      ref={setNodeRef} \n      style={style}\n      className={cn(\n        \"p-4 border transition-all hover:shadow-md animate-slide-in\",\n        nestingLevel > 0 ? \"ml-8\" : \"\",\n        propertyErrors.length > 0 && \"border-destructive\"\n      )}\n    >\n      <div className=\"flex gap-4 items-start\">\n        <button\n          className=\"mt-2 cursor-grab active:cursor-grabbing p-1 hover:bg-secondary rounded\"\n          {...attributes}\n          {...listeners}\n        >\n          <GripVertical className=\"w-4 h-4\" />\n        </button>\n        <div className=\"flex-grow space-y-4\">\n          {propertyErrors.length > 0 && (\n            <div className=\"flex items-center gap-2 text-sm text-destructive\">\n              <AlertTriangle className=\"w-4 h-4\" />\n              <div className=\"space-y-1\">\n                {propertyErrors.map((error, i) => (\n                  <p key={i}>{error.message}</p>\n                ))}\n              </div>\n            </div>\n          )}\n          <div className=\"flex gap-4\">\n            <Input\n              placeholder=\"Property name\"\n              value={property.name}\n              onChange={(e) => onPropertyUpdate(index, { name: e.target.value })}\n              className=\"flex-grow\"\n            />\n            <Select\n              value={property.type}\n              onValueChange={(value) =>\n                onPropertyUpdate(index, {\n                  type: value as SchemaProperty[\"type\"],\n                  items: value === \"array\" ? { type: \"string\" } : undefined,\n                  properties: value === \"object\" ? [] : undefined,\n                  additionalObjectProperties: value === \"object\" ? false : undefined,\n                })\n              }\n            >\n              <SelectTrigger className=\"w-[180px]\">\n                <SelectValue placeholder=\"Type\" />\n              </SelectTrigger>\n              <SelectContent>\n                <SelectItem value=\"string\">String</SelectItem>\n                <SelectItem value=\"number\">Number</SelectItem>\n                <SelectItem value=\"boolean\">Boolean</SelectItem>\n                <SelectItem value=\"object\">Object</SelectItem>\n                <SelectItem value=\"array\">Array</SelectItem>\n              </SelectContent>\n            </Select>\n          </div>\n          <Input\n            placeholder=\"Description (optional)\"\n            value={property.description || \"\"}\n            onChange={(e) => onPropertyUpdate(index, { description: e.target.value })}\n          />\n          {property.type === \"object\" && (\n            <ObjectTypeEditor\n              property={property}\n              index={index}\n              isStrictMode={isStrictMode}\n              enumInputValue={enumInputValue}\n              onPropertyUpdate={onPropertyUpdate}\n              onEnumInputChange={onEnumInputChange}\n              onAddEnumValue={onAddEnumValue}\n              onRemoveEnumValue={onRemoveEnumValue}\n              nestingLevel={nestingLevel}\n            />\n          )}\n          {property.type === \"array\" && (\n            <ArrayTypeEditor\n              property={property}\n              index={index}\n              onPropertyUpdate={onPropertyUpdate}\n            />\n          )}\n          {(property.type === \"string\" || property.type === \"number\") && (\n            <EnumEditor\n              property={property}\n              index={index}\n              enumInputValue={enumInputValue}\n              onPropertyUpdate={onPropertyUpdate}\n              onEnumInputChange={onEnumInputChange}\n              onAddEnumValue={onAddEnumValue}\n              onRemoveEnumValue={onRemoveEnumValue}\n            />\n          )}\n        </div>\n        <div className=\"flex items-center gap-4\">\n          <div className=\"flex items-center gap-2\">\n            <Switch\n              checked={property.required}\n              onCheckedChange={(checked) =>\n                onPropertyUpdate(index, { required: checked })\n              }\n              disabled={isStrictMode}\n            />\n            <span className=\"text-sm\">Required</span>\n          </div>\n          <Button\n            variant=\"ghost\"\n            size=\"icon\"\n            onClick={() => onRemoveProperty(index)}\n            className=\"text-destructive hover:text-destructive/90\"\n          >\n            <Trash2 className=\"w-4 h-4\" />\n          </Button>\n        </div>\n      </div>\n    </Card>\n  );\n}\n","\nimport { Button } from \"../ui/button\";\nimport { Input } from \"../ui/input\";\nimport { Switch } from \"../ui/switch\";\nimport { Plus, X } from \"lucide-react\";\nimport { SchemaProperty } from \"@/types/schema\";\n\ninterface EnumEditorProps {\n  property: SchemaProperty;\n  index: number;\n  enumInputValue: string;\n  onPropertyUpdate: (index: number, updates: Partial<SchemaProperty>) => void;\n  onEnumInputChange: (index: number, value: string) => void;\n  onAddEnumValue: (index: number) => void;\n  onRemoveEnumValue: (propertyIndex: number, enumIndex: number) => void;\n}\n\nexport function EnumEditor({\n  property,\n  index,\n  enumInputValue,\n  onPropertyUpdate,\n  onEnumInputChange,\n  onAddEnumValue,\n  onRemoveEnumValue,\n}: EnumEditorProps) {\n  return (\n    <div className=\"space-y-4\">\n      <div className=\"flex items-center gap-2\">\n        <Switch\n          checked={property.hasEnum}\n          onCheckedChange={(checked) =>\n            onPropertyUpdate(index, {\n              hasEnum: checked,\n              enum: checked ? [] : undefined,\n            })\n          }\n        />\n        <span className=\"text-sm\">Enum</span>\n      </div>\n      {property.hasEnum && (\n        <div className=\"space-y-2\">\n          <div className=\"flex gap-2\">\n            <Input\n              placeholder={`Enter enum value${property.type === \"number\" ? \" (number only)\" : \"\"}`}\n              value={enumInputValue}\n              onChange={(e) => onEnumInputChange(index, e.target.value)}\n              onKeyDown={(e) => {\n                if (e.key === \"Enter\") {\n                  e.preventDefault();\n                  onAddEnumValue(index);\n                }\n              }}\n              type={property.type === \"number\" ? \"number\" : \"text\"}\n            />\n            <Button\n              onClick={() => onAddEnumValue(index)}\n              size=\"sm\"\n              className=\"flex-shrink-0\"\n            >\n              <Plus className=\"w-4 h-4\" />\n            </Button>\n          </div>\n          <div className=\"flex flex-wrap gap-2\">\n            {property.enum?.map((enumValue, enumIndex) => (\n              <div\n                key={enumIndex}\n                className=\"flex items-center gap-1 bg-secondary px-2 py-1 rounded-md text-sm\"\n              >\n                {enumValue}\n                <Button\n                  variant=\"ghost\"\n                  size=\"icon\"\n                  className=\"h-4 w-4 p-0\"\n                  onClick={() => onRemoveEnumValue(index, enumIndex)}\n                >\n                  <X className=\"h-3 w-3\" />\n                </Button>\n              </div>\n            ))}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n","\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../ui/select\";\nimport { SchemaProperty } from \"@/types/schema\";\n\ninterface ArrayTypeEditorProps {\n  property: SchemaProperty;\n  index: number;\n  onPropertyUpdate: (index: number, updates: Partial<SchemaProperty>) => void;\n}\n\nexport function ArrayTypeEditor({\n  property,\n  index,\n  onPropertyUpdate,\n}: ArrayTypeEditorProps) {\n  return (\n    <div className=\"flex gap-4 items-center\">\n      <span className=\"text-sm text-muted-foreground\">Array items type:</span>\n      <Select\n        value={property.items?.type || \"string\"}\n        onValueChange={(value) =>\n          onPropertyUpdate(index, {\n            items: { type: value as Exclude<SchemaProperty[\"type\"], \"array\"> }\n          })\n        }\n      >\n        <SelectTrigger className=\"w-[180px]\">\n          <SelectValue placeholder=\"Items type\" />\n        </SelectTrigger>\n        <SelectContent>\n          <SelectItem value=\"string\">String</SelectItem>\n          <SelectItem value=\"number\">Number</SelectItem>\n          <SelectItem value=\"boolean\">Boolean</SelectItem>\n          <SelectItem value=\"object\">Object</SelectItem>\n        </SelectContent>\n      </Select>\n    </div>\n  );\n}\n","\nimport { Button } from \"../ui/button\";\nimport { Switch } from \"../ui/switch\";\nimport { Plus } from \"lucide-react\";\nimport { SchemaProperty } from \"@/types/schema\";\nimport { PropertyEditor } from \"./PropertyEditor\";\nimport { DndContext, DragEndEvent, MouseSensor, TouchSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, arrayMove, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\n\ninterface ObjectTypeEditorProps {\n  property: SchemaProperty;\n  index: number;\n  isStrictMode: boolean;\n  enumInputValue: string;\n  onPropertyUpdate: (index: number, updates: Partial<SchemaProperty>) => void;\n  onEnumInputChange: (index: number, value: string) => void;\n  onAddEnumValue: (index: number) => void;\n  onRemoveEnumValue: (propertyIndex: number, enumIndex: number) => void;\n  nestingLevel: number;\n}\n\nexport function ObjectTypeEditor({\n  property,\n  index,\n  isStrictMode,\n  enumInputValue,\n  onPropertyUpdate,\n  onEnumInputChange,\n  onAddEnumValue,\n  onRemoveEnumValue,\n  nestingLevel,\n}: ObjectTypeEditorProps) {\n  const sensors = useSensors(\n    useSensor(MouseSensor, {\n      activationConstraint: {\n        distance: 5,\n      },\n    }),\n    useSensor(TouchSensor, {\n      activationConstraint: {\n        delay: 250,\n        tolerance: 5,\n      },\n    })\n  );\n\n  const handleAddNestedProperty = () => {\n    const newProperties = [...(property.properties || []), {\n      name: \"\",\n      type: \"string\" as const,\n      required: isStrictMode,\n      hasEnum: false,\n    }];\n    onPropertyUpdate(index, { properties: newProperties });\n  };\n\n  const handleUpdateNestedProperty = (propertyIndex: number, updates: Partial<SchemaProperty>) => {\n    const newProperties = [...(property.properties || [])];\n    newProperties[propertyIndex] = { ...newProperties[propertyIndex], ...updates };\n    onPropertyUpdate(index, { properties: newProperties });\n  };\n\n  const handleRemoveNestedProperty = (propertyIndex: number) => {\n    const newProperties = property.properties?.filter((_, i) => i !== propertyIndex);\n    onPropertyUpdate(index, { properties: newProperties });\n  };\n\n  const handleDragEnd = (event: DragEndEvent) => {\n    const { active, over } = event;\n    \n    if (over && active.id !== over.id) {\n      const oldIndex = parseInt(active.id.toString().split('-')[1]);\n      const newIndex = parseInt(over.id.toString().split('-')[1]);\n      \n      const newProperties = arrayMove(property.properties || [], oldIndex, newIndex);\n      onPropertyUpdate(index, { properties: newProperties });\n    }\n  };\n\n  return (\n    <div className=\"space-y-4\">\n      <div className=\"flex items-center gap-2\">\n        <Switch\n          checked={property.additionalObjectProperties ?? false}\n          onCheckedChange={(checked) =>\n            onPropertyUpdate(index, { additionalObjectProperties: checked })\n          }\n        />\n        <span className=\"text-sm\">Allow Additional Properties</span>\n      </div>\n      <div className=\"space-y-2\">\n        <Button\n          onClick={handleAddNestedProperty}\n          size=\"sm\"\n          className=\"w-full\"\n        >\n          <Plus className=\"w-4 h-4 mr-2\" />\n          Add Object Property\n        </Button>\n        <DndContext sensors={sensors} onDragEnd={handleDragEnd}>\n          <SortableContext \n            items={(property.properties || []).map((_, i) => `property-${i}`)} \n            strategy={verticalListSortingStrategy}\n          >\n            {property.properties?.map((prop, propIndex) => (\n              <PropertyEditor\n                key={propIndex}\n                property={prop}\n                index={propIndex}\n                isStrictMode={isStrictMode}\n                enumInputValue={enumInputValue}\n                onPropertyUpdate={handleUpdateNestedProperty}\n                onRemoveProperty={handleRemoveNestedProperty}\n                onEnumInputChange={onEnumInputChange}\n                onAddEnumValue={onAddEnumValue}\n                onRemoveEnumValue={onRemoveEnumValue}\n                nestingLevel={nestingLevel + 1}\n              />\n            ))}\n          </SortableContext>\n        </DndContext>\n      </div>\n    </div>\n  );\n}\n","\nimport { Button } from \"../ui/button\";\nimport { Switch } from \"../ui/switch\";\nimport { Copy, Plus } from \"lucide-react\";\n\ninterface SchemaHeaderProps {\n  isStrictMode: boolean;\n  onStrictModeChange: (checked: boolean) => void;\n  onAddProperty: () => void;\n  onCopySchema: () => void;\n}\n\nexport const SchemaHeader = ({\n  isStrictMode,\n  onStrictModeChange,\n  onAddProperty,\n  onCopySchema,\n}: SchemaHeaderProps) => {\n  return (\n    <div className=\"flex justify-between items-center mb-6\">\n      <div className=\"flex items-center gap-4\">\n        <h2 className=\"text-2xl font-semibold\">Schema Builder</h2>\n        <div className=\"flex items-center gap-2\">\n          <Switch\n            checked={isStrictMode}\n            onCheckedChange={onStrictModeChange}\n          />\n          <span className=\"text-sm\">Strict Mode</span>\n        </div>\n        <Button\n          variant=\"outline\"\n          size=\"sm\"\n          onClick={onCopySchema}\n          className=\"flex items-center gap-2\"\n        >\n          <Copy className=\"w-4 h-4\" />\n\n        </Button>\n      </div>\n      <Button onClick={onAddProperty} size=\"sm\" className=\"flex items-center gap-2\">\n        <Plus className=\"w-4 h-4\" />\n        Add Property\n      </Button>\n    </div>\n  );\n};\n","import { Card } from \"../ui/card\";\nimport { ScrollArea } from \"../ui/scroll-area\";\nimport { Button } from \"../ui/button\";\nimport { ChevronRight, Copy, AlertTriangle } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\ninterface SchemaOutputProps {\n  schemaJson: string;\n  onCopySchema: () => void;\n  hasErrors?: boolean;\n}\n\nexport const SchemaOutput = ({ schemaJson, onCopySchema, hasErrors }: SchemaOutputProps) => {\n  return (\n    <Card className={cn(\"flex-1 min-w-[600px] p-6 backdrop-blur-sm bg-opacity-50\", hasErrors && \"opacity-50\")}>\n      <div className=\"flex items-center justify-between mb-6\">\n        <div className=\"flex items-center gap-2\">\n          <ChevronRight className=\"w-4 h-4\" />\n          <h2 className=\"text-2xl font-semibold\">Output</h2>\n          {hasErrors && (\n            <div className=\"flex items-center gap-1 text-sm text-destructive\">\n              <AlertTriangle className=\"w-4 h-4\" />\n              <span>Fix validation errors to enable output</span>\n            </div>\n          )}\n        </div>\n        <Button\n          variant=\"outline\"\n          size=\"sm\"\n          onClick={onCopySchema}\n          disabled={hasErrors}\n          className=\"flex items-center gap-2\"\n        >\n          <Copy className=\"w-4 h-4\" />\n          Copy Schema\n        </Button>\n      </div>\n      <ScrollArea className=\"\">\n        <pre className={cn(\"text-sm bg-muted/50 p-4 rounded-lg overflow-auto\", hasErrors && \"blur-[2px]\")}>\n          {schemaJson}\n        </pre>\n      </ScrollArea>\n    </Card>\n  );\n};\n","import { SchemaDefinition, SchemaProperty } from \"@/types/schema\";\n\ntype PropertySchema = {\n  type: string;\n  description?: string;\n  enum?: (string | number)[];\n  items?: { type: string };\n  properties?: Record<string, PropertySchema>;\n  required?: string[];\n  additionalProperties?: boolean;\n};\n\nfunction generatePropertySchema(prop: SchemaProperty): PropertySchema {\n  const schema: PropertySchema = {\n    type: prop.type,\n  };\n\n  if (prop.description) {\n    schema.description = prop.description;\n  }\n\n  if (prop.hasEnum && prop.enum && prop.enum.length > 0) {\n    schema.enum = prop.type === \"number\" ? prop.enum.map(v => Number(v)) : prop.enum;\n  }\n\n  if (prop.type === \"array\" && prop.items) {\n    schema.items = {\n      type: prop.items.type\n    };\n  }\n\n  if (prop.type === \"object\" && prop.properties) {\n    schema.properties = prop.properties.reduce(\n      (acc, nestedProp) => ({\n        ...acc,\n        [nestedProp.name]: generatePropertySchema(nestedProp)\n      }),\n      {}\n    );\n    schema.required = prop.properties.filter(p => p.required).map(p => p.name);\n    schema.additionalProperties = prop.additionalObjectProperties ?? false;\n  }\n\n  return schema;\n}\n\nexport function generateSchemaJSON(schema: SchemaDefinition, isStrictMode: boolean): string {\n  const schemaContent = {\n    type: \"object\",\n    properties: schema.properties.reduce(\n      (acc, prop) => ({\n        ...acc,\n        [prop.name]: generatePropertySchema(prop)\n      }),\n      {}\n    ),\n    required: schema.properties.filter((p) => p.required).map((p) => p.name),\n    additionalProperties: schema.additionalProperties,\n  };\n\n  const openAISchema = {\n    name: \"schema_definition\",\n    strict: isStrictMode,\n    schema: schemaContent,\n  };\n\n  return JSON.stringify(openAISchema, null, 2);\n}\n\nexport type ValidationError = {\n  path: string;\n  message: string;\n};\n\nexport function validateSchema(schema: SchemaDefinition): ValidationError[] {\n  const errors: ValidationError[] = [];\n  const propertyNames = new Set<string>();\n\n  const validateProperty = (prop: SchemaProperty, path: string) => {\n    // Check empty name\n    if (!prop.name.trim()) {\n      errors.push({\n        path,\n        message: \"Property name cannot be empty\"\n      });\n    }\n\n    // Check duplicate names\n    if (propertyNames.has(prop.name)) {\n      errors.push({\n        path,\n        message: `Duplicate property name: ${prop.name}`\n      });\n    }\n    propertyNames.add(prop.name);\n\n    // Check empty enums\n    if (prop.hasEnum && (!prop.enum || prop.enum.length === 0)) {\n      errors.push({\n        path,\n        message: \"Enum is enabled but no values are defined\"\n      });\n    }\n\n    // Validate nested object properties\n    if (prop.type === \"object\" && prop.properties) {\n      prop.properties.forEach((nestedProp, index) => {\n        validateProperty(nestedProp, `${path}.${prop.name}[${index}]`);\n      });\n    }\n  };\n\n  schema.properties.forEach((prop, index) => {\n    validateProperty(prop, `root[${index}]`);\n  });\n\n  return errors;\n}\n","import { useSchemaState } from \"@/hooks/useSchemaState\";\nimport { Card } from \"./ui/card\";\nimport { ScrollArea } from \"./ui/scroll-area\";\nimport { PropertyEditor } from \"./schema/PropertyEditor\";\nimport { SchemaHeader } from \"./schema/SchemaHeader\";\nimport { SchemaOutput } from \"./schema/SchemaOutput\";\nimport { generateSchemaJSON, validateSchema, ValidationError } from \"@/utils/schemaUtils\";\nimport { DndContext, DragEndEvent, MouseSensor, TouchSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { SortableContext, verticalListSortingStrategy } from \"@dnd-kit/sortable\";\nimport { SchemaDefinition } from \"@/types/schema\";\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\ninterface SchemaBuilderProps {\n  initialSchema?: SchemaDefinition;\n  initialStrictMode?: boolean;\n  className?: string;\n  cardClassName?: string;\n  maxHeight?: string;\n  showOutput?: boolean;\n  onSchemaChange?: (schema: string) => void;\n  onStrictModeChange?: (isStrict: boolean) => void;\n}\n\nexport const SchemaBuilder = ({\n  initialSchema,\n  initialStrictMode = true,\n  className = \"flex min-h-screen bg-background p-6 gap-6 animate-fade-in\",\n  cardClassName = \"flex-1 p-6 backdrop-blur-sm bg-opacity-50 min-w-[600px]\",\n  maxHeight,\n  showOutput = true,\n  onSchemaChange,\n  onStrictModeChange\n}: SchemaBuilderProps = {}) => {\n  const {\n    schema,\n    isStrictMode,\n    enumInputValues,\n    setEnumInputValues,\n    addProperty,\n    removeProperty,\n    updateProperty,\n    handlePropertyReorder,\n    handleStrictModeChange,\n  } = useSchemaState(initialSchema, initialStrictMode);\n\n  const [validationErrors, setValidationErrors] = React.useState<ValidationError[]>([]);\n\n  const sensors = useSensors(\n    useSensor(MouseSensor, {\n      activationConstraint: {\n        distance: 3,\n      },\n    }),\n    useSensor(TouchSensor, {\n      activationConstraint: {\n        delay: 100,\n        tolerance: 3,\n      },\n    })\n  );\n\n  const handleDragEnd = (event: DragEndEvent) => {\n    const { active, over } = event;\n    if (over && active.id !== over.id) {\n      const oldIndex = schema.properties.findIndex((p, i) => `property-${i}` === active.id);\n      const newIndex = schema.properties.findIndex((p, i) => `property-${i}` === over.id);\n      handlePropertyReorder(oldIndex, newIndex);\n    }\n  };\n\n  const handleCopySchema = () => {\n    const schemaString = generateSchemaJSON(schema, isStrictMode);\n    navigator.clipboard.writeText(schemaString);\n  };\n\n  // Call onSchemaChange when schema updates\n  React.useEffect(() => {\n    onSchemaChange?.(generateSchemaJSON(schema, isStrictMode));\n  }, [schema, isStrictMode, onSchemaChange]);\n\n  // Call onStrictModeChange when strict mode changes\n  React.useEffect(() => {\n    onStrictModeChange?.(isStrictMode);\n  }, [isStrictMode, onStrictModeChange]);\n\n  React.useEffect(() => {\n    setValidationErrors(validateSchema(schema));\n  }, [schema]);\n\n  return (\n    <div className={cn(className, !showOutput && \"justify-center\")}>\n      <Card className={cn(cardClassName, !showOutput && \"max-w-[800px]\")}>\n        <SchemaHeader\n          isStrictMode={isStrictMode}\n          onStrictModeChange={handleStrictModeChange}\n          onAddProperty={addProperty}\n          onCopySchema={handleCopySchema}\n        />\n        <ScrollArea className={maxHeight ? maxHeight : \"h-[calc(100vh-200px)]\"}>\n          <DndContext sensors={sensors} onDragEnd={handleDragEnd}>\n            <SortableContext items={schema.properties.map((_, i) => `property-${i}`)} strategy={verticalListSortingStrategy}>\n              <div className=\"space-y-4\">\n                {schema.properties.map((property, index) => (\n                  <PropertyEditor\n                    key={index}\n                    property={property}\n                    index={index}\n                    isStrictMode={isStrictMode}\n                    enumInputValue={enumInputValues[index] || \"\"}\n                    validationErrors={validationErrors}\n                    onPropertyUpdate={updateProperty}\n                    onRemoveProperty={removeProperty}\n                    onEnumInputChange={(index, value) =>\n                      setEnumInputValues((prev) => ({\n                        ...prev,\n                        [index]: value,\n                      }))\n                    }\n                    onAddEnumValue={(index) => {\n                      const value = enumInputValues[index]?.trim();\n                      if (!value) return;\n\n                      const property = schema.properties[index];\n                      const processedValue = property.type === \"number\" ? Number(value) : value;\n\n                      if (property.type === \"number\" && isNaN(Number(processedValue))) {\n                        return;\n                      }\n\n                      updateProperty(index, {\n                        enum: [...(property.enum || []), processedValue],\n                      });\n                      setEnumInputValues((prev) => ({ ...prev, [index]: \"\" }));\n                    }}\n                    onRemoveEnumValue={(propertyIndex, enumIndex) => {\n                      const property = schema.properties[propertyIndex];\n                      if (!property.enum) return;\n                      updateProperty(propertyIndex, {\n                        enum: property.enum.filter((_, i) => i !== enumIndex),\n                      });\n                    }}\n                  />\n                ))}\n              </div>\n            </SortableContext>\n          </DndContext>\n        </ScrollArea>\n      </Card>\n\n      {showOutput && (\n        <SchemaOutput\n          schemaJson={generateSchemaJSON(schema, isStrictMode)}\n          onCopySchema={handleCopySchema}\n          hasErrors={validationErrors.length > 0}\n        />\n      )}\n    </div>\n  );\n};\n\nexport default SchemaBuilder;\n","/**\n * Returns an array of paths to include in your Tailwind content configuration\n * to ensure all styles from json-schema-canvas are properly processed.\n * \n * Usage in your tailwind.config.js/ts:\n * ```\n * import { tailwindContent } from 'json-schema-canvas';\n * \n * export default {\n *   content: [\n *     './src/**//*.{js,ts,jsx,tsx}',\n *     ...tailwindContent()\n *   ],\n *   // rest of your config\n * }\n * ```\n */\nexport function tailwindContent() {\n  return [\n    \"./node_modules/json-schema-canvas/dist/**/*.{js,cjs}\",\n  ];\n}"],"mappings":"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","names":["index_exports","__export","SchemaBuilder","tailwindContent","useSchemaState","__toCommonJS","styleInject","css","insertAt","head","style","styleInject","import_react","import_sortable","defaultSchema","useSchemaState","initialSchema","initialStrictMode","schema","setSchema","isStrictMode","setIsStrictMode","enumInputValues","setEnumInputValues","prev","index","_","i","updates","prop","oldIndex","newIndex","checked","React","import_clsx","import_tailwind_merge","cn","inputs","import_jsx_runtime","Card","className","props","ref","cn","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","React","ScrollAreaPrimitive","import_jsx_runtime","ScrollArea","className","children","props","ref","cn","ScrollBar","orientation","React","import_jsx_runtime","Input","className","type","props","ref","cn","React","SelectPrimitive","import_lucide_react","import_jsx_runtime","Select","SelectValue","SelectTrigger","className","children","props","ref","cn","SelectScrollUpButton","SelectScrollDownButton","SelectContent","position","SelectLabel","SelectItem","SelectSeparator","React","SwitchPrimitives","import_jsx_runtime","Switch","className","props","ref","cn","React","import_react_slot","import_class_variance_authority","import_jsx_runtime","buttonVariants","Button","className","variant","size","asChild","props","ref","cn","import_lucide_react","import_sortable","import_utilities","import_lucide_react","import_jsx_runtime","EnumEditor","property","index","enumInputValue","onPropertyUpdate","onEnumInputChange","onAddEnumValue","onRemoveEnumValue","Switch","checked","Input","e","Button","enumValue","enumIndex","import_jsx_runtime","ArrayTypeEditor","property","index","onPropertyUpdate","Select","value","SelectTrigger","SelectValue","SelectContent","SelectItem","import_lucide_react","import_core","import_sortable","import_jsx_runtime","ObjectTypeEditor","property","index","isStrictMode","enumInputValue","onPropertyUpdate","onEnumInputChange","onAddEnumValue","onRemoveEnumValue","nestingLevel","sensors","handleAddNestedProperty","newProperties","handleUpdateNestedProperty","propertyIndex","updates","handleRemoveNestedProperty","_","i","handleDragEnd","event","active","over","oldIndex","newIndex","Switch","checked","Button","prop","propIndex","PropertyEditor","import_jsx_runtime","PropertyEditor","property","index","isStrictMode","enumInputValue","validationErrors","onPropertyUpdate","onRemoveProperty","onEnumInputChange","onAddEnumValue","onRemoveEnumValue","nestingLevel","attributes","listeners","setNodeRef","transform","transition","isDragging","style","propertyErrors","error","Card","cn","i","Input","e","Select","value","SelectTrigger","SelectValue","SelectContent","SelectItem","ObjectTypeEditor","ArrayTypeEditor","EnumEditor","Switch","checked","Button","import_lucide_react","import_jsx_runtime","SchemaHeader","isStrictMode","onStrictModeChange","onAddProperty","onCopySchema","Switch","Button","import_lucide_react","import_jsx_runtime","SchemaOutput","schemaJson","onCopySchema","hasErrors","Card","cn","Button","ScrollArea","generatePropertySchema","prop","schema","v","acc","nestedProp","p","generateSchemaJSON","isStrictMode","schemaContent","validateSchema","errors","propertyNames","validateProperty","path","index","import_core","import_sortable","import_react","import_jsx_runtime","SchemaBuilder","initialSchema","initialStrictMode","className","cardClassName","maxHeight","showOutput","onSchemaChange","onStrictModeChange","schema","isStrictMode","enumInputValues","setEnumInputValues","addProperty","removeProperty","updateProperty","handlePropertyReorder","handleStrictModeChange","useSchemaState","validationErrors","setValidationErrors","React","sensors","handleDragEnd","event","active","over","oldIndex","p","i","newIndex","handleCopySchema","schemaString","generateSchemaJSON","validateSchema","cn","Card","SchemaHeader","ScrollArea","_","property","index","PropertyEditor","value","prev","processedValue","propertyIndex","enumIndex","SchemaOutput","tailwindContent"]}