json-schema-builder-react 0.0.4 → 0.0.5
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/README.md +33 -0
- package/dist-lib/components/JsonSchemaBuilder.d.ts +6 -1
- package/dist-lib/components/PropertyDocument.d.ts +2 -1
- package/dist-lib/components/PropertyEditDialog.d.ts +2 -1
- package/dist-lib/components/ui/button.d.ts +1 -1
- package/dist-lib/components/ui/dialog.d.ts +1 -1
- package/dist-lib/hooks/useChildManager.d.ts +60 -0
- package/dist-lib/hooks/useDialogManager.d.ts +75 -0
- package/dist-lib/hooks/useInlineEditor.d.ts +71 -0
- package/dist-lib/hooks/usePropertyEditor.d.ts +1 -1
- package/dist-lib/hooks/useTypeSelector.d.ts +49 -0
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/index.cjs.map +1 -1
- package/dist-lib/index.js +1182 -1045
- package/dist-lib/index.js.map +1 -1
- package/package.json +8 -7
package/dist-lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/class-variance-authority/dist/index.mjs","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts","../src/components/ui/button.tsx","../src/components/ui/input.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/dialog.tsx","../src/components/ui/label.tsx","../src/components/ui/select.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/textarea.tsx","../src/lib/string-utils.ts","../src/hooks/usePropertyEditor.ts","../src/contexts/TypeLabelsContext.tsx","../src/components/PropertyEditDialog.tsx","../src/lib/id-generator.ts","../src/components/PropertyDocument.tsx","../src/components/ui/card.tsx","../src/lib/file-utils.ts","../src/components/JsonOutput.tsx","../src/components/SchemaMetadata.tsx","../src/lib/schema-generator.ts","../src/lib/schema-parser.ts","../src/hooks/useSchemaBuilder.ts","../src/components/ThemeToggle.tsx","../src/components/JsonSchemaBuilder.tsx"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n prefix\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\n });\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n if (!prefix) {\n return classGroupEntries;\n }\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map(classDefinition => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition;\n }\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n }\n return classDefinition;\n });\n return [classGroupId, prefixedClassGroup];\n });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n const {\n separator,\n experimentalParseClassName\n } = config;\n const isSeparatorSingleCharacter = separator.length === 1;\n const firstSeparatorCharacter = separator[0];\n const separatorLength = separator.length;\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0) {\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + separatorLength;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (experimentalParseClassName) {\n return className => experimentalParseClassName({\n className,\n parseClassName\n });\n }\n return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isArbitraryVariant = modifier[0] === '[';\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n const colors = fromTheme('colors');\n const spacing = fromTheme('spacing');\n const blur = fromTheme('blur');\n const brightness = fromTheme('brightness');\n const borderColor = fromTheme('borderColor');\n const borderRadius = fromTheme('borderRadius');\n const borderSpacing = fromTheme('borderSpacing');\n const borderWidth = fromTheme('borderWidth');\n const contrast = fromTheme('contrast');\n const grayscale = fromTheme('grayscale');\n const hueRotate = fromTheme('hueRotate');\n const invert = fromTheme('invert');\n const gap = fromTheme('gap');\n const gradientColorStops = fromTheme('gradientColorStops');\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n const inset = fromTheme('inset');\n const margin = fromTheme('margin');\n const opacity = fromTheme('opacity');\n const padding = fromTheme('padding');\n const saturate = fromTheme('saturate');\n const scale = fromTheme('scale');\n const sepia = fromTheme('sepia');\n const skew = fromTheme('skew');\n const space = fromTheme('space');\n const translate = fromTheme('translate');\n const getOverscroll = () => ['auto', 'contain', 'none'];\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary()\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', 'video', isArbitraryValue]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isTshirtSize]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': getBreaks()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': getBreaks()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [...getPositions(), isArbitraryValue]\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: getOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': getOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': getOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: getOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': getOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': getOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: [inset]\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': [inset]\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': [inset]\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: [inset]\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: [inset]\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: [inset]\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: [inset]\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: [inset]\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: [inset]\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: ['auto', isInteger, isArbitraryValue]\n }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: getSpacingWithAutoAndArbitrary()\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['wrap', 'wrap-reverse', 'nowrap']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: getZeroAndEmpty()\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: getZeroAndEmpty()\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': [isAny]\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: ['auto', {\n span: ['full', isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': [isAny]\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: ['auto', {\n span: [isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: [gap]\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': [gap]\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': [gap]\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: ['normal', ...getAlign()]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': ['start', 'end', 'center', 'stretch']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...getAlign(), 'baseline']\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': [...getAlign(), 'baseline']\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: [padding]\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: [padding]\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: [padding]\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: [padding]\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: [padding]\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: [padding]\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: [padding]\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: [padding]\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: [padding]\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: [margin]\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: [margin]\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: [margin]\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: [margin]\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: [margin]\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: [margin]\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: [margin]\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: [margin]\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: [margin]\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{\n 'space-x': [space]\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{\n 'space-y': [space]\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n screen: [isTshirtSize]\n }, isTshirtSize]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', isTshirtSize, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isAny]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryValue]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['none', 'disc', 'decimal', isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: [colors]\n }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{\n 'placeholder-opacity': [opacity]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: [colors]\n }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{\n 'text-opacity': [opacity]\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...getLineStyles(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': ['auto', isLength, isArbitraryValue]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: [colors]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: getSpacingWithArbitrary()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryValue]\n }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{\n 'bg-opacity': [opacity]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [...getPositions(), isArbitraryPosition]\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'round', 'space']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: [colors]\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: [gradientColorStops]\n }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: [borderRadius]\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': [borderRadius]\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': [borderRadius]\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': [borderRadius]\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': [borderRadius]\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': [borderRadius]\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': [borderRadius]\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': [borderRadius]\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': [borderRadius]\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': [borderRadius]\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': [borderRadius]\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': [borderRadius]\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': [borderRadius]\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': [borderRadius]\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': [borderRadius]\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: [borderWidth]\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': [borderWidth]\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': [borderWidth]\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': [borderWidth]\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': [borderWidth]\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': [borderWidth]\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': [borderWidth]\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': [borderWidth]\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': [borderWidth]\n }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{\n 'border-opacity': [opacity]\n }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...getLineStyles(), 'hidden']\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{\n 'divide-x': [borderWidth]\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{\n 'divide-y': [borderWidth]\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{\n 'divide-opacity': [opacity]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{\n divide: getLineStyles()\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: [borderColor]\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': [borderColor]\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': [borderColor]\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': [borderColor]\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': [borderColor]\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': [borderColor]\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': [borderColor]\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': [borderColor]\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': [borderColor]\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: [borderColor]\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: ['', ...getLineStyles()]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isLength, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: [isLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [colors]\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{\n ring: getLengthWithEmptyAndArbitrary()\n }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{\n ring: [colors]\n }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{\n 'ring-opacity': [opacity]\n }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{\n 'ring-offset': [isLength, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{\n 'ring-offset': [colors]\n }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{\n shadow: [isAny]\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [opacity]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': getBlendModes()\n }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: ['', 'none']\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: [blur]\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [brightness]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [contrast]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [grayscale]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [hueRotate]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [invert]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [saturate]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [sepia]\n }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': ['', 'none']\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': [blur]\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [brightness]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [contrast]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': [grayscale]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [hueRotate]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': [invert]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [opacity]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [saturate]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': [sepia]\n }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': [borderSpacing]\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': [borderSpacing]\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': [borderSpacing]\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: getNumberAndArbitrary()\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: getNumberAndArbitrary()\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: ['', 'gpu', 'none']\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: [scale]\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': [scale]\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': [scale]\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: [isInteger, isArbitraryValue]\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': [translate]\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': [translate]\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': [skew]\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': [skew]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n }],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: ['auto', colors]\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: [colors]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['none', 'auto']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', 'y', 'x', '']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n }],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [colors, 'none']\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [colors, 'none']\n }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n }\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'separator', separator);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n for (const configKey in override) {\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\n }\n for (const key in extend) {\n mergeConfigProperties(baseConfig[key], extend[key]);\n }\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n }\n }\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } 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 { 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 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\" +\n \" hover-elevate active-elevate-2\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground border border-primary-border\",\n destructive:\n \"bg-destructive text-destructive-foreground border border-destructive-border\",\n outline:\n // Shows the background color of whatever card / sidebar / accent background it is inside of.\n // Inherits the current text color.\n \" border [border-color:var(--button-outline)] shadow-xs active:shadow-none \",\n secondary:\n \"border bg-secondary text-secondary-foreground border border-secondary-border \",\n // Add a transparent border so that when someone toggles a border on later, it doesn't shift layout/size.\n ghost: \"border border-transparent\",\n },\n // Heights are set as \"min\" heights, because sometimes Ai will place large amount of content\n // inside buttons. With a min-height they will look appropriate with small amounts of content,\n // but will expand to fit large amounts of content.\n size: {\n default: \"min-h-9 px-4 py-2\",\n sm: \"min-h-8 rounded-md px-3 text-xs\",\n lg: \"min-h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\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 * 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 // h-9 to match icon buttons and default buttons.\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 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 TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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 origin-[--radix-tooltip-content-transform-origin]\",\n className,\n )}\n {...props}\n />\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n);\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\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-9 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background data-[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-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-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 origin-[--radix-select-content-transform-origin]\",\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 CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base 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 md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","// String utility functions\n\n/**\n * Convert a string to snake_case format\n * Removes special characters and replaces spaces with underscores\n *\n * @example\n * toSnakeCase(\"User Name\") // \"user_name\"\n * toSnakeCase(\"First Name!\") // \"first_name\"\n */\nexport const toSnakeCase = (str: string): string => {\n return str\n .trim()\n .toLowerCase()\n .replace(/[^\\w\\s]/g, \"\") // Remove special characters\n .replace(/\\s+/g, \"_\"); // Replace spaces with underscores\n};\n","// Custom hook for managing property editing state\nimport type { PropertyData } from \"@/types/schema\";\nimport { toSnakeCase } from \"@/lib/string-utils\";\n\nexport interface UsePropertyEditorReturn {\n handleTitleChange: (title: string) => void;\n handleTitleBlur: () => void;\n handleKeyChange: (key: string) => void;\n handleFieldChange: (field: keyof PropertyData, value: any) => void;\n handleConstraintChange: (field: string, value: any) => void;\n}\n\nexport const usePropertyEditor = (\n property: PropertyData,\n onUpdate: (property: PropertyData) => void,\n isNewProperty: boolean = false,\n): UsePropertyEditorReturn => {\n const handleFieldChange = (field: keyof PropertyData, value: any) => {\n onUpdate({ ...property, [field]: value });\n };\n\n const handleTitleChange = (title: string) => {\n handleFieldChange(\"title\", title);\n };\n\n const handleTitleBlur = () => {\n // Auto-generate key from title on blur only for new properties\n // or if key hasn't been manually edited\n if (isNewProperty && property.title) {\n const autoKey = toSnakeCase(property.title);\n handleFieldChange(\"key\", autoKey);\n }\n };\n\n const handleKeyChange = (key: string) => {\n // Only allow key changes for new properties\n if (isNewProperty) {\n handleFieldChange(\"key\", key);\n }\n };\n\n const handleConstraintChange = (field: string, value: any) => {\n onUpdate({\n ...property,\n [field]: value,\n });\n };\n\n return {\n handleTitleChange,\n handleTitleBlur,\n handleKeyChange,\n handleFieldChange,\n handleConstraintChange,\n };\n};\n","import { createContext, useContext } from \"react\";\nimport type { PropertyType } from \"@/types/schema\";\n\nexport type TypeLabels = Partial<Record<PropertyType, string>>;\n\nconst defaultTypeLabels: Record<PropertyType, string> = {\n string: \"String\",\n number: \"Number\",\n integer: \"Integer\",\n boolean: \"Boolean\",\n object: \"Object\",\n array: \"Array\",\n null: \"Null\",\n file: \"File\",\n};\n\ninterface TypeLabelsContextValue {\n getTypeLabel: (type: PropertyType) => string;\n typeLabels: Record<PropertyType, string>;\n}\n\nconst TypeLabelsContext = createContext<TypeLabelsContextValue>({\n getTypeLabel: (type) => defaultTypeLabels[type],\n typeLabels: defaultTypeLabels,\n});\n\nexport function TypeLabelsProvider({\n children,\n customLabels = {},\n}: {\n children: React.ReactNode;\n customLabels?: TypeLabels;\n}) {\n const typeLabels = { ...defaultTypeLabels, ...customLabels };\n\n const getTypeLabel = (type: PropertyType) => {\n return typeLabels[type] || type;\n };\n\n return (\n <TypeLabelsContext.Provider value={{ getTypeLabel, typeLabels }}>\n {children}\n </TypeLabelsContext.Provider>\n );\n}\n\nexport function useTypeLabels() {\n return useContext(TypeLabelsContext);\n}\n","import {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n} from \"@/components/ui/dialog\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport type { PropertyData, PropertyType } from \"@/types/schema\";\nimport { usePropertyEditor } from \"@/hooks/usePropertyEditor\";\nimport { useTypeLabels } from \"@/contexts/TypeLabelsContext\";\nimport { useState, useEffect } from \"react\";\n\ninterface PropertyEditDialogProps {\n property: PropertyData;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onUpdate: (property: PropertyData) => void;\n isArrayItem?: boolean;\n isNewProperty?: boolean;\n propertyLabel?: { singular: string; plural: string };\n showRegex?: boolean;\n}\n\nexport default function PropertyEditDialog({\n property,\n open,\n onOpenChange,\n onUpdate,\n isArrayItem = false,\n isNewProperty = false,\n propertyLabel = { singular: \"Property\", plural: \"Properties\" },\n showRegex = false,\n}: PropertyEditDialogProps) {\n const { typeLabels } = useTypeLabels();\n\n // Local state for editing\n const [localProperty, setLocalProperty] = useState<PropertyData>(property);\n\n // Reset local state when property or open changes\n useEffect(() => {\n if (open) {\n setLocalProperty(property);\n }\n }, [property, open]);\n\n const {\n handleTitleChange,\n handleTitleBlur,\n handleKeyChange,\n handleFieldChange,\n handleConstraintChange,\n } = usePropertyEditor(localProperty, setLocalProperty, isNewProperty);\n\n const handleSave = () => {\n if (localProperty.title?.trim()) {\n onUpdate(localProperty);\n onOpenChange(false);\n }\n };\n\n const handleCancel = () => {\n setLocalProperty(property); // Reset to original\n onOpenChange(false);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className=\"max-w-2xl max-h-[80vh] flex flex-col gap-0 p-0\"\n data-testid=\"dialog-edit-property\"\n >\n <DialogHeader className=\"px-6 pt-6 pb-4 shrink-0\">\n <DialogTitle>\n {isNewProperty\n ? `Add ${propertyLabel.singular}`\n : `Edit ${propertyLabel.singular}`}\n </DialogTitle>\n </DialogHeader>\n <div className=\"space-y-6 px-6 pb-4 overflow-y-auto flex-1 min-h-0\">\n {/* 1. Property Type */}\n <div className=\"space-y-2\">\n <Label className=\"flex items-center gap-1.5\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-red-500\"></span>\n Type\n </Label>\n <Select\n value={localProperty.type}\n onValueChange={(value) => handleFieldChange(\"type\", value)}\n data-testid=\"select-type-dialog\"\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"string\">{typeLabels.string}</SelectItem>\n <SelectItem value=\"number\">{typeLabels.number}</SelectItem>\n <SelectItem value=\"integer\">{typeLabels.integer}</SelectItem>\n <SelectItem value=\"boolean\">{typeLabels.boolean}</SelectItem>\n <SelectItem value=\"object\">{typeLabels.object}</SelectItem>\n <SelectItem value=\"array\">{typeLabels.array}</SelectItem>\n <SelectItem value=\"file\">{typeLabels.file}</SelectItem>\n <SelectItem value=\"null\">{typeLabels.null}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* 2. Property Title */}\n <div className=\"space-y-2\">\n <Label className=\"flex items-center gap-1.5\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-red-500\"></span>\n Title\n </Label>\n <Input\n value={localProperty.title || \"\"}\n onChange={(e) => handleTitleChange(e.target.value)}\n onBlur={handleTitleBlur}\n placeholder=\"Property Title\"\n data-testid=\"input-title-dialog\"\n required\n />\n {!isNewProperty && localProperty.key && (\n <p className=\"text-xs text-muted-foreground font-mono\">\n Key: {localProperty.key}\n </p>\n )}\n </div>\n\n {/* 3. Property Key - Only shown for new properties */}\n {isNewProperty && (\n <div className=\"space-y-2\">\n <Label>Key</Label>\n <Input\n value={localProperty.key}\n onChange={(e) => handleKeyChange(e.target.value)}\n placeholder=\"property_key\"\n data-testid=\"input-key-dialog\"\n />\n </div>\n )}\n\n {/* 4. Description */}\n <div className=\"space-y-2\">\n <Label>Description</Label>\n <Textarea\n placeholder=\"Optional description\"\n value={localProperty.description || \"\"}\n onChange={(e) => handleFieldChange(\"description\", e.target.value)}\n rows={2}\n data-testid=\"input-edit-description\"\n />\n </div>\n\n {/* Recursive array item editing (inline, not modal) */}\n {localProperty.type === \"array\" && (\n <div className=\"space-y-2 border-l-2 border-border pl-4 mt-2\">\n <Label className=\"font-semibold text-xs text-muted-foreground\">\n {typeLabels.array} Items\n </Label>\n {localProperty.items ? (\n <div className=\"bg-muted/40 p-2 rounded\">\n {/* Inline editing for array item schema */}\n <div className=\"space-y-2\">\n <Label>Item Type</Label>\n <Select\n value={localProperty.items.type}\n onValueChange={(value) =>\n setLocalProperty({\n ...localProperty,\n items: {\n ...localProperty.items!,\n type: value as PropertyType,\n },\n })\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"string\">\n {typeLabels.string}\n </SelectItem>\n <SelectItem value=\"number\">\n {typeLabels.number}\n </SelectItem>\n <SelectItem value=\"integer\">\n {typeLabels.integer}\n </SelectItem>\n <SelectItem value=\"boolean\">\n {typeLabels.boolean}\n </SelectItem>\n <SelectItem value=\"object\">\n {typeLabels.object}\n </SelectItem>\n <SelectItem value=\"array\">\n {typeLabels.array}\n </SelectItem>\n <SelectItem value=\"file\">{typeLabels.file}</SelectItem>\n <SelectItem value=\"null\">{typeLabels.null}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label>Item Title</Label>\n <Input\n value={localProperty.items.title || \"\"}\n onChange={(e) =>\n setLocalProperty({\n ...localProperty,\n items: {\n ...localProperty.items!,\n title: e.target.value,\n },\n })\n }\n placeholder=\"Item Title\"\n />\n </div>\n {/* Item key is fixed and not editable */}\n {/* You can add more inline controls for constraints, etc. */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"mt-2\"\n onClick={() =>\n setLocalProperty({ ...localProperty, items: undefined })\n }\n >\n Remove {typeLabels.array} Item Schema\n </Button>\n </div>\n ) : (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n // Default to string type for new item\n setLocalProperty({\n ...localProperty,\n items: {\n id: Date.now().toString() + Math.random(),\n key: \"item\",\n type: \"string\",\n required: false,\n },\n });\n }}\n >\n Add {typeLabels.array} Item Schema\n </Button>\n )}\n </div>\n )}\n\n {!isArrayItem && (\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"prop-required\"\n checked={localProperty.required}\n onCheckedChange={(checked) =>\n handleFieldChange(\"required\", checked)\n }\n data-testid=\"checkbox-edit-required\"\n />\n <Label htmlFor=\"prop-required\" className=\"cursor-pointer\">\n Required field\n </Label>\n </div>\n )}\n\n {localProperty.type === \"string\" && (\n <details className=\"border rounded-md\">\n <summary className=\"p-4 cursor-pointer hover:bg-accent/50 transition-colors\">\n <h4 className=\"text-sm font-medium inline\">\n {typeLabels.string} Constraints\n </h4>\n </summary>\n <div className=\"space-y-4 p-4 pt-0\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"min-length\">Minimum Length</Label>\n <Input\n id=\"min-length\"\n type=\"number\"\n placeholder=\"0\"\n value={localProperty.minLength || \"\"}\n onChange={(e) =>\n handleConstraintChange(\n \"minLength\",\n e.target.value ? parseInt(e.target.value) : undefined,\n )\n }\n data-testid=\"input-edit-minlength\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"max-length\">Maximum Length</Label>\n <Input\n id=\"max-length\"\n type=\"number\"\n placeholder=\"∞\"\n value={localProperty.maxLength || \"\"}\n onChange={(e) =>\n handleConstraintChange(\n \"maxLength\",\n e.target.value ? parseInt(e.target.value) : undefined,\n )\n }\n data-testid=\"input-edit-maxlength\"\n />\n </div>\n </div>\n {showRegex && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"pattern\">Pattern (regex)</Label>\n <Input\n id=\"pattern\"\n placeholder=\"^[a-z]+$\"\n value={localProperty.pattern || \"\"}\n onChange={(e) =>\n handleConstraintChange(\"pattern\", e.target.value)\n }\n className=\"font-mono text-sm\"\n data-testid=\"input-edit-pattern\"\n />\n </div>\n )}\n <div className=\"space-y-2\">\n <Label>Enum Values</Label>\n <div className=\"space-y-2\">\n {[...(localProperty.enum || []), \"\"].map((value, index) => (\n <Input\n key={index}\n placeholder={\n index === (localProperty.enum?.length || 0)\n ? \"Add new value...\"\n : \"Enum value\"\n }\n value={value}\n onChange={(e) => {\n const newValue = e.target.value;\n const currentEnum = localProperty.enum || [];\n\n if (index === currentEnum.length) {\n // Adding new value to the placeholder input\n if (newValue.trim()) {\n handleConstraintChange(\"enum\", [\n ...currentEnum,\n newValue.trim(),\n ]);\n }\n } else {\n // Updating existing value\n if (newValue.trim()) {\n const newEnum = [...currentEnum];\n newEnum[index] = newValue.trim();\n handleConstraintChange(\"enum\", newEnum);\n } else {\n // Removing empty value\n const newEnum = currentEnum.filter(\n (_, i) => i !== index,\n );\n handleConstraintChange(\n \"enum\",\n newEnum.length > 0 ? newEnum : undefined,\n );\n }\n }\n }}\n data-testid={`input-edit-enum-${index}`}\n />\n ))}\n </div>\n <p className=\"text-xs text-muted-foreground\">\n Enter allowed values (empty fields will be removed)\n </p>\n </div>\n </div>\n </details>\n )}\n\n {(localProperty.type === \"number\" ||\n localProperty.type === \"integer\") && (\n <details className=\"border rounded-md\">\n <summary className=\"p-4 cursor-pointer hover:bg-accent/50 transition-colors\">\n <h4 className=\"text-sm font-medium inline\">\n Numeric Constraints\n </h4>\n </summary>\n <div className=\"space-y-4 p-4 pt-0\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"minimum\">Minimum Value</Label>\n <Input\n id=\"minimum\"\n type=\"number\"\n placeholder=\"-∞\"\n value={localProperty.minimum ?? \"\"}\n onChange={(e) =>\n handleConstraintChange(\n \"minimum\",\n e.target.value\n ? parseFloat(e.target.value)\n : undefined,\n )\n }\n data-testid=\"input-edit-minimum\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"maximum\">Maximum Value</Label>\n <Input\n id=\"maximum\"\n type=\"number\"\n placeholder=\"∞\"\n value={localProperty.maximum ?? \"\"}\n onChange={(e) =>\n handleConstraintChange(\n \"maximum\",\n e.target.value\n ? parseFloat(e.target.value)\n : undefined,\n )\n }\n data-testid=\"input-edit-maximum\"\n />\n </div>\n </div>\n </div>\n </details>\n )}\n\n {localProperty.type === \"array\" && (\n <details className=\"border rounded-md\">\n <summary className=\"p-4 cursor-pointer hover:bg-accent/50 transition-colors\">\n <h4 className=\"text-sm font-medium inline\">\n {typeLabels.array} Constraints\n </h4>\n </summary>\n <div className=\"space-y-4 p-4 pt-0\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"min-items\">Minimum Items</Label>\n <Input\n id=\"min-items\"\n type=\"number\"\n placeholder=\"0\"\n value={localProperty.minItems || \"\"}\n onChange={(e) =>\n handleConstraintChange(\n \"minItems\",\n e.target.value ? parseInt(e.target.value) : undefined,\n )\n }\n data-testid=\"input-edit-minitems\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"max-items\">Maximum Items</Label>\n <Input\n id=\"max-items\"\n type=\"number\"\n placeholder=\"∞\"\n value={localProperty.maxItems || \"\"}\n onChange={(e) =>\n handleConstraintChange(\n \"maxItems\",\n e.target.value ? parseInt(e.target.value) : undefined,\n )\n }\n data-testid=\"input-edit-maxitems\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"unique-items\"\n checked={localProperty.uniqueItems || false}\n onCheckedChange={(checked) =>\n handleConstraintChange(\"uniqueItems\", checked)\n }\n data-testid=\"checkbox-edit-unique\"\n />\n <Label htmlFor=\"unique-items\" className=\"cursor-pointer\">\n All items must be unique\n </Label>\n </div>\n </div>\n </details>\n )}\n </div>\n <DialogFooter className=\"px-6 py-4 border-t bg-background shrink-0\">\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n data-testid=\"button-cancel\"\n >\n Cancel\n </Button>\n <Button\n onClick={handleSave}\n data-testid=\"button-save\"\n disabled={!localProperty.title?.trim()}\n >\n Save Changes\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","// ID generation utilities\n\n/**\n * Generate a unique ID for properties\n * Uses timestamp and random number for uniqueness\n *\n * @example\n * generatePropertyId() // \"1699632000000-0.123456789\"\n */\nexport const generatePropertyId = (): string => {\n return `${Date.now()}-${Math.random()}`;\n};\n","import { useState, useEffect } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport {\n Pencil,\n Trash2,\n Plus,\n Type,\n List,\n Hash,\n Braces,\n CheckSquare,\n FileText,\n} from \"lucide-react\";\nimport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n} from \"@/components/ui/tooltip\";\nimport PropertyEditDialog from \"./PropertyEditDialog\";\nimport type { PropertyData } from \"@/types/schema\";\nimport { useTypeLabels } from \"@/contexts/TypeLabelsContext\";\nimport { generatePropertyId } from \"@/lib/id-generator\";\n\ninterface PropertyDocumentProps {\n property: PropertyData;\n onUpdate: (property: PropertyData) => void;\n onDelete: () => void;\n level?: number;\n isArrayItem?: boolean;\n showRegex?: boolean;\n}\n\nexport default function PropertyDocument({\n property,\n onUpdate,\n onDelete,\n level = 1,\n isArrayItem = false,\n showRegex = false,\n}: PropertyDocumentProps) {\n const { getTypeLabel } = useTypeLabels();\n const [isEditing, setIsEditing] = useState(false);\n const [newChild, setNewChild] = useState<PropertyData | null>(null);\n const [isAddingChild, setIsAddingChild] = useState(false);\n const [isEditingTitle, setIsEditingTitle] = useState(false);\n const [editedTitle, setEditedTitle] = useState(property.title || \"\");\n\n // Keep editedTitle in sync with property.title\n useEffect(() => {\n if (!isEditingTitle) {\n setEditedTitle(property.title || \"\");\n }\n }, [property.title, isEditingTitle]);\n\n const HeadingTag = `h${Math.min(level, 6)}` as keyof JSX.IntrinsicElements;\n const canHaveChildren = property.type === \"object\";\n const hasChildren =\n canHaveChildren && property.children && property.children.length > 0;\n\n const headingClasses =\n {\n 1: \"text-lg font-semibold\",\n 2: \"text-base\",\n 3: \"text-base\",\n 4: \"text-base\",\n 5: \"text-sm\",\n 6: \"text-sm\",\n }[level] || \"text-sm\";\n\n const updateChild = (childId: string, updated: PropertyData) => {\n const newChildren = property.children!.map((c) =>\n c.id === childId ? updated : c,\n );\n onUpdate({ ...property, children: newChildren });\n };\n\n const deleteChild = (childId: string) => {\n const newChildren = property.children!.filter((c) => c.id !== childId);\n onUpdate({ ...property, children: newChildren });\n };\n\n const addChild = () => {\n const child: PropertyData = {\n id: generatePropertyId(),\n key: \"\",\n type: \"string\",\n required: false,\n };\n setNewChild(child);\n setIsAddingChild(true);\n };\n\n const confirmAddChild = (child: PropertyData) => {\n onUpdate({\n ...property,\n children: [...(property.children || []), child],\n });\n setIsAddingChild(false);\n setNewChild(null);\n };\n\n const cancelAddChild = () => {\n setIsAddingChild(false);\n setNewChild(null);\n };\n\n const handleTitleClick = () => {\n const currentTitle = property.title || property.key || \"\";\n setEditedTitle(currentTitle);\n setIsEditingTitle(true);\n };\n\n const handleTitleBlur = () => {\n const trimmedTitle = editedTitle.trim();\n\n // Don't allow empty title - revert to original if empty\n if (!trimmedTitle) {\n setEditedTitle(property.title || \"\");\n setIsEditingTitle(false);\n return;\n }\n\n if (trimmedTitle !== property.title) {\n // Only update title, never change the key after creation\n onUpdate({ ...property, title: trimmedTitle });\n }\n setIsEditingTitle(false);\n };\n\n const handleTitleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleTitleBlur();\n } else if (e.key === \"Escape\") {\n setEditedTitle(property.title || \"\");\n setIsEditingTitle(false);\n }\n };\n\n return (\n <div className=\"group\">\n <div className=\"flex gap-4 items-center rounded-md -mx-2 px-2 py-1 transition-colors hover:bg-accent/50\">\n {/* Left side - Main content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start gap-3\">\n {!isArrayItem && (\n <button\n onClick={() =>\n onUpdate({ ...property, required: !property.required })\n }\n className=\"shrink-0 transition-all hover:scale-110 mt-0.5\"\n title={\n property.required\n ? \"Required field - click to make optional\"\n : \"Optional field - click to make required\"\n }\n >\n {property.required ? (\n <span className=\"block w-4 h-4 rounded-full bg-primary\"></span>\n ) : (\n <span className=\"block w-4 h-4 rounded-full border border-dashed border-gray-400\"></span>\n )}\n </button>\n )}\n\n {isEditingTitle ? (\n <Input\n value={editedTitle}\n onChange={(e) => setEditedTitle(e.target.value)}\n onBlur={handleTitleBlur}\n onKeyDown={handleTitleKeyDown}\n autoFocus\n className={headingClasses}\n placeholder=\"Enter title\"\n />\n ) : (\n <div className=\"flex gap-2 flex-wrap\">\n <div className=\"flex items-start gap-2\">\n <HeadingTag\n className={`${headingClasses} cursor-pointer hover:text-primary transition-colors leading-none`}\n onClick={handleTitleClick}\n >\n {property.title || property.key || (\n <span className=\"text-muted-foreground italic\">\n unnamed\n </span>\n )}\n </HeadingTag>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span>\n {property.type === \"string\" && (\n <Type className=\"w-5 h-5 text-muted-foreground\" />\n )}\n {property.type === \"number\" && (\n <Hash className=\"w-5 h-5 text-muted-foreground\" />\n )}\n {property.type === \"integer\" && (\n <Hash className=\"w-5 h-5 text-muted-foreground\" />\n )}\n {property.type === \"boolean\" && (\n <CheckSquare className=\"w-5 h-5 text-muted-foreground\" />\n )}\n {property.type === \"object\" && (\n <Braces className=\"w-5 h-5 text-muted-foreground\" />\n )}\n {property.type === \"array\" && (\n <List className=\"w-5 h-5 text-muted-foreground\" />\n )}\n {property.type === \"file\" && (\n <FileText className=\"w-5 h-5 text-muted-foreground\" />\n )}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n {getTypeLabel(property.type)}\n {property.type === \"array\" && property.items\n ? ` of ${getTypeLabel(property.items.type)}`\n : \"\"}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n {property.type === \"object\" && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"opacity-0 group-hover:opacity-100 h-6 w-6\"\n onClick={addChild}\n data-testid={`button-add-child-${property.id}`}\n >\n <Plus className=\"!w-5 !h-5\" />\n </Button>\n )}\n </div>\n {property.description && (\n <p\n className=\"text-sm text-muted-foreground flex-1 min-w-[200px]\"\n data-testid={`text-description-${property.id}`}\n >\n {property.description}\n </p>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Right side - Action buttons */}\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity shrink-0\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n onClick={() => setIsEditing(true)}\n data-testid={`button-edit-${property.id}`}\n >\n <Pencil className=\"w-3 h-3\" />\n </Button>\n {/* Only show add-child button on right for non-object types (shouldn't happen, but for safety) */}\n {canHaveChildren && property.type !== \"object\" && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n onClick={addChild}\n data-testid={`button-add-child-${property.id}`}\n >\n <Plus className=\"w-3 h-3\" />\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7 text-muted-foreground hover:text-destructive\"\n onClick={onDelete}\n data-testid={`button-delete-${property.id}`}\n >\n <Trash2 className=\"w-3 h-3\" />\n </Button>\n </div>\n </div>\n\n {/* Render children for objects */}\n {hasChildren && (\n <div\n className={\n level === 1\n ? \"ml-6 mt-1 border-l-2 border-border pl-6\"\n : \"ml-4 mt-1 border-l border-border pl-4\"\n }\n >\n {property.children!.map((child) => (\n <PropertyDocument\n key={child.id}\n property={child}\n onUpdate={(updated) => updateChild(child.id, updated)}\n onDelete={() => deleteChild(child.id)}\n level={level + 1}\n showRegex={showRegex}\n />\n ))}\n </div>\n )}\n\n {/* Render items for arrays recursively */}\n {property.type === \"array\" && property.items && (\n <div\n className={\n level === 1\n ? \"ml-6 mt-1 border-l-2 border-border pl-6\"\n : \"ml-4 mt-1 border-l border-border pl-4\"\n }\n >\n <div className=\"mb-2 text-xs text-muted-foreground font-semibold uppercase\">\n {getTypeLabel(\"array\")} Items\n </div>\n <PropertyDocument\n property={property.items}\n onUpdate={(updated) => onUpdate({ ...property, items: updated })}\n onDelete={() => onUpdate({ ...property, items: undefined })}\n level={level + 1}\n isArrayItem={true}\n showRegex={showRegex}\n />\n </div>\n )}\n\n <PropertyEditDialog\n property={property}\n open={isEditing}\n onOpenChange={setIsEditing}\n onUpdate={onUpdate}\n isArrayItem={isArrayItem}\n isNewProperty={false}\n showRegex={showRegex}\n />\n\n {isAddingChild && newChild && (\n <PropertyEditDialog\n property={newChild}\n open={isAddingChild}\n isNewProperty={true}\n onOpenChange={(open) => {\n if (!open) {\n cancelAddChild();\n }\n }}\n onUpdate={confirmAddChild}\n showRegex={showRegex}\n />\n )}\n </div>\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 \"shadcn-card rounded-xl border bg-card border-card-border 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 HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\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 HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\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\";\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n};\n","// File upload/download utilities\n\n/**\n * Open a file picker and read a JSON file\n */\nexport const importJsonFile = (): Promise<any> => {\n return new Promise((resolve, reject) => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \".json\";\n\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (!file) {\n reject(new Error(\"No file selected\"));\n return;\n }\n\n const reader = new FileReader();\n reader.onload = (event) => {\n try {\n const data = JSON.parse(event.target?.result as string);\n resolve(data);\n } catch (err) {\n reject(new Error(\"Invalid JSON file\"));\n }\n };\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsText(file);\n };\n\n input.click();\n });\n};\n\n/**\n * Download a JSON object as a file\n */\nexport const downloadJsonFile = (\n data: any,\n filename: string = \"schema.json\",\n): void => {\n const jsonString = JSON.stringify(data, null, 2);\n const blob = new Blob([jsonString], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n};\n","import { Card } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport { Copy, Download, CheckCircle2 } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { downloadJsonFile } from \"@/lib/file-utils\";\n\ninterface JsonOutputProps {\n schema: any;\n}\n\nexport default function JsonOutput({ schema }: JsonOutputProps) {\n const [copied, setCopied] = useState(false);\n\n const jsonString = JSON.stringify(schema, null, 2);\n\n const handleCopy = async () => {\n await navigator.clipboard.writeText(jsonString);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n\n const handleDownload = () => {\n downloadJsonFile(schema, \"schema.json\");\n };\n\n return (\n <div className=\"h-full flex flex-col\">\n <div className=\"flex items-center justify-between p-4 border-b\">\n <h2 className=\"text-sm font-medium\">JSON Schema Output</h2>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleCopy}\n data-testid=\"button-copy\"\n >\n {copied ? (\n <CheckCircle2 className=\"w-4 h-4\" />\n ) : (\n <Copy className=\"w-4 h-4\" />\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleDownload}\n data-testid=\"button-download\"\n >\n <Download className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n\n <div className=\"flex-1 overflow-auto\">\n <Card className=\"m-4 bg-muted/30\">\n <pre\n className=\"p-6 text-xs font-mono overflow-auto\"\n data-testid=\"text-json-output\"\n >\n <code>{jsonString}</code>\n </pre>\n </Card>\n </div>\n </div>\n );\n}\n","import { Card } from \"@/components/ui/card\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { ChevronDown, ChevronRight } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { useState } from \"react\";\n\ninterface SchemaMetadataProps {\n title: string;\n description: string;\n version: string;\n onUpdate: (field: string, value: string) => void;\n}\n\nexport default function SchemaMetadata({\n title,\n description,\n version,\n onUpdate,\n}: SchemaMetadataProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n return (\n <Card className=\"p-4\">\n <Button\n variant=\"ghost\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"w-full justify-between px-2 h-auto hover:bg-transparent\"\n data-testid=\"button-toggle-metadata\"\n >\n <h3 className=\"text-sm font-medium\">Schema Metadata</h3>\n {isExpanded ? (\n <ChevronDown className=\"w-4 h-4\" />\n ) : (\n <ChevronRight className=\"w-4 h-4\" />\n )}\n </Button>\n\n {isExpanded && (\n <div className=\"mt-4 space-y-4\">\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"schema-title\"\n className=\"text-xs text-muted-foreground\"\n >\n Title\n </Label>\n <Input\n id=\"schema-title\"\n placeholder=\"My Schema\"\n value={title}\n onChange={(e) => onUpdate(\"title\", e.target.value)}\n data-testid=\"input-title\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"schema-description\"\n className=\"text-xs text-muted-foreground\"\n >\n Description\n </Label>\n <Textarea\n id=\"schema-description\"\n placeholder=\"Describe your schema...\"\n value={description}\n onChange={(e) => onUpdate(\"description\", e.target.value)}\n className=\"resize-none\"\n rows={3}\n data-testid=\"input-schema-description\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"schema-version\"\n className=\"text-xs text-muted-foreground\"\n >\n Version\n </Label>\n {/* TODO: Fix version */}\n <Input\n id=\"schema-version\"\n placeholder=\"1.0.0\"\n value={version}\n onChange={(e) => onUpdate(\"version\", e.target.value)}\n data-testid=\"input-version\"\n />\n </div>\n </div>\n )}\n </Card>\n );\n}\n","// JSON Schema generation utilities\n\nimport type { PropertyData, SchemaMetadata } from \"@/types/schema\";\nimport { JSONSchema7 } from \"json-schema\";\n\n/**\n * Generate a JSON Schema from property definitions\n */\nexport const generateSchema = (\n properties: PropertyData[],\n metadata?: SchemaMetadata,\n includeMetadata: boolean = true,\n): JSONSchema7 => {\n const schema: JSONSchema7 = {\n type: \"object\",\n };\n\n // Add metadata if enabled and provided\n if (includeMetadata && metadata) {\n if (metadata.title) schema.title = metadata.title;\n if (metadata.description) schema.description = metadata.description;\n }\n\n // Build properties recursively\n const props = buildProperties(properties);\n if (Object.keys(props).length > 0) {\n schema.properties = props;\n }\n\n // Add required array at root level\n const required = properties\n .filter((p) => p.required && p.key)\n .map((p) => p.key);\n if (required.length > 0) {\n schema.required = required;\n }\n\n return schema;\n};\n\n/**\n * Recursively build property schemas\n */\nconst buildProperties = (\n props: PropertyData[],\n): Record<string, JSONSchema7> => {\n const result: Record<string, JSONSchema7> = {};\n\n props.forEach((prop) => {\n if (!prop.key) return;\n\n // Convert 'file' type to string with format = filename for JSON Schema compliance\n const schemaType = prop.type === \"file\" ? \"string\" : prop.type;\n const propSchema: JSONSchema7 = { type: schemaType };\n\n // Add common fields\n if (prop.title) propSchema.title = prop.title;\n if (prop.description) propSchema.description = prop.description;\n\n // For file type, add format to indicate special content\n if (prop.type === \"file\") {\n propSchema.format = \"filename\";\n }\n\n // String constraints\n if (prop.type === \"string\") {\n if (prop.minLength !== undefined) propSchema.minLength = prop.minLength;\n if (prop.maxLength !== undefined) propSchema.maxLength = prop.maxLength;\n if (prop.pattern) propSchema.pattern = prop.pattern;\n if (prop.enum && prop.enum.length > 0) propSchema.enum = prop.enum;\n }\n\n // Numeric constraints\n if (prop.type === \"number\" || prop.type === \"integer\") {\n if (prop.minimum !== undefined) propSchema.minimum = prop.minimum;\n if (prop.maximum !== undefined) propSchema.maximum = prop.maximum;\n }\n\n // Array constraints\n if (prop.type === \"array\") {\n if (prop.minItems !== undefined) propSchema.minItems = prop.minItems;\n if (prop.maxItems !== undefined) propSchema.maxItems = prop.maxItems;\n if (prop.uniqueItems) propSchema.uniqueItems = prop.uniqueItems;\n\n // Add items schema recursively\n if (prop.items) {\n propSchema.items = buildProperties([prop.items])[prop.items.key] || {\n type: prop.items.type,\n };\n }\n }\n\n // Object properties and required fields\n if (prop.type === \"object\" && prop.children && prop.children.length > 0) {\n propSchema.properties = buildProperties(prop.children);\n const requiredChildren = prop.children\n .filter((c) => c.required && c.key)\n .map((c) => c.key);\n if (requiredChildren.length > 0) {\n propSchema.required = requiredChildren;\n }\n }\n\n result[prop.key] = propSchema;\n });\n\n return result;\n};\n","// JSON Schema parsing utilities\n\nimport { JSONSchema7 } from \"json-schema\";\nimport type { PropertyData, SchemaMetadata } from \"@/types/schema\";\nimport { generatePropertyId } from \"./id-generator\";\n\nexport interface ParsedSchema {\n properties: PropertyData[];\n metadata?: SchemaMetadata;\n}\n\n/**\n * Parse a JSON Schema into PropertyData array\n */\nexport const parseSchema = (schema: JSONSchema7): ParsedSchema => {\n const result: ParsedSchema = {\n properties: [],\n };\n\n // Extract metadata if present\n if (schema.title || schema.description) {\n result.metadata = {\n title: typeof schema.title === \"string\" ? schema.title : \"\",\n description:\n typeof schema.description === \"string\" ? schema.description : \"\",\n version: \"1.0.0\", // Default version\n };\n }\n\n // Parse properties\n if (schema.properties && typeof schema.properties === \"object\") {\n result.properties = parseProperties(\n schema.properties,\n Array.isArray(schema.required) ? schema.required : [],\n );\n }\n\n return result;\n};\n\n/**\n * Recursively parse properties from a JSON Schema\n */\nexport const parseProperties = (\n props: Record<string, JSONSchema7 | boolean>,\n requiredList: string[] = [],\n): PropertyData[] => {\n if (!props) return [];\n\n return Object.entries(props)\n .filter(([, propSchema]) => typeof propSchema === \"object\")\n .map(([key, propSchema]) => {\n const schema = propSchema as JSONSchema7;\n\n // Determine the type - check for file type indicators\n let propertyType = (\n typeof schema.type === \"string\" ? schema.type : \"string\"\n ) as PropertyData[\"type\"];\n\n // If it's a string with format filename, treat it as a file\n if (propertyType === \"string\" && schema.format === \"filename\") {\n propertyType = \"file\";\n }\n\n const property: PropertyData = {\n id: generatePropertyId(),\n key,\n title: typeof schema.title === \"string\" ? schema.title : undefined,\n type: propertyType,\n description:\n typeof schema.description === \"string\"\n ? schema.description\n : undefined,\n required: requiredList.includes(key),\n };\n\n // Parse string constraints\n if (schema.minLength !== undefined) property.minLength = schema.minLength;\n if (schema.maxLength !== undefined) property.maxLength = schema.maxLength;\n if (schema.pattern) property.pattern = schema.pattern;\n if (schema.enum && Array.isArray(schema.enum))\n property.enum = schema.enum as string[];\n\n // Parse numeric constraints\n if (schema.minimum !== undefined) property.minimum = schema.minimum;\n if (schema.maximum !== undefined) property.maximum = schema.maximum;\n\n // Parse array constraints\n if (schema.minItems !== undefined) property.minItems = schema.minItems;\n if (schema.maxItems !== undefined) property.maxItems = schema.maxItems;\n if (schema.uniqueItems) property.uniqueItems = schema.uniqueItems;\n\n // Parse array items recursively\n if (\n property.type === \"array\" &&\n schema.items &&\n typeof schema.items === \"object\" &&\n !Array.isArray(schema.items)\n ) {\n property.items = parseProperties(\n { item: schema.items as JSONSchema7 },\n [],\n ).find((p) => p.key === \"item\");\n }\n\n // Parse object children recursively\n if (schema.properties && typeof schema.properties === \"object\") {\n property.children = parseProperties(\n schema.properties,\n Array.isArray(schema.required) ? schema.required : [],\n );\n }\n\n return property;\n });\n};\n","// Custom hook for managing schema builder state and operations\n// INTERNAL USE ONLY - not exported to external users\n\nimport { useMemo, useCallback } from \"react\";\nimport type { PropertyData, SchemaMetadata } from \"@/types/schema\";\nimport { generateSchema } from \"@/lib/schema-generator\";\nimport { parseSchema } from \"@/lib/schema-parser\";\nimport { importJsonFile, downloadJsonFile } from \"@/lib/file-utils\";\nimport { generatePropertyId } from \"@/lib/id-generator\";\n\nexport interface UseSchemaBuilderReturn {\n properties: PropertyData[];\n metadata: SchemaMetadata;\n addProperty: () => PropertyData;\n updateProperty: (id: string, updated: PropertyData) => void;\n deleteProperty: (id: string) => void;\n clearAll: () => void;\n updateMetadata: (field: keyof SchemaMetadata, value: string) => void;\n importSchema: () => Promise<void>;\n downloadSchema: () => void;\n}\n\ninterface UseSchemaBuilderOptions {\n schema: any;\n onChange: (schema: any) => void;\n includeMetadata?: boolean;\n}\n\nexport const useSchemaBuilder = ({\n schema,\n onChange,\n includeMetadata = true,\n}: UseSchemaBuilderOptions): UseSchemaBuilderReturn => {\n // Parse properties and metadata from controlled schema prop\n const { properties: parsedProperties, metadata: parsedMetadata } = useMemo(\n () => parseSchema(schema),\n [schema]\n );\n\n const properties = parsedProperties;\n const metadata = parsedMetadata || {\n title: \"\",\n description: \"\",\n version: \"\",\n };\n\n // Add a new property\n const addProperty = useCallback((): PropertyData => {\n const property: PropertyData = {\n id: generatePropertyId(),\n key: \"\",\n type: \"string\",\n required: false,\n };\n return property;\n }, []);\n\n // Update an existing property or add it if it doesn't exist\n const updateProperty = useCallback((id: string, updated: PropertyData) => {\n const exists = properties.some((p) => p.id === id);\n let updatedProperties: PropertyData[];\n \n if (exists) {\n updatedProperties = properties.map((p) => (p.id === id ? updated : p));\n } else {\n // If property doesn't exist, add it\n updatedProperties = [...properties, updated];\n }\n \n const newSchema = generateSchema(updatedProperties, metadata, includeMetadata);\n onChange(newSchema);\n }, [properties, metadata, includeMetadata, onChange]);\n\n // Delete a property\n const deleteProperty = useCallback((id: string) => {\n const updatedProperties = properties.filter((p) => p.id !== id);\n const newSchema = generateSchema(updatedProperties, metadata, includeMetadata);\n onChange(newSchema);\n }, [properties, metadata, includeMetadata, onChange]);\n\n // Clear all properties and reset metadata\n const clearAll = useCallback(() => {\n const emptyMetadata = { title: \"\", description: \"\", version: \"\" };\n const newSchema = generateSchema([], emptyMetadata, includeMetadata);\n onChange(newSchema);\n }, [includeMetadata, onChange]);\n\n // Update metadata field\n const updateMetadata = useCallback((field: keyof SchemaMetadata, value: string) => {\n const updatedMetadata = { ...metadata, [field]: value };\n const newSchema = generateSchema(properties, updatedMetadata, includeMetadata);\n onChange(newSchema);\n }, [properties, metadata, includeMetadata, onChange]);\n\n // Import schema from file\n const importSchema = useCallback(async () => {\n const data = await importJsonFile();\n onChange(data);\n }, [onChange]);\n\n // Download schema as file\n const downloadSchema = useCallback(() => {\n downloadJsonFile(schema, \"schema.json\");\n }, [schema]);\n\n return {\n properties,\n metadata,\n addProperty,\n updateProperty,\n deleteProperty,\n clearAll,\n updateMetadata,\n importSchema,\n downloadSchema,\n };\n};\n","import { Moon, Sun } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { useEffect, useState } from \"react\";\n\nexport default function ThemeToggle() {\n const [theme, setTheme] = useState<\"light\" | \"dark\">(\"light\");\n\n useEffect(() => {\n const stored = localStorage.getItem(\"theme\") as \"light\" | \"dark\" | null;\n const initial =\n stored ||\n (window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\");\n setTheme(initial);\n document.documentElement.classList.toggle(\"dark\", initial === \"dark\");\n }, []);\n\n const toggleTheme = () => {\n const newTheme = theme === \"light\" ? \"dark\" : \"light\";\n setTheme(newTheme);\n localStorage.setItem(\"theme\", newTheme);\n document.documentElement.classList.toggle(\"dark\", newTheme === \"dark\");\n };\n\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={toggleTheme}\n data-testid=\"button-theme-toggle\"\n >\n {theme === \"light\" ? (\n <Moon className=\"w-4 h-4\" />\n ) : (\n <Sun className=\"w-4 h-4\" />\n )}\n </Button>\n );\n}\n","import { useState } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Plus, Upload, Trash2 } from \"lucide-react\";\nimport PropertyDocument from \"@/components/PropertyDocument\";\nimport PropertyEditDialog from \"@/components/PropertyEditDialog\";\nimport JsonOutput from \"@/components/JsonOutput\";\nimport SchemaMetadata from \"@/components/SchemaMetadata\";\nimport type {\n PropertyData,\n SchemaMetadata as SchemaMetadataType,\n} from \"@/types/schema\";\nimport { useSchemaBuilder } from \"@/hooks/useSchemaBuilder\";\nimport ThemeToggle from \"./ThemeToggle\";\nimport {\n TypeLabelsProvider,\n type TypeLabels,\n} from \"@/contexts/TypeLabelsContext\";\n\nexport interface JsonSchemaBuilderProps {\n /**\n * The JSON schema object (controlled)\n */\n schema: any;\n\n /**\n * Callback fired when the schema changes\n */\n onChange: (schema: any) => void;\n\n /**\n * Whether to show metadata fields (title, description, version)\n * @default false\n */\n showMetadata?: boolean;\n\n /**\n * Whether to show the import button\n * @default true\n */\n showImport?: boolean;\n\n /**\n * Whether to show the clear all button\n * @default true\n */\n showClear?: boolean;\n\n /**\n * Whether to show the JSON output panel\n * @default true\n */\n showOutput?: boolean;\n\n /**\n * Custom class name for the container\n */\n className?: string;\n\n showHeader?: boolean;\n\n /**\n * Custom labels for property types\n * @example { string: 'Text', boolean: 'Yes/No', object: 'Form', array: 'List' }\n */\n typeLabels?: TypeLabels;\n\n /**\n * Whether to show summary in the bottom of the document area\n * @default true\n */\n showSummary?: boolean;\n\n /**\n * Custom label for top-level properties\n * @example { singular: 'input', plural: 'inputs' }\n * @default { singular: 'property', plural: 'properties' }\n */\n propertyLabel?: {\n singular: string;\n plural: string;\n };\n\n /**\n * Whether to show the regex pattern field in string constraints\n * @default false\n */\n showRegex?: boolean;\n}\n\n/**\n * A visual JSON Schema builder component that allows building JSON schemas interactively\n */\nexport function JsonSchemaBuilder({\n schema,\n onChange,\n showMetadata = false,\n showImport = true,\n showClear = true,\n showOutput = true,\n showHeader = true,\n className = \"\",\n showSummary = false,\n typeLabels,\n propertyLabel = { singular: \"property\", plural: \"properties\" },\n showRegex = false,\n}: JsonSchemaBuilderProps) {\n const [newProperty, setNewProperty] = useState<PropertyData | null>(null);\n const [isAddingProperty, setIsAddingProperty] = useState(false);\n\n const {\n properties,\n metadata,\n addProperty: createProperty,\n updateProperty,\n deleteProperty,\n clearAll: clearAllProperties,\n updateMetadata,\n importSchema,\n } = useSchemaBuilder({\n schema,\n onChange,\n includeMetadata: showMetadata,\n });\n\n const addProperty = () => {\n const property = createProperty();\n setNewProperty(property);\n setIsAddingProperty(true);\n };\n\n const confirmAddProperty = (property: PropertyData) => {\n updateProperty(property.id, property);\n setIsAddingProperty(false);\n setNewProperty(null);\n };\n\n const cancelAddProperty = () => {\n setIsAddingProperty(false);\n setNewProperty(null);\n };\n\n const clearAll = () => {\n clearAllProperties();\n };\n\n const handleImport = async () => {\n await importSchema();\n };\n\n return (\n <TypeLabelsProvider customLabels={typeLabels}>\n <div className={`${className} flex flex-col json-schema-builder-react`}>\n {showHeader && (\n <header className=\"h-16 border-b flex items-center justify-between px-6\">\n <div className=\"flex items-center gap-3\">\n {showImport && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleImport}\n data-testid=\"button-import\"\n >\n <Upload className=\"w-4 h-4\" />\n </Button>\n )}\n {showClear && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={clearAll}\n disabled={properties.length === 0}\n data-testid=\"button-clear\"\n >\n <Trash2 className=\"w-4 h-4\" />\n </Button>\n )}\n <ThemeToggle />\n </div>\n </header>\n )}\n\n <div className=\"flex-1 flex overflow-hidden\">\n <div className={showOutput ? \"w-3/5 border-r\" : \"w-full\"}>\n <div className=\"h-full overflow-auto p-2 space-y-4\">\n {showMetadata && (\n <SchemaMetadata\n title={metadata.title}\n description={metadata.description}\n version={metadata.version}\n onUpdate={(field, value) =>\n updateMetadata(field as keyof SchemaMetadataType, value)\n }\n />\n )}\n\n {properties.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <div className=\"w-16 h-16 rounded-full bg-muted flex items-center justify-center mb-4\">\n <Plus className=\"w-8 h-8 text-muted-foreground\" />\n </div>\n <h2 className=\"text-lg font-medium mb-2\">\n No {propertyLabel.plural} yet\n </h2>\n <p className=\"text-sm text-muted-foreground mb-6 max-w-sm\">\n Start building your JSON schema by adding your first{\" \"}\n {propertyLabel.singular}\n </p>\n <Button onClick={addProperty} data-testid=\"button-add-first\">\n <Plus className=\"w-4 h-4 mr-2\" />\n Add {propertyLabel.singular}\n </Button>\n </div>\n ) : (\n <>\n <div className=\"space-y-1\">\n {properties.map((property) => (\n <PropertyDocument\n key={property.id}\n property={property}\n onUpdate={(updated) =>\n updateProperty(property.id, updated)\n }\n onDelete={() => deleteProperty(property.id)}\n showRegex={showRegex}\n />\n ))}\n </div>\n\n <div className=\"pt-6\">\n <Button\n onClick={addProperty}\n className=\"w-full\"\n variant=\"outline\"\n data-testid=\"button-add-property\"\n >\n <Plus className=\"w-4 h-4 mr-2\" />\n Add {propertyLabel.singular}\n </Button>\n </div>\n\n {showSummary && (\n <div className=\"pt-4 border-t flex items-center justify-between text-sm text-muted-foreground\">\n <span>\n {properties.length}{\" \"}\n {properties.length === 1\n ? propertyLabel.singular\n : propertyLabel.plural}\n </span>\n <span>\n {properties.filter((p) => p.required).length} required\n </span>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n\n {showOutput && (\n <div className=\"w-2/5\">\n <JsonOutput schema={schema} />\n </div>\n )}\n </div>\n\n {isAddingProperty && newProperty && (\n <PropertyEditDialog\n property={newProperty}\n open={isAddingProperty}\n isNewProperty={true}\n onOpenChange={(open) => {\n if (!open) {\n cancelAddProperty();\n }\n }}\n propertyLabel={propertyLabel}\n onUpdate={confirmAddProperty}\n showRegex={showRegex}\n />\n )}\n </div>\n </TypeLabelsProvider>\n );\n}\n"],"names":["r","t","f","n","clsx","falsyToString","value","cx","cva","base","config","props","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","key","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","CLASS_PART_SEPARATOR","createClassGroupUtils","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","_a","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","prefix","getPrefixedClassGroupEntries","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","path","currentClassPartObject","pathPart","func","classGroupEntries","prefixedClassGroup","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","classNames","result","originalClassName","variantModifier","modifierId","classId","conflictGroups","i","group","twJoin","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isInteger","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","twMerge","cn","inputs","buttonVariants","Button","React","size","asChild","ref","jsx","Slot","Input","type","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","sideOffset","Dialog","DialogPrimitive","DialogPortal","DialogOverlay","DialogContent","children","jsxs","X","DialogHeader","DialogFooter","DialogTitle","DialogDescription","labelVariants","Label","LabelPrimitive","Select","SelectPrimitive","SelectValue","SelectTrigger","ChevronDown","SelectScrollUpButton","ChevronUp","SelectScrollDownButton","SelectContent","position","SelectLabel","SelectItem","Check","SelectSeparator","Checkbox","CheckboxPrimitive","Textarea","toSnakeCase","str","usePropertyEditor","onUpdate","isNewProperty","handleFieldChange","field","title","autoKey","defaultTypeLabels","TypeLabelsContext","createContext","TypeLabelsProvider","customLabels","typeLabels","getTypeLabel","useTypeLabels","useContext","PropertyEditDialog","open","onOpenChange","isArrayItem","propertyLabel","showRegex","localProperty","setLocalProperty","useState","useEffect","handleTitleChange","handleTitleBlur","handleKeyChange","handleConstraintChange","handleSave","handleCancel","e","checked","newValue","currentEnum","newEnum","_","generatePropertyId","PropertyDocument","onDelete","level","isEditing","setIsEditing","newChild","setNewChild","isAddingChild","setIsAddingChild","isEditingTitle","setIsEditingTitle","editedTitle","setEditedTitle","HeadingTag","canHaveChildren","hasChildren","headingClasses","updateChild","childId","updated","newChildren","c","deleteChild","addChild","child","confirmAddChild","cancelAddChild","handleTitleClick","currentTitle","trimmedTitle","handleTitleKeyDown","Type","Hash","CheckSquare","Braces","List","FileText","Plus","Pencil","Trash2","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","importJsonFile","resolve","reject","input","file","reader","event","data","downloadJsonFile","filename","jsonString","blob","url","a","JsonOutput","schema","copied","setCopied","CheckCircle2","Copy","Download","SchemaMetadata","description","version","isExpanded","setIsExpanded","ChevronRight","generateSchema","properties","metadata","includeMetadata","buildProperties","required","p","prop","propSchema","requiredChildren","parseSchema","parseProperties","requiredList","propertyType","useSchemaBuilder","onChange","parsedProperties","parsedMetadata","useMemo","addProperty","useCallback","updateProperty","id","exists","updatedProperties","newSchema","deleteProperty","clearAll","updateMetadata","updatedMetadata","importSchema","downloadSchema","ThemeToggle","setTheme","initial","newTheme","Moon","Sun","JsonSchemaBuilder","showMetadata","showImport","showClear","showOutput","showHeader","showSummary","newProperty","setNewProperty","isAddingProperty","setIsAddingProperty","createProperty","clearAllProperties","confirmAddProperty","cancelAddProperty","handleImport","Upload","Fragment"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/clsx/dist/clsx.mjs","../node_modules/class-variance-authority/dist/index.mjs","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts","../src/components/ui/button.tsx","../src/components/ui/input.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/select.tsx","../src/components/ui/dialog.tsx","../src/components/ui/label.tsx","../src/components/ui/checkbox.tsx","../src/components/ui/textarea.tsx","../src/lib/string-utils.ts","../src/hooks/usePropertyEditor.ts","../src/contexts/TypeLabelsContext.tsx","../src/components/PropertyEditDialog.tsx","../src/hooks/useInlineEditor.ts","../src/hooks/useTypeSelector.ts","../src/lib/id-generator.ts","../src/hooks/useDialogManager.ts","../src/hooks/useChildManager.ts","../src/components/PropertyDocument.tsx","../src/components/ui/card.tsx","../src/lib/file-utils.ts","../src/components/JsonOutput.tsx","../src/components/SchemaMetadata.tsx","../src/lib/schema-generator.ts","../src/lib/schema-parser.ts","../src/hooks/useSchemaBuilder.ts","../src/components/ThemeToggle.tsx","../src/components/JsonSchemaBuilder.tsx"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n prefix\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\n });\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n if (!prefix) {\n return classGroupEntries;\n }\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map(classDefinition => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition;\n }\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n }\n return classDefinition;\n });\n return [classGroupId, prefixedClassGroup];\n });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n const {\n separator,\n experimentalParseClassName\n } = config;\n const isSeparatorSingleCharacter = separator.length === 1;\n const firstSeparatorCharacter = separator[0];\n const separatorLength = separator.length;\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0) {\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + separatorLength;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (experimentalParseClassName) {\n return className => experimentalParseClassName({\n className,\n parseClassName\n });\n }\n return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isArbitraryVariant = modifier[0] === '[';\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n const colors = fromTheme('colors');\n const spacing = fromTheme('spacing');\n const blur = fromTheme('blur');\n const brightness = fromTheme('brightness');\n const borderColor = fromTheme('borderColor');\n const borderRadius = fromTheme('borderRadius');\n const borderSpacing = fromTheme('borderSpacing');\n const borderWidth = fromTheme('borderWidth');\n const contrast = fromTheme('contrast');\n const grayscale = fromTheme('grayscale');\n const hueRotate = fromTheme('hueRotate');\n const invert = fromTheme('invert');\n const gap = fromTheme('gap');\n const gradientColorStops = fromTheme('gradientColorStops');\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n const inset = fromTheme('inset');\n const margin = fromTheme('margin');\n const opacity = fromTheme('opacity');\n const padding = fromTheme('padding');\n const saturate = fromTheme('saturate');\n const scale = fromTheme('scale');\n const sepia = fromTheme('sepia');\n const skew = fromTheme('skew');\n const space = fromTheme('space');\n const translate = fromTheme('translate');\n const getOverscroll = () => ['auto', 'contain', 'none'];\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary()\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', 'video', isArbitraryValue]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isTshirtSize]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': getBreaks()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': getBreaks()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [...getPositions(), isArbitraryValue]\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: getOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': getOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': getOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: getOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': getOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': getOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: [inset]\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': [inset]\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': [inset]\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: [inset]\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: [inset]\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: [inset]\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: [inset]\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: [inset]\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: [inset]\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: ['auto', isInteger, isArbitraryValue]\n }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: getSpacingWithAutoAndArbitrary()\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['wrap', 'wrap-reverse', 'nowrap']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: getZeroAndEmpty()\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: getZeroAndEmpty()\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': [isAny]\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: ['auto', {\n span: ['full', isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': [isAny]\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: ['auto', {\n span: [isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: [gap]\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': [gap]\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': [gap]\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: ['normal', ...getAlign()]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': ['start', 'end', 'center', 'stretch']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...getAlign(), 'baseline']\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': [...getAlign(), 'baseline']\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: [padding]\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: [padding]\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: [padding]\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: [padding]\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: [padding]\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: [padding]\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: [padding]\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: [padding]\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: [padding]\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: [margin]\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: [margin]\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: [margin]\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: [margin]\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: [margin]\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: [margin]\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: [margin]\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: [margin]\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: [margin]\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{\n 'space-x': [space]\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{\n 'space-y': [space]\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n screen: [isTshirtSize]\n }, isTshirtSize]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', isTshirtSize, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isAny]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryValue]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['none', 'disc', 'decimal', isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: [colors]\n }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{\n 'placeholder-opacity': [opacity]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: [colors]\n }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{\n 'text-opacity': [opacity]\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...getLineStyles(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': ['auto', isLength, isArbitraryValue]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: [colors]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: getSpacingWithArbitrary()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryValue]\n }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{\n 'bg-opacity': [opacity]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [...getPositions(), isArbitraryPosition]\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'round', 'space']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: [colors]\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: [gradientColorStops]\n }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: [borderRadius]\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': [borderRadius]\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': [borderRadius]\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': [borderRadius]\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': [borderRadius]\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': [borderRadius]\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': [borderRadius]\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': [borderRadius]\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': [borderRadius]\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': [borderRadius]\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': [borderRadius]\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': [borderRadius]\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': [borderRadius]\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': [borderRadius]\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': [borderRadius]\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: [borderWidth]\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': [borderWidth]\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': [borderWidth]\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': [borderWidth]\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': [borderWidth]\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': [borderWidth]\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': [borderWidth]\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': [borderWidth]\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': [borderWidth]\n }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{\n 'border-opacity': [opacity]\n }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...getLineStyles(), 'hidden']\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{\n 'divide-x': [borderWidth]\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{\n 'divide-y': [borderWidth]\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{\n 'divide-opacity': [opacity]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{\n divide: getLineStyles()\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: [borderColor]\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': [borderColor]\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': [borderColor]\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': [borderColor]\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': [borderColor]\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': [borderColor]\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': [borderColor]\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': [borderColor]\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': [borderColor]\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: [borderColor]\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: ['', ...getLineStyles()]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isLength, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: [isLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [colors]\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{\n ring: getLengthWithEmptyAndArbitrary()\n }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{\n ring: [colors]\n }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{\n 'ring-opacity': [opacity]\n }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{\n 'ring-offset': [isLength, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{\n 'ring-offset': [colors]\n }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{\n shadow: [isAny]\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [opacity]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': getBlendModes()\n }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: ['', 'none']\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: [blur]\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [brightness]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [contrast]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [grayscale]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [hueRotate]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [invert]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [saturate]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [sepia]\n }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': ['', 'none']\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': [blur]\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [brightness]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [contrast]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': [grayscale]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [hueRotate]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': [invert]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [opacity]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [saturate]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': [sepia]\n }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': [borderSpacing]\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': [borderSpacing]\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': [borderSpacing]\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: getNumberAndArbitrary()\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: getNumberAndArbitrary()\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: ['', 'gpu', 'none']\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: [scale]\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': [scale]\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': [scale]\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: [isInteger, isArbitraryValue]\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': [translate]\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': [translate]\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': [skew]\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': [skew]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n }],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: ['auto', colors]\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: [colors]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['none', 'auto']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', 'y', 'x', '']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n }],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [colors, 'none']\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [colors, 'none']\n }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n }\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'separator', separator);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n for (const configKey in override) {\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\n }\n for (const key in extend) {\n mergeConfigProperties(baseConfig[key], extend[key]);\n }\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n }\n }\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } 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 { 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-full text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring 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-9 px-4 py-2\",\n sm: \"h-8 rounded-full px-3 text-xs\",\n lg: \"h-10 rounded-full px-8\",\n icon: \"h-9 w-9\",\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 * 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-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors 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-1 focus-visible:ring-ring 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 TooltipPrimitive from \"@radix-ui/react-tooltip\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst TooltipProvider = TooltipPrimitive.Provider;\n\nconst Tooltip = TooltipPrimitive.Root;\n\nconst TooltipTrigger = TooltipPrimitive.Trigger;\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md bg-popover px-3 py-1.5 text-xs text-popover-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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 origin-[--radix-tooltip-content-transform-origin]\",\n className,\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\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-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring 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-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-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 origin-[--radix-select-content-transform-origin]\",\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(\"px-2 py-1.5 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-2 pr-8 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 right-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 <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","\"use client\";\n\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className,\n )}\n {...props}\n />\n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className,\n )}\n {...props}\n />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className,\n )}\n {...props}\n />\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className,\n )}\n {...props}\n />\n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n);\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"grid place-content-center peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"grid place-content-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","// String utility functions\n\n/**\n * Convert a string to snake_case format\n * Removes special characters and replaces spaces with underscores\n *\n * @example\n * toSnakeCase(\"User Name\") // \"user_name\"\n * toSnakeCase(\"First Name!\") // \"first_name\"\n */\nexport const toSnakeCase = (str: string): string => {\n return str\n .trim()\n .toLowerCase()\n .replace(/[^\\w\\s]/g, \"\") // Remove special characters\n .replace(/\\s+/g, \"_\"); // Replace spaces with underscores\n};\n","// Custom hook for managing property editing state\nimport type { PropertyData } from \"@/types/schema\";\nimport { toSnakeCase } from \"@/lib/string-utils\";\n\nexport interface UsePropertyEditorReturn {\n handleTitleChange: (title: string) => void;\n handleTitleBlur: () => void;\n handleKeyChange: (key: string) => void;\n handleFieldChange: (field: keyof PropertyData, value: any) => void;\n handleConstraintChange: (field: string, value: any) => void;\n}\n\nexport const usePropertyEditor = (\n property: PropertyData,\n onUpdate: (property: PropertyData) => void,\n isNewProperty: boolean = false,\n keyEditable: boolean = false,\n): UsePropertyEditorReturn => {\n const handleFieldChange = (field: keyof PropertyData, value: any) => {\n onUpdate({ ...property, [field]: value });\n };\n\n const handleTitleChange = (title: string) => {\n handleFieldChange(\"title\", title);\n };\n\n const handleTitleBlur = () => {\n // Auto-generate key from title on blur only for new properties\n // or if key hasn't been manually edited\n if (isNewProperty && property.title) {\n const autoKey = toSnakeCase(property.title);\n handleFieldChange(\"key\", autoKey);\n }\n };\n\n const handleKeyChange = (key: string) => {\n // Allow key changes for new properties OR if keyEditable is true\n if (isNewProperty || keyEditable) {\n handleFieldChange(\"key\", key);\n }\n };\n\n const handleConstraintChange = (field: string, value: any) => {\n onUpdate({\n ...property,\n [field]: value,\n });\n };\n\n return {\n handleTitleChange,\n handleTitleBlur,\n handleKeyChange,\n handleFieldChange,\n handleConstraintChange,\n };\n};\n","import { createContext, useContext } from \"react\";\nimport type { PropertyType } from \"@/types/schema\";\n\nexport type TypeLabels = Partial<Record<PropertyType, string>>;\n\nconst defaultTypeLabels: Record<PropertyType, string> = {\n string: \"String\",\n number: \"Number\",\n integer: \"Integer\",\n boolean: \"Boolean\",\n object: \"Object\",\n array: \"Array\",\n null: \"Null\",\n file: \"File\",\n};\n\ninterface TypeLabelsContextValue {\n getTypeLabel: (type: PropertyType) => string;\n typeLabels: Record<PropertyType, string>;\n}\n\nconst TypeLabelsContext = createContext<TypeLabelsContextValue>({\n getTypeLabel: (type) => defaultTypeLabels[type],\n typeLabels: defaultTypeLabels,\n});\n\nexport function TypeLabelsProvider({\n children,\n customLabels = {},\n}: {\n children: React.ReactNode;\n customLabels?: TypeLabels;\n}) {\n const typeLabels = { ...defaultTypeLabels, ...customLabels };\n\n const getTypeLabel = (type: PropertyType) => {\n return typeLabels[type] || type;\n };\n\n return (\n <TypeLabelsContext.Provider value={{ getTypeLabel, typeLabels }}>\n {children}\n </TypeLabelsContext.Provider>\n );\n}\n\nexport function useTypeLabels() {\n return useContext(TypeLabelsContext);\n}\n","import {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n} from \"@/components/ui/dialog\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport type { PropertyData, PropertyType } from \"@/types/schema\";\nimport { usePropertyEditor } from \"@/hooks/usePropertyEditor\";\nimport { useTypeLabels } from \"@/contexts/TypeLabelsContext\";\nimport { useState, useEffect } from \"react\";\n\ninterface PropertyEditDialogProps {\n property: PropertyData;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onUpdate: (property: PropertyData) => void;\n isArrayItem?: boolean;\n isNewProperty?: boolean;\n propertyLabel?: { singular: string; plural: string };\n showRegex?: boolean;\n keyEditable?: boolean;\n}\n\nexport default function PropertyEditDialog({\n property,\n open,\n onOpenChange,\n onUpdate,\n isArrayItem = false,\n isNewProperty = false,\n propertyLabel = { singular: \"Property\", plural: \"Properties\" },\n showRegex = false,\n keyEditable = false,\n}: PropertyEditDialogProps) {\n const { typeLabels } = useTypeLabels();\n\n // Local state for editing\n const [localProperty, setLocalProperty] = useState<PropertyData>(property);\n\n // Reset local state when property or open changes\n useEffect(() => {\n if (open) {\n setLocalProperty(property);\n }\n }, [property, open]);\n\n const {\n handleTitleChange,\n handleTitleBlur,\n handleKeyChange,\n handleFieldChange,\n handleConstraintChange,\n } = usePropertyEditor(localProperty, setLocalProperty, isNewProperty, keyEditable);\n\n const handleSave = () => {\n if (localProperty.title?.trim()) {\n onUpdate(localProperty);\n onOpenChange(false);\n }\n };\n\n const handleCancel = () => {\n setLocalProperty(property); // Reset to original\n onOpenChange(false);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className=\"max-w-2xl max-h-[80vh] flex flex-col gap-0 p-0\"\n data-testid=\"dialog-edit-property\"\n >\n <DialogHeader className=\"px-6 pt-6 pb-4 shrink-0\">\n <DialogTitle>\n {isNewProperty\n ? `Add ${propertyLabel.singular}`\n : `Edit ${propertyLabel.singular}`}\n </DialogTitle>\n </DialogHeader>\n <div className=\"space-y-6 px-6 pb-4 overflow-y-auto flex-1 min-h-0\">\n {/* 1. Property Type */}\n <div className=\"space-y-2\">\n <Label className=\"flex items-center gap-1.5\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-red-500\"></span>\n Type\n </Label>\n <Select\n value={localProperty.type}\n onValueChange={(value) => handleFieldChange(\"type\", value)}\n data-testid=\"select-type-dialog\"\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"string\">{typeLabels.string}</SelectItem>\n <SelectItem value=\"number\">{typeLabels.number}</SelectItem>\n <SelectItem value=\"integer\">{typeLabels.integer}</SelectItem>\n <SelectItem value=\"boolean\">{typeLabels.boolean}</SelectItem>\n <SelectItem value=\"object\">{typeLabels.object}</SelectItem>\n <SelectItem value=\"array\">{typeLabels.array}</SelectItem>\n <SelectItem value=\"file\">{typeLabels.file}</SelectItem>\n <SelectItem value=\"null\">{typeLabels.null}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* 2. Property Title */}\n <div className=\"space-y-2\">\n <Label className=\"flex items-center gap-1.5\">\n <span className=\"w-1.5 h-1.5 rounded-full bg-red-500\"></span>\n Title\n </Label>\n <Input\n value={localProperty.title || \"\"}\n onChange={(e) => handleTitleChange(e.target.value)}\n onBlur={handleTitleBlur}\n placeholder=\"Property Title\"\n data-testid=\"input-title-dialog\"\n required\n />\n {!isNewProperty && localProperty.key && (\n <p className=\"text-xs text-muted-foreground font-mono\">\n Key: {localProperty.key}\n </p>\n )}\n </div>\n\n {/* 3. Property Key - Shown for new properties or when keyEditable is true */}\n {(isNewProperty || keyEditable) && (\n <div className=\"space-y-2\">\n <Label>Key</Label>\n <Input\n value={localProperty.key}\n onChange={(e) => handleKeyChange(e.target.value)}\n placeholder=\"property_key\"\n data-testid=\"input-key-dialog\"\n />\n {!isNewProperty && (\n <p className=\"text-xs text-yellow-600 dark:text-yellow-500\">\n ⚠️ Changing the key may break existing references to this property\n </p>\n )}\n </div>\n )}\n\n {/* 4. Description */}\n <div className=\"space-y-2\">\n <Label>Description</Label>\n <Textarea\n placeholder=\"Optional description\"\n value={localProperty.description || \"\"}\n onChange={(e) => handleFieldChange(\"description\", e.target.value)}\n rows={2}\n data-testid=\"input-edit-description\"\n />\n </div>\n\n {/* Recursive array item editing (inline, not modal) */}\n {localProperty.type === \"array\" && (\n <div className=\"space-y-2 border-l-2 border-border pl-4 mt-2\">\n <Label className=\"font-semibold text-xs text-muted-foreground\">\n {typeLabels.array} Items\n </Label>\n {localProperty.items ? (\n <div className=\"bg-muted/40 p-2 rounded\">\n {/* Inline editing for array item schema */}\n <div className=\"space-y-2\">\n <Label>Item Type</Label>\n <Select\n value={localProperty.items.type}\n onValueChange={(value) =>\n setLocalProperty({\n ...localProperty,\n items: {\n ...localProperty.items!,\n type: value as PropertyType,\n },\n })\n }\n >\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"string\">\n {typeLabels.string}\n </SelectItem>\n <SelectItem value=\"number\">\n {typeLabels.number}\n </SelectItem>\n <SelectItem value=\"integer\">\n {typeLabels.integer}\n </SelectItem>\n <SelectItem value=\"boolean\">\n {typeLabels.boolean}\n </SelectItem>\n <SelectItem value=\"object\">\n {typeLabels.object}\n </SelectItem>\n <SelectItem value=\"array\">\n {typeLabels.array}\n </SelectItem>\n <SelectItem value=\"file\">{typeLabels.file}</SelectItem>\n <SelectItem value=\"null\">{typeLabels.null}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <Label>Item Title</Label>\n <Input\n value={localProperty.items.title || \"\"}\n onChange={(e) =>\n setLocalProperty({\n ...localProperty,\n items: {\n ...localProperty.items!,\n title: e.target.value,\n },\n })\n }\n placeholder=\"Item Title\"\n />\n </div>\n {/* Item key is fixed and not editable */}\n {/* You can add more inline controls for constraints, etc. */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"mt-2\"\n onClick={() =>\n setLocalProperty({ ...localProperty, items: undefined })\n }\n >\n Remove {typeLabels.array} Item Schema\n </Button>\n </div>\n ) : (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n // Default to string type for new item\n setLocalProperty({\n ...localProperty,\n items: {\n id: Date.now().toString() + Math.random(),\n key: \"item\",\n type: \"string\",\n required: false,\n },\n });\n }}\n >\n Add {typeLabels.array} Item Schema\n </Button>\n )}\n </div>\n )}\n\n {!isArrayItem && (\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"prop-required\"\n checked={localProperty.required}\n onCheckedChange={(checked) =>\n handleFieldChange(\"required\", checked)\n }\n data-testid=\"checkbox-edit-required\"\n />\n <Label htmlFor=\"prop-required\" className=\"cursor-pointer\">\n Required field\n </Label>\n </div>\n )}\n\n {localProperty.type === \"string\" && (\n <details className=\"border rounded-md\">\n <summary className=\"p-4 cursor-pointer hover:bg-accent/50 transition-colors\">\n <h4 className=\"text-sm font-medium inline\">\n {typeLabels.string} Constraints\n </h4>\n </summary>\n <div className=\"space-y-4 p-4 pt-0\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"min-length\">Minimum Length</Label>\n <Input\n id=\"min-length\"\n type=\"number\"\n placeholder=\"0\"\n value={localProperty.minLength || \"\"}\n onChange={(e) =>\n handleConstraintChange(\n \"minLength\",\n e.target.value ? parseInt(e.target.value) : undefined,\n )\n }\n data-testid=\"input-edit-minlength\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"max-length\">Maximum Length</Label>\n <Input\n id=\"max-length\"\n type=\"number\"\n placeholder=\"∞\"\n value={localProperty.maxLength || \"\"}\n onChange={(e) =>\n handleConstraintChange(\n \"maxLength\",\n e.target.value ? parseInt(e.target.value) : undefined,\n )\n }\n data-testid=\"input-edit-maxlength\"\n />\n </div>\n </div>\n {showRegex && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"pattern\">Pattern (regex)</Label>\n <Input\n id=\"pattern\"\n placeholder=\"^[a-z]+$\"\n value={localProperty.pattern || \"\"}\n onChange={(e) =>\n handleConstraintChange(\"pattern\", e.target.value)\n }\n className=\"font-mono text-sm\"\n data-testid=\"input-edit-pattern\"\n />\n </div>\n )}\n <div className=\"space-y-2\">\n <Label>Enum Values</Label>\n <div className=\"space-y-2\">\n {[...(localProperty.enum || []), \"\"].map((value, index) => (\n <Input\n key={index}\n placeholder={\n index === (localProperty.enum?.length || 0)\n ? \"Add new value...\"\n : \"Enum value\"\n }\n value={value}\n onChange={(e) => {\n const newValue = e.target.value;\n const currentEnum = localProperty.enum || [];\n\n if (index === currentEnum.length) {\n // Adding new value to the placeholder input\n if (newValue.trim()) {\n handleConstraintChange(\"enum\", [\n ...currentEnum,\n newValue.trim(),\n ]);\n }\n } else {\n // Updating existing value\n if (newValue.trim()) {\n const newEnum = [...currentEnum];\n newEnum[index] = newValue.trim();\n handleConstraintChange(\"enum\", newEnum);\n } else {\n // Removing empty value\n const newEnum = currentEnum.filter(\n (_, i) => i !== index,\n );\n handleConstraintChange(\n \"enum\",\n newEnum.length > 0 ? newEnum : undefined,\n );\n }\n }\n }}\n data-testid={`input-edit-enum-${index}`}\n />\n ))}\n </div>\n <p className=\"text-xs text-muted-foreground\">\n Enter allowed values (empty fields will be removed)\n </p>\n </div>\n </div>\n </details>\n )}\n\n {(localProperty.type === \"number\" ||\n localProperty.type === \"integer\") && (\n <details className=\"border rounded-md\">\n <summary className=\"p-4 cursor-pointer hover:bg-accent/50 transition-colors\">\n <h4 className=\"text-sm font-medium inline\">\n Numeric Constraints\n </h4>\n </summary>\n <div className=\"space-y-4 p-4 pt-0\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"minimum\">Minimum Value</Label>\n <Input\n id=\"minimum\"\n type=\"number\"\n placeholder=\"-∞\"\n value={localProperty.minimum ?? \"\"}\n onChange={(e) =>\n handleConstraintChange(\n \"minimum\",\n e.target.value\n ? parseFloat(e.target.value)\n : undefined,\n )\n }\n data-testid=\"input-edit-minimum\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"maximum\">Maximum Value</Label>\n <Input\n id=\"maximum\"\n type=\"number\"\n placeholder=\"∞\"\n value={localProperty.maximum ?? \"\"}\n onChange={(e) =>\n handleConstraintChange(\n \"maximum\",\n e.target.value\n ? parseFloat(e.target.value)\n : undefined,\n )\n }\n data-testid=\"input-edit-maximum\"\n />\n </div>\n </div>\n </div>\n </details>\n )}\n\n {localProperty.type === \"array\" && (\n <details className=\"border rounded-md\">\n <summary className=\"p-4 cursor-pointer hover:bg-accent/50 transition-colors\">\n <h4 className=\"text-sm font-medium inline\">\n {typeLabels.array} Constraints\n </h4>\n </summary>\n <div className=\"space-y-4 p-4 pt-0\">\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"min-items\">Minimum Items</Label>\n <Input\n id=\"min-items\"\n type=\"number\"\n placeholder=\"0\"\n value={localProperty.minItems || \"\"}\n onChange={(e) =>\n handleConstraintChange(\n \"minItems\",\n e.target.value ? parseInt(e.target.value) : undefined,\n )\n }\n data-testid=\"input-edit-minitems\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"max-items\">Maximum Items</Label>\n <Input\n id=\"max-items\"\n type=\"number\"\n placeholder=\"∞\"\n value={localProperty.maxItems || \"\"}\n onChange={(e) =>\n handleConstraintChange(\n \"maxItems\",\n e.target.value ? parseInt(e.target.value) : undefined,\n )\n }\n data-testid=\"input-edit-maxitems\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Checkbox\n id=\"unique-items\"\n checked={localProperty.uniqueItems || false}\n onCheckedChange={(checked) =>\n handleConstraintChange(\"uniqueItems\", checked)\n }\n data-testid=\"checkbox-edit-unique\"\n />\n <Label htmlFor=\"unique-items\" className=\"cursor-pointer\">\n All items must be unique\n </Label>\n </div>\n </div>\n </details>\n )}\n </div>\n <DialogFooter className=\"px-6 py-4 border-t bg-background shrink-0\">\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n data-testid=\"button-cancel\"\n >\n Cancel\n </Button>\n <Button\n onClick={handleSave}\n data-testid=\"button-save\"\n disabled={!localProperty.title?.trim()}\n >\n Save Changes\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import { useState, useEffect } from \"react\";\n\nexport interface UseInlineEditorOptions {\n /**\n * Whether to allow empty values. If false, reverts to original value on blur when empty.\n * @default false\n */\n allowEmpty?: boolean;\n\n /**\n * Callback when editing starts\n */\n onEditStart?: () => void;\n\n /**\n * Callback when editing is cancelled\n */\n onEditCancel?: () => void;\n}\n\nexport interface UseInlineEditorReturn {\n /**\n * Whether the field is currently being edited\n */\n isEditing: boolean;\n\n /**\n * The current edited value\n */\n value: string;\n\n /**\n * Start editing mode\n */\n startEdit: () => void;\n\n /**\n * Handle value changes\n */\n handleChange: (newValue: string) => void;\n\n /**\n * Handle blur event - saves or reverts changes\n */\n handleBlur: () => void;\n\n /**\n * Handle keyboard events (Enter to save, Escape to cancel)\n */\n handleKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n}\n\n/**\n * Hook for managing inline editing state and behavior.\n * Handles common patterns like Enter/Escape keys, blur to save, and syncing with external value changes.\n *\n * @param initialValue - The initial/current value from props\n * @param onSave - Callback when value should be saved (on blur or Enter)\n * @param options - Optional configuration\n *\n * @example\n * ```tsx\n * const titleEditor = useInlineEditor(\n * property.title || \"\",\n * (newValue) => onUpdate({ ...property, title: newValue }),\n * { allowEmpty: false }\n * );\n *\n * {titleEditor.isEditing ? (\n * <Input\n * value={titleEditor.value}\n * onChange={(e) => titleEditor.handleChange(e.target.value)}\n * onBlur={titleEditor.handleBlur}\n * onKeyDown={titleEditor.handleKeyDown}\n * autoFocus\n * />\n * ) : (\n * <span onClick={titleEditor.startEdit}>{property.title}</span>\n * )}\n * ```\n */\nexport function useInlineEditor(\n initialValue: string,\n onSave: (value: string) => void,\n options: UseInlineEditorOptions = {},\n): UseInlineEditorReturn {\n const { allowEmpty = false, onEditStart, onEditCancel } = options;\n\n const [isEditing, setIsEditing] = useState(false);\n const [value, setValue] = useState(initialValue);\n\n // Keep value in sync with initialValue when not editing\n useEffect(() => {\n if (!isEditing) {\n setValue(initialValue);\n }\n }, [initialValue, isEditing]);\n\n const startEdit = () => {\n setValue(initialValue);\n setIsEditing(true);\n onEditStart?.();\n };\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n };\n\n const handleBlur = () => {\n const trimmedValue = value.trim();\n\n // Don't allow empty if not permitted - revert to original\n if (!allowEmpty && !trimmedValue) {\n setValue(initialValue);\n setIsEditing(false);\n return;\n }\n\n // Only save if value changed\n if (trimmedValue !== initialValue) {\n onSave(trimmedValue);\n }\n\n setIsEditing(false);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n handleBlur();\n } else if (e.key === \"Escape\") {\n setValue(initialValue);\n setIsEditing(false);\n onEditCancel?.();\n }\n };\n\n return {\n isEditing,\n value,\n startEdit,\n handleChange,\n handleBlur,\n handleKeyDown,\n };\n}\n","import { useState } from \"react\";\nimport type { PropertyData, PropertyType } from \"@/types/schema\";\n\nexport interface UseTypeSelectorReturn {\n /**\n * Whether the type selector is currently open\n */\n isChangingType: boolean;\n\n /**\n * Set whether the type selector is open\n */\n setIsChangingType: (isOpen: boolean) => void;\n\n /**\n * Handle type change with automatic cleanup of type-specific constraints\n */\n handleTypeChange: (newType: PropertyType) => void;\n\n /**\n * List of available types that can be selected\n */\n availableTypes: PropertyType[];\n}\n\n/**\n * Hook for managing property type selection with automatic constraint cleanup.\n * When changing types, automatically removes constraints that don't apply to the new type.\n *\n * @param property - The property being edited\n * @param onUpdate - Callback to update the property\n *\n * @example\n * ```tsx\n * const typeSelector = useTypeSelector(property, onUpdate);\n *\n * {typeSelector.isChangingType ? (\n * <Select\n * value={property.type}\n * onValueChange={typeSelector.handleTypeChange}\n * open={typeSelector.isChangingType}\n * onOpenChange={typeSelector.setIsChangingType}\n * >\n * {typeSelector.availableTypes.map(type => (\n * <SelectItem key={type} value={type}>{type}</SelectItem>\n * ))}\n * </Select>\n * ) : (\n * <button onClick={() => typeSelector.setIsChangingType(true)}>\n * {property.type}\n * </button>\n * )}\n * ```\n */\nexport function useTypeSelector(\n property: PropertyData,\n onUpdate: (property: PropertyData) => void,\n): UseTypeSelectorReturn {\n const [isChangingType, setIsChangingType] = useState(false);\n\n const availableTypes: PropertyType[] = [\n \"string\",\n \"number\",\n \"integer\",\n \"boolean\",\n \"object\",\n \"array\",\n \"file\",\n ];\n\n const handleTypeChange = (newType: PropertyType) => {\n const updated: PropertyData = { ...property, type: newType };\n\n // Clear type-specific fields when changing type\n if (newType !== \"string\") {\n delete updated.minLength;\n delete updated.maxLength;\n delete updated.pattern;\n delete updated.enum;\n }\n if (newType !== \"number\" && newType !== \"integer\") {\n delete updated.minimum;\n delete updated.maximum;\n }\n if (newType !== \"array\") {\n delete updated.minItems;\n delete updated.maxItems;\n delete updated.uniqueItems;\n delete updated.items;\n }\n if (newType !== \"object\") {\n delete updated.children;\n }\n\n onUpdate(updated);\n setIsChangingType(false);\n };\n\n return {\n isChangingType,\n setIsChangingType,\n handleTypeChange,\n availableTypes,\n };\n}\n","// ID generation utilities\n\n/**\n * Generate a unique ID for properties\n * Uses timestamp and random number for uniqueness\n *\n * @example\n * generatePropertyId() // \"1699632000000-0.123456789\"\n */\nexport const generatePropertyId = (): string => {\n return `${Date.now()}-${Math.random()}`;\n};\n","import { useState } from \"react\";\n\nexport interface UseDialogManagerReturn<T> {\n /**\n * Whether the dialog is currently open\n */\n isOpen: boolean;\n\n /**\n * The data associated with the dialog (e.g., the item being edited/created)\n */\n data: T | null;\n\n /**\n * Open the dialog with optional data\n */\n open: (data?: T) => void;\n\n /**\n * Close the dialog without saving\n */\n close: () => void;\n\n /**\n * Confirm and close the dialog (typically calls the onConfirm callback)\n */\n confirm: (data: T) => void;\n\n /**\n * Set the dialog open state directly\n */\n setIsOpen: (isOpen: boolean) => void;\n}\n\nexport interface UseDialogManagerOptions<T> {\n /**\n * Callback when dialog is confirmed/saved\n */\n onConfirm?: (data: T) => void;\n\n /**\n * Callback when dialog is cancelled/closed without saving\n */\n onCancel?: () => void;\n\n /**\n * Factory function to create initial data when opening dialog\n */\n createInitialData?: () => T;\n}\n\n/**\n * Generic hook for managing dialog state with associated data.\n * Useful for dialogs that create/edit items with temporary state.\n *\n * @param options - Configuration options\n *\n * @example\n * ```tsx\n * // For adding a new property\n * const addDialog = useDialogManager<PropertyData>({\n * createInitialData: () => ({\n * id: generateId(),\n * key: \"\",\n * type: \"string\",\n * required: false\n * }),\n * onConfirm: (property) => {\n * updateProperty(property.id, property);\n * }\n * });\n *\n * // Usage in JSX\n * <Button onClick={() => addDialog.open()}>Add Property</Button>\n *\n * {addDialog.isOpen && addDialog.data && (\n * <PropertyEditDialog\n * property={addDialog.data}\n * open={addDialog.isOpen}\n * onOpenChange={addDialog.setIsOpen}\n * onUpdate={addDialog.confirm}\n * />\n * )}\n * ```\n */\nexport function useDialogManager<T>(\n options: UseDialogManagerOptions<T> = {},\n): UseDialogManagerReturn<T> {\n const { onConfirm, onCancel, createInitialData } = options;\n\n const [isOpen, setIsOpen] = useState(false);\n const [data, setData] = useState<T | null>(null);\n\n const open = (initialData?: T) => {\n const dataToUse =\n initialData ?? (createInitialData ? createInitialData() : null);\n setData(dataToUse);\n setIsOpen(true);\n };\n\n const close = () => {\n setIsOpen(false);\n setData(null);\n onCancel?.();\n };\n\n const confirm = (confirmedData: T) => {\n onConfirm?.(confirmedData);\n setIsOpen(false);\n setData(null);\n };\n\n const handleSetIsOpen = (newIsOpen: boolean) => {\n if (!newIsOpen) {\n close();\n } else {\n setIsOpen(true);\n }\n };\n\n return {\n isOpen,\n data,\n open,\n close,\n confirm,\n setIsOpen: handleSetIsOpen,\n };\n}\n","import type { PropertyData } from \"@/types/schema\";\nimport { generatePropertyId } from \"@/lib/id-generator\";\nimport { useDialogManager } from \"./useDialogManager\";\n\nexport interface UseChildManagerReturn {\n /**\n * Add a new child property (opens dialog)\n */\n addChild: () => void;\n\n /**\n * Update an existing child property\n */\n updateChild: (childId: string, updated: PropertyData) => void;\n\n /**\n * Delete a child property\n */\n deleteChild: (childId: string) => void;\n\n /**\n * Dialog manager for adding new children\n */\n addChildDialog: {\n isOpen: boolean;\n data: PropertyData | null;\n setIsOpen: (isOpen: boolean) => void;\n confirm: (data: PropertyData) => void;\n };\n}\n\n/**\n * Hook for managing child properties (nested properties within an object).\n * Handles adding, updating, and deleting children with dialog state management.\n *\n * @param property - The parent property that contains children\n * @param onUpdate - Callback to update the parent property\n *\n * @example\n * ```tsx\n * const childManager = useChildManager(property, onUpdate);\n *\n * // Add child button\n * <Button onClick={childManager.addChild}>Add Child</Button>\n *\n * // Render children\n * {property.children?.map((child) => (\n * <PropertyDocument\n * key={child.id}\n * property={child}\n * onUpdate={(updated) => childManager.updateChild(child.id, updated)}\n * onDelete={() => childManager.deleteChild(child.id)}\n * />\n * ))}\n *\n * // Add child dialog\n * {childManager.addChildDialog.isOpen && childManager.addChildDialog.data && (\n * <PropertyEditDialog\n * property={childManager.addChildDialog.data}\n * open={childManager.addChildDialog.isOpen}\n * onOpenChange={childManager.addChildDialog.setIsOpen}\n * onUpdate={childManager.addChildDialog.confirm}\n * />\n * )}\n * ```\n */\nexport function useChildManager(\n property: PropertyData,\n onUpdate: (property: PropertyData) => void,\n): UseChildManagerReturn {\n const addChildDialog = useDialogManager<PropertyData>({\n createInitialData: () => ({\n id: generatePropertyId(),\n key: \"\",\n type: \"string\",\n required: false,\n }),\n onConfirm: (child) => {\n onUpdate({\n ...property,\n children: [...(property.children || []), child],\n });\n },\n });\n\n const updateChild = (childId: string, updated: PropertyData) => {\n const newChildren = property.children!.map((c) =>\n c.id === childId ? updated : c,\n );\n onUpdate({ ...property, children: newChildren });\n };\n\n const deleteChild = (childId: string) => {\n const newChildren = property.children!.filter((c) => c.id !== childId);\n onUpdate({ ...property, children: newChildren });\n };\n\n return {\n addChild: () => addChildDialog.open(),\n updateChild,\n deleteChild,\n addChildDialog: {\n isOpen: addChildDialog.isOpen,\n data: addChildDialog.data,\n setIsOpen: addChildDialog.setIsOpen,\n confirm: addChildDialog.confirm,\n },\n };\n}\n","import { useState } from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport {\n Pencil,\n Trash2,\n Plus,\n Type,\n List,\n Hash,\n Braces,\n CheckSquare,\n FileText,\n} from \"lucide-react\";\nimport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n} from \"@/components/ui/tooltip\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport PropertyEditDialog from \"./PropertyEditDialog\";\nimport type { PropertyData, PropertyType } from \"@/types/schema\";\nimport { useTypeLabels } from \"@/contexts/TypeLabelsContext\";\nimport { useInlineEditor } from \"@/hooks/useInlineEditor\";\nimport { useTypeSelector } from \"@/hooks/useTypeSelector\";\nimport { useChildManager } from \"@/hooks/useChildManager\";\nimport { useDialogManager } from \"@/hooks/useDialogManager\";\n\ninterface PropertyDocumentProps {\n property: PropertyData;\n onUpdate: (property: PropertyData) => void;\n onDelete: () => void;\n level?: number;\n isArrayItem?: boolean;\n showRegex?: boolean;\n keyEditable?: boolean;\n}\n\nexport default function PropertyDocument({\n property,\n onUpdate,\n onDelete,\n level = 1,\n isArrayItem = false,\n showRegex = false,\n keyEditable = false,\n}: PropertyDocumentProps) {\n const { getTypeLabel, typeLabels } = useTypeLabels();\n\n // Dialog for editing this property\n const editDialog = useDialogManager<PropertyData>();\n\n // Inline editing for title\n const titleEditor = useInlineEditor(\n property.title || property.key || \"\",\n (newValue) => onUpdate({ ...property, title: newValue }),\n { allowEmpty: false },\n );\n\n // Inline editing for description\n const descriptionEditor = useInlineEditor(\n property.description || \"\",\n (newValue) => onUpdate({ ...property, description: newValue || undefined }),\n { allowEmpty: true },\n );\n\n // Type selection with constraint cleanup\n const typeSelector = useTypeSelector(property, onUpdate);\n\n // Child property management\n const childManager = useChildManager(property, onUpdate);\n\n const HeadingTag = `h${Math.min(level, 6)}` as keyof JSX.IntrinsicElements;\n const canHaveChildren = property.type === \"object\";\n const hasChildren =\n canHaveChildren && property.children && property.children.length > 0;\n\n const headingClasses =\n {\n 1: \"text-lg font-semibold\",\n 2: \"text-base\",\n 3: \"text-base\",\n 4: \"text-base\",\n 5: \"text-sm\",\n 6: \"text-sm\",\n }[level] || \"text-sm\";\n\n return (\n <div className=\"group\">\n <div className=\"flex gap-4 items-center rounded-md -mx-2 px-2 py-1 transition-colors hover:bg-accent/50\">\n {/* Left side - Main content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start gap-3\">\n {!isArrayItem && (\n <button\n onClick={() =>\n onUpdate({ ...property, required: !property.required })\n }\n className=\"shrink-0 transition-all hover:scale-110 mt-0.5\"\n title={\n property.required\n ? \"Required field - click to make optional\"\n : \"Optional field - click to make required\"\n }\n >\n {property.required ? (\n <span className=\"block w-4 h-4 rounded-full bg-primary\"></span>\n ) : (\n <span className=\"block w-4 h-4 rounded-full border border-dashed border-gray-400\"></span>\n )}\n </button>\n )}\n\n {titleEditor.isEditing ? (\n <Input\n value={titleEditor.value}\n onChange={(e) => titleEditor.handleChange(e.target.value)}\n onBlur={titleEditor.handleBlur}\n onKeyDown={titleEditor.handleKeyDown}\n autoFocus\n className={headingClasses}\n placeholder=\"Enter title\"\n />\n ) : (\n <div className=\"flex gap-2 flex-wrap flex-1\">\n <div className=\"flex items-start gap-2\">\n <HeadingTag\n className={`${headingClasses} cursor-pointer hover:text-primary transition-colors leading-none`}\n onClick={titleEditor.startEdit}\n >\n {property.title || property.key || (\n <span className=\"text-muted-foreground italic\">\n unnamed\n </span>\n )}\n </HeadingTag>\n {typeSelector.isChangingType ? (\n <Select\n value={property.type}\n onValueChange={(value) =>\n typeSelector.handleTypeChange(value as PropertyType)\n }\n open={typeSelector.isChangingType}\n onOpenChange={typeSelector.setIsChangingType}\n >\n <SelectTrigger className=\"w-[140px] h-7\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {typeSelector.availableTypes.map((type) => (\n <SelectItem key={type} value={type}>\n {typeLabels[type]}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => typeSelector.setIsChangingType(true)}\n className=\"cursor-pointer hover:bg-accent rounded p-0.5 transition-colors\"\n >\n {property.type === \"string\" && (\n <Type className=\"w-5 h-5 text-muted-foreground\" />\n )}\n {property.type === \"number\" && (\n <Hash className=\"w-5 h-5 text-muted-foreground\" />\n )}\n {property.type === \"integer\" && (\n <Hash className=\"w-5 h-5 text-muted-foreground\" />\n )}\n {property.type === \"boolean\" && (\n <CheckSquare className=\"w-5 h-5 text-muted-foreground\" />\n )}\n {property.type === \"object\" && (\n <Braces className=\"w-5 h-5 text-muted-foreground\" />\n )}\n {property.type === \"array\" && (\n <List className=\"w-5 h-5 text-muted-foreground\" />\n )}\n {property.type === \"file\" && (\n <FileText className=\"w-5 h-5 text-muted-foreground\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {getTypeLabel(property.type)}\n {property.type === \"array\" && property.items\n ? ` of ${getTypeLabel(property.items.type)}`\n : \"\"}\n <div className=\"text-xs text-muted-foreground mt-1\">\n Click to change type\n </div>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n {property.type === \"object\" && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"opacity-0 group-hover:opacity-100 h-6 w-6\"\n onClick={childManager.addChild}\n data-testid={`button-add-child-${property.id}`}\n >\n <Plus className=\"!w-5 !h-5\" />\n </Button>\n )}\n </div>\n <div className=\"flex-1\">\n {descriptionEditor.isEditing ? (\n <Input\n value={descriptionEditor.value}\n onChange={(e) =>\n descriptionEditor.handleChange(e.target.value)\n }\n onBlur={descriptionEditor.handleBlur}\n onKeyDown={descriptionEditor.handleKeyDown}\n autoFocus\n className=\"text-sm flex-1\"\n placeholder=\"Enter description\"\n />\n ) : (\n <>\n {property.description ? (\n <p\n className=\"text-sm text-muted-foreground flex-1 min-w-[200px] cursor-pointer hover:text-foreground transition-colors\"\n data-testid={`text-description-${property.id}`}\n onClick={descriptionEditor.startEdit}\n >\n {property.description}\n </p>\n ) : (\n <p\n className=\"text-sm text-muted-foreground/50 flex-1 min-w-[200px] cursor-pointer hover:text-muted-foreground italic transition-colors\"\n onClick={descriptionEditor.startEdit}\n >\n Add description...\n </p>\n )}\n </>\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Right side - Action buttons */}\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity shrink-0\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n onClick={() => editDialog.open(property)}\n data-testid={`button-edit-${property.id}`}\n >\n <Pencil className=\"w-3 h-3\" />\n </Button>\n {/* Only show add-child button on right for non-object types (shouldn't happen, but for safety) */}\n {canHaveChildren && property.type !== \"object\" && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n onClick={childManager.addChild}\n data-testid={`button-add-child-${property.id}`}\n >\n <Plus className=\"w-3 h-3\" />\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7 text-muted-foreground hover:text-destructive\"\n onClick={onDelete}\n data-testid={`button-delete-${property.id}`}\n >\n <Trash2 className=\"w-3 h-3\" />\n </Button>\n </div>\n </div>\n\n {/* Render children for objects */}\n {hasChildren && (\n <div\n className={\n level === 1\n ? \"ml-6 mt-1 border-l-2 border-border pl-6\"\n : \"ml-4 mt-1 border-l border-border pl-4\"\n }\n >\n {property.children!.map((child) => (\n <PropertyDocument\n key={child.id}\n property={child}\n onUpdate={(updated) =>\n childManager.updateChild(child.id, updated)\n }\n onDelete={() => childManager.deleteChild(child.id)}\n level={level + 1}\n showRegex={showRegex}\n keyEditable={keyEditable}\n />\n ))}\n </div>\n )}\n\n {/* Render items for arrays recursively */}\n {property.type === \"array\" && property.items && (\n <div\n className={\n level === 1\n ? \"ml-6 mt-1 border-l-2 border-border pl-6\"\n : \"ml-4 mt-1 border-l border-border pl-4\"\n }\n >\n <div className=\"mb-2 text-xs text-muted-foreground font-semibold uppercase\">\n {getTypeLabel(\"array\")} Items\n </div>\n <PropertyDocument\n property={property.items}\n onUpdate={(updated) => onUpdate({ ...property, items: updated })}\n onDelete={() => onUpdate({ ...property, items: undefined })}\n level={level + 1}\n isArrayItem={true}\n showRegex={showRegex}\n keyEditable={keyEditable}\n />\n </div>\n )}\n\n <PropertyEditDialog\n property={editDialog.data || property}\n open={editDialog.isOpen}\n onOpenChange={editDialog.setIsOpen}\n onUpdate={(updated) => {\n onUpdate(updated);\n editDialog.close();\n }}\n isArrayItem={isArrayItem}\n isNewProperty={false}\n showRegex={showRegex}\n keyEditable={keyEditable}\n />\n\n {childManager.addChildDialog.isOpen &&\n childManager.addChildDialog.data && (\n <PropertyEditDialog\n property={childManager.addChildDialog.data}\n open={childManager.addChildDialog.isOpen}\n isNewProperty={true}\n onOpenChange={childManager.addChildDialog.setIsOpen}\n onUpdate={childManager.addChildDialog.confirm}\n showRegex={showRegex}\n keyEditable={keyEditable}\n />\n )}\n </div>\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-xl border bg-card text-card-foreground shadow\",\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 HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\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 {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n};\n","// File upload/download utilities\n\n/**\n * Open a file picker and read a JSON file\n */\nexport const importJsonFile = (): Promise<any> => {\n return new Promise((resolve, reject) => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \".json\";\n\n input.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (!file) {\n reject(new Error(\"No file selected\"));\n return;\n }\n\n const reader = new FileReader();\n reader.onload = (event) => {\n try {\n const data = JSON.parse(event.target?.result as string);\n resolve(data);\n } catch (err) {\n reject(new Error(\"Invalid JSON file\"));\n }\n };\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsText(file);\n };\n\n input.click();\n });\n};\n\n/**\n * Download a JSON object as a file\n */\nexport const downloadJsonFile = (\n data: any,\n filename: string = \"schema.json\",\n): void => {\n const jsonString = JSON.stringify(data, null, 2);\n const blob = new Blob([jsonString], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n};\n","import { Card } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport { Copy, Download, CheckCircle2 } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { downloadJsonFile } from \"@/lib/file-utils\";\n\ninterface JsonOutputProps {\n schema: any;\n}\n\nexport default function JsonOutput({ schema }: JsonOutputProps) {\n const [copied, setCopied] = useState(false);\n\n const jsonString = JSON.stringify(schema, null, 2);\n\n const handleCopy = async () => {\n await navigator.clipboard.writeText(jsonString);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n\n const handleDownload = () => {\n downloadJsonFile(schema, \"schema.json\");\n };\n\n return (\n <div className=\"h-full flex flex-col\">\n <div className=\"flex items-center justify-between p-4 border-b\">\n <h2 className=\"text-sm font-medium\">JSON Schema Output</h2>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleCopy}\n data-testid=\"button-copy\"\n >\n {copied ? (\n <CheckCircle2 className=\"w-4 h-4\" />\n ) : (\n <Copy className=\"w-4 h-4\" />\n )}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleDownload}\n data-testid=\"button-download\"\n >\n <Download className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n\n <div className=\"flex-1 overflow-auto\">\n <Card className=\"m-4 bg-muted/30\">\n <pre\n className=\"p-6 text-xs font-mono overflow-auto\"\n data-testid=\"text-json-output\"\n >\n <code>{jsonString}</code>\n </pre>\n </Card>\n </div>\n </div>\n );\n}\n","import { Card } from \"@/components/ui/card\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { ChevronDown, ChevronRight } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { useState } from \"react\";\n\ninterface SchemaMetadataProps {\n title: string;\n description: string;\n version: string;\n onUpdate: (field: string, value: string) => void;\n}\n\nexport default function SchemaMetadata({\n title,\n description,\n version,\n onUpdate,\n}: SchemaMetadataProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n return (\n <Card className=\"p-4\">\n <Button\n variant=\"ghost\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"w-full justify-between px-2 h-auto hover:bg-transparent\"\n data-testid=\"button-toggle-metadata\"\n >\n <h3 className=\"text-sm font-medium\">Schema Metadata</h3>\n {isExpanded ? (\n <ChevronDown className=\"w-4 h-4\" />\n ) : (\n <ChevronRight className=\"w-4 h-4\" />\n )}\n </Button>\n\n {isExpanded && (\n <div className=\"mt-4 space-y-4\">\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"schema-title\"\n className=\"text-xs text-muted-foreground\"\n >\n Title\n </Label>\n <Input\n id=\"schema-title\"\n placeholder=\"My Schema\"\n value={title}\n onChange={(e) => onUpdate(\"title\", e.target.value)}\n data-testid=\"input-title\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"schema-description\"\n className=\"text-xs text-muted-foreground\"\n >\n Description\n </Label>\n <Textarea\n id=\"schema-description\"\n placeholder=\"Describe your schema...\"\n value={description}\n onChange={(e) => onUpdate(\"description\", e.target.value)}\n className=\"resize-none\"\n rows={3}\n data-testid=\"input-schema-description\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"schema-version\"\n className=\"text-xs text-muted-foreground\"\n >\n Version\n </Label>\n {/* TODO: Fix version */}\n <Input\n id=\"schema-version\"\n placeholder=\"1.0.0\"\n value={version}\n onChange={(e) => onUpdate(\"version\", e.target.value)}\n data-testid=\"input-version\"\n />\n </div>\n </div>\n )}\n </Card>\n );\n}\n","// JSON Schema generation utilities\n\nimport type { PropertyData, SchemaMetadata } from \"@/types/schema\";\nimport { JSONSchema7 } from \"json-schema\";\n\n/**\n * Generate a JSON Schema from property definitions\n */\nexport const generateSchema = (\n properties: PropertyData[],\n metadata?: SchemaMetadata,\n includeMetadata: boolean = true,\n): JSONSchema7 => {\n const schema: JSONSchema7 = {\n type: \"object\",\n };\n\n // Add metadata if enabled and provided\n if (includeMetadata && metadata) {\n if (metadata.title) schema.title = metadata.title;\n if (metadata.description) schema.description = metadata.description;\n }\n\n // Build properties recursively\n const props = buildProperties(properties);\n if (Object.keys(props).length > 0) {\n schema.properties = props;\n }\n\n // Add required array at root level\n const required = properties\n .filter((p) => p.required && p.key)\n .map((p) => p.key);\n if (required.length > 0) {\n schema.required = required;\n }\n\n return schema;\n};\n\n/**\n * Recursively build property schemas\n */\nconst buildProperties = (\n props: PropertyData[],\n): Record<string, JSONSchema7> => {\n const result: Record<string, JSONSchema7> = {};\n\n props.forEach((prop) => {\n if (!prop.key) return;\n\n // Convert 'file' type to string with format = filename for JSON Schema compliance\n const schemaType = prop.type === \"file\" ? \"string\" : prop.type;\n const propSchema: JSONSchema7 = { type: schemaType };\n\n // Add common fields\n if (prop.title) propSchema.title = prop.title;\n if (prop.description) propSchema.description = prop.description;\n\n // For file type, add format to indicate special content\n if (prop.type === \"file\") {\n propSchema.format = \"filename\";\n }\n\n // String constraints\n if (prop.type === \"string\") {\n if (prop.minLength !== undefined) propSchema.minLength = prop.minLength;\n if (prop.maxLength !== undefined) propSchema.maxLength = prop.maxLength;\n if (prop.pattern) propSchema.pattern = prop.pattern;\n if (prop.enum && prop.enum.length > 0) propSchema.enum = prop.enum;\n }\n\n // Numeric constraints\n if (prop.type === \"number\" || prop.type === \"integer\") {\n if (prop.minimum !== undefined) propSchema.minimum = prop.minimum;\n if (prop.maximum !== undefined) propSchema.maximum = prop.maximum;\n }\n\n // Array constraints\n if (prop.type === \"array\") {\n if (prop.minItems !== undefined) propSchema.minItems = prop.minItems;\n if (prop.maxItems !== undefined) propSchema.maxItems = prop.maxItems;\n if (prop.uniqueItems) propSchema.uniqueItems = prop.uniqueItems;\n\n // Add items schema recursively\n if (prop.items) {\n propSchema.items = buildProperties([prop.items])[prop.items.key] || {\n type: prop.items.type,\n };\n }\n }\n\n // Object properties and required fields\n if (prop.type === \"object\" && prop.children && prop.children.length > 0) {\n propSchema.properties = buildProperties(prop.children);\n const requiredChildren = prop.children\n .filter((c) => c.required && c.key)\n .map((c) => c.key);\n if (requiredChildren.length > 0) {\n propSchema.required = requiredChildren;\n }\n }\n\n result[prop.key] = propSchema;\n });\n\n return result;\n};\n","// JSON Schema parsing utilities\n\nimport { JSONSchema7 } from \"json-schema\";\nimport type { PropertyData, SchemaMetadata } from \"@/types/schema\";\nimport { generatePropertyId } from \"./id-generator\";\n\nexport interface ParsedSchema {\n properties: PropertyData[];\n metadata?: SchemaMetadata;\n}\n\n/**\n * Parse a JSON Schema into PropertyData array\n */\nexport const parseSchema = (schema: JSONSchema7): ParsedSchema => {\n const result: ParsedSchema = {\n properties: [],\n };\n\n // Extract metadata if present\n if (schema.title || schema.description) {\n result.metadata = {\n title: typeof schema.title === \"string\" ? schema.title : \"\",\n description:\n typeof schema.description === \"string\" ? schema.description : \"\",\n version: \"1.0.0\", // Default version\n };\n }\n\n // Parse properties\n if (schema.properties && typeof schema.properties === \"object\") {\n result.properties = parseProperties(\n schema.properties,\n Array.isArray(schema.required) ? schema.required : [],\n );\n }\n\n return result;\n};\n\n/**\n * Recursively parse properties from a JSON Schema\n */\nexport const parseProperties = (\n props: Record<string, JSONSchema7 | boolean>,\n requiredList: string[] = [],\n): PropertyData[] => {\n if (!props) return [];\n\n return Object.entries(props)\n .filter(([, propSchema]) => typeof propSchema === \"object\")\n .map(([key, propSchema]) => {\n const schema = propSchema as JSONSchema7;\n\n // Determine the type - check for file type indicators\n let propertyType = (\n typeof schema.type === \"string\" ? schema.type : \"string\"\n ) as PropertyData[\"type\"];\n\n // If it's a string with format filename, treat it as a file\n if (propertyType === \"string\" && schema.format === \"filename\") {\n propertyType = \"file\";\n }\n\n const property: PropertyData = {\n id: generatePropertyId(),\n key,\n title: typeof schema.title === \"string\" ? schema.title : undefined,\n type: propertyType,\n description:\n typeof schema.description === \"string\"\n ? schema.description\n : undefined,\n required: requiredList.includes(key),\n };\n\n // Parse string constraints\n if (schema.minLength !== undefined) property.minLength = schema.minLength;\n if (schema.maxLength !== undefined) property.maxLength = schema.maxLength;\n if (schema.pattern) property.pattern = schema.pattern;\n if (schema.enum && Array.isArray(schema.enum))\n property.enum = schema.enum as string[];\n\n // Parse numeric constraints\n if (schema.minimum !== undefined) property.minimum = schema.minimum;\n if (schema.maximum !== undefined) property.maximum = schema.maximum;\n\n // Parse array constraints\n if (schema.minItems !== undefined) property.minItems = schema.minItems;\n if (schema.maxItems !== undefined) property.maxItems = schema.maxItems;\n if (schema.uniqueItems) property.uniqueItems = schema.uniqueItems;\n\n // Parse array items recursively\n if (\n property.type === \"array\" &&\n schema.items &&\n typeof schema.items === \"object\" &&\n !Array.isArray(schema.items)\n ) {\n property.items = parseProperties(\n { item: schema.items as JSONSchema7 },\n [],\n ).find((p) => p.key === \"item\");\n }\n\n // Parse object children recursively\n if (schema.properties && typeof schema.properties === \"object\") {\n property.children = parseProperties(\n schema.properties,\n Array.isArray(schema.required) ? schema.required : [],\n );\n }\n\n return property;\n });\n};\n","// Custom hook for managing schema builder state and operations\n// INTERNAL USE ONLY - not exported to external users\n\nimport { useMemo, useCallback } from \"react\";\nimport type { PropertyData, SchemaMetadata } from \"@/types/schema\";\nimport { generateSchema } from \"@/lib/schema-generator\";\nimport { parseSchema } from \"@/lib/schema-parser\";\nimport { importJsonFile, downloadJsonFile } from \"@/lib/file-utils\";\nimport { generatePropertyId } from \"@/lib/id-generator\";\n\nexport interface UseSchemaBuilderReturn {\n properties: PropertyData[];\n metadata: SchemaMetadata;\n addProperty: () => PropertyData;\n updateProperty: (id: string, updated: PropertyData) => void;\n deleteProperty: (id: string) => void;\n clearAll: () => void;\n updateMetadata: (field: keyof SchemaMetadata, value: string) => void;\n importSchema: () => Promise<void>;\n downloadSchema: () => void;\n}\n\ninterface UseSchemaBuilderOptions {\n schema: any;\n onChange: (schema: any) => void;\n includeMetadata?: boolean;\n}\n\nexport const useSchemaBuilder = ({\n schema,\n onChange,\n includeMetadata = true,\n}: UseSchemaBuilderOptions): UseSchemaBuilderReturn => {\n // Parse properties and metadata from controlled schema prop\n const { properties: parsedProperties, metadata: parsedMetadata } = useMemo(\n () => parseSchema(schema),\n [schema],\n );\n\n const properties = parsedProperties;\n const metadata = parsedMetadata || {\n title: \"\",\n description: \"\",\n version: \"\",\n };\n\n // Add a new property\n const addProperty = useCallback((): PropertyData => {\n const property: PropertyData = {\n id: generatePropertyId(),\n key: \"\",\n type: \"string\",\n required: false,\n };\n return property;\n }, []);\n\n // Update an existing property or add it if it doesn't exist\n const updateProperty = useCallback(\n (id: string, updated: PropertyData) => {\n const exists = properties.some((p) => p.id === id);\n let updatedProperties: PropertyData[];\n\n if (exists) {\n updatedProperties = properties.map((p) => (p.id === id ? updated : p));\n } else {\n // If property doesn't exist, add it\n updatedProperties = [...properties, updated];\n }\n\n const newSchema = generateSchema(\n updatedProperties,\n metadata,\n includeMetadata,\n );\n onChange(newSchema);\n },\n [properties, metadata, includeMetadata, onChange],\n );\n\n // Delete a property\n const deleteProperty = useCallback(\n (id: string) => {\n const updatedProperties = properties.filter((p) => p.id !== id);\n const newSchema = generateSchema(\n updatedProperties,\n metadata,\n includeMetadata,\n );\n onChange(newSchema);\n },\n [properties, metadata, includeMetadata, onChange],\n );\n\n // Clear all properties and reset metadata\n const clearAll = useCallback(() => {\n const emptyMetadata = { title: \"\", description: \"\", version: \"\" };\n const newSchema = generateSchema([], emptyMetadata, includeMetadata);\n onChange(newSchema);\n }, [includeMetadata, onChange]);\n\n // Update metadata field\n const updateMetadata = useCallback(\n (field: keyof SchemaMetadata, value: string) => {\n const updatedMetadata = { ...metadata, [field]: value };\n const newSchema = generateSchema(\n properties,\n updatedMetadata,\n includeMetadata,\n );\n onChange(newSchema);\n },\n [properties, metadata, includeMetadata, onChange],\n );\n\n // Import schema from file\n const importSchema = useCallback(async () => {\n const data = await importJsonFile();\n onChange(data);\n }, [onChange]);\n\n // Download schema as file\n const downloadSchema = useCallback(() => {\n downloadJsonFile(schema, \"schema.json\");\n }, [schema]);\n\n return {\n properties,\n metadata,\n addProperty,\n updateProperty,\n deleteProperty,\n clearAll,\n updateMetadata,\n importSchema,\n downloadSchema,\n };\n};\n","import { Moon, Sun } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport { useEffect, useState } from \"react\";\n\nexport default function ThemeToggle() {\n const [theme, setTheme] = useState<\"light\" | \"dark\">(\"light\");\n\n useEffect(() => {\n const stored = localStorage.getItem(\"theme\") as \"light\" | \"dark\" | null;\n const initial =\n stored ||\n (window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\");\n setTheme(initial);\n document.documentElement.classList.toggle(\"dark\", initial === \"dark\");\n }, []);\n\n const toggleTheme = () => {\n const newTheme = theme === \"light\" ? \"dark\" : \"light\";\n setTheme(newTheme);\n localStorage.setItem(\"theme\", newTheme);\n document.documentElement.classList.toggle(\"dark\", newTheme === \"dark\");\n };\n\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={toggleTheme}\n data-testid=\"button-theme-toggle\"\n >\n {theme === \"light\" ? (\n <Moon className=\"w-4 h-4\" />\n ) : (\n <Sun className=\"w-4 h-4\" />\n )}\n </Button>\n );\n}\n","import { Button } from \"@/components/ui/button\";\nimport { Plus, Upload, Trash2 } from \"lucide-react\";\nimport PropertyDocument from \"@/components/PropertyDocument\";\nimport PropertyEditDialog from \"@/components/PropertyEditDialog\";\nimport JsonOutput from \"@/components/JsonOutput\";\nimport SchemaMetadata from \"@/components/SchemaMetadata\";\nimport type {\n PropertyData,\n SchemaMetadata as SchemaMetadataType,\n} from \"@/types/schema\";\nimport { useSchemaBuilder } from \"@/hooks/useSchemaBuilder\";\nimport { useDialogManager } from \"@/hooks/useDialogManager\";\nimport ThemeToggle from \"./ThemeToggle\";\nimport {\n TypeLabelsProvider,\n type TypeLabels,\n} from \"@/contexts/TypeLabelsContext\";\n\nexport interface JsonSchemaBuilderProps {\n /**\n * The JSON schema object (controlled)\n */\n schema: any;\n\n /**\n * Callback fired when the schema changes\n */\n onChange: (schema: any) => void;\n\n /**\n * Whether to show metadata fields (title, description, version)\n * @default false\n */\n showMetadata?: boolean;\n\n /**\n * Whether to show the import button\n * @default true\n */\n showImport?: boolean;\n\n /**\n * Whether to show the clear all button\n * @default true\n */\n showClear?: boolean;\n\n /**\n * Whether to show the JSON output panel\n * @default true\n */\n showOutput?: boolean;\n\n /**\n * Custom class name for the container\n */\n className?: string;\n\n showHeader?: boolean;\n\n /**\n * Custom labels for property types\n * @example { string: 'Text', boolean: 'Yes/No', object: 'Form', array: 'List' }\n */\n typeLabels?: TypeLabels;\n\n /**\n * Whether to show summary in the bottom of the document area\n * @default true\n */\n showSummary?: boolean;\n\n /**\n * Custom label for top-level properties\n * @example { singular: 'input', plural: 'inputs' }\n * @default { singular: 'property', plural: 'properties' }\n */\n propertyLabel?: {\n singular: string;\n plural: string;\n };\n\n /**\n * Whether to show the regex pattern field in string constraints\n * @default false\n */\n showRegex?: boolean;\n\n /**\n * Whether to allow editing property keys after initialization\n * @default false\n */\n keyEditable?: boolean;\n}\n\n/**\n * A visual JSON Schema builder component that allows building JSON schemas interactively\n */\nexport function JsonSchemaBuilder({\n schema,\n onChange,\n showMetadata = false,\n showImport = true,\n showClear = true,\n showOutput = true,\n showHeader = true,\n className = \"\",\n showSummary = false,\n typeLabels,\n propertyLabel = { singular: \"property\", plural: \"properties\" },\n showRegex = false,\n keyEditable = false,\n}: JsonSchemaBuilderProps) {\n const {\n properties,\n metadata,\n addProperty: createProperty,\n updateProperty,\n deleteProperty,\n clearAll: clearAllProperties,\n updateMetadata,\n importSchema,\n } = useSchemaBuilder({\n schema,\n onChange,\n includeMetadata: showMetadata,\n });\n\n const addPropertyDialog = useDialogManager<PropertyData>({\n createInitialData: () => createProperty(),\n onConfirm: (property) => {\n updateProperty(property.id, property);\n },\n });\n\n const clearAll = () => {\n clearAllProperties();\n };\n\n const handleImport = async () => {\n await importSchema();\n };\n\n return (\n <TypeLabelsProvider customLabels={typeLabels}>\n <div className={`${className} flex flex-col json-schema-builder-react`}>\n {showHeader && (\n <header className=\"h-16 border-b flex items-center justify-between px-6\">\n <div className=\"flex items-center gap-3\">\n {showImport && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleImport}\n data-testid=\"button-import\"\n >\n <Upload className=\"w-4 h-4\" />\n </Button>\n )}\n {showClear && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={clearAll}\n disabled={properties.length === 0}\n data-testid=\"button-clear\"\n >\n <Trash2 className=\"w-4 h-4\" />\n </Button>\n )}\n <ThemeToggle />\n </div>\n </header>\n )}\n\n <div className=\"flex-1 flex overflow-hidden\">\n <div className={showOutput ? \"w-3/5 border-r\" : \"w-full\"}>\n <div className=\"h-full flex flex-col\">\n <div className=\"flex-1 overflow-auto p-2 space-y-4\">\n {showMetadata && (\n <SchemaMetadata\n title={metadata.title}\n description={metadata.description}\n version={metadata.version}\n onUpdate={(field, value) =>\n updateMetadata(field as keyof SchemaMetadataType, value)\n }\n />\n )}\n\n {properties.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-16 text-center\">\n <div className=\"w-16 h-16 rounded-full bg-muted flex items-center justify-center mb-4\">\n <Plus className=\"w-8 h-8 text-muted-foreground\" />\n </div>\n <h2 className=\"text-lg font-medium mb-2\">\n No {propertyLabel.plural} yet\n </h2>\n <p className=\"text-sm text-muted-foreground mb-6 max-w-sm\">\n Start building your JSON schema by adding your first{\" \"}\n {propertyLabel.singular}\n </p>\n <Button\n onClick={() => addPropertyDialog.open()}\n data-testid=\"button-add-first\"\n >\n <Plus className=\"w-4 h-4 mr-2\" />\n Add {propertyLabel.singular}\n </Button>\n </div>\n ) : (\n <>\n <div className=\"space-y-1\">\n {properties.map((property) => (\n <PropertyDocument\n key={property.id}\n property={property}\n onUpdate={(updated) =>\n updateProperty(property.id, updated)\n }\n onDelete={() => deleteProperty(property.id)}\n showRegex={showRegex}\n keyEditable={keyEditable}\n />\n ))}\n </div>\n\n {showSummary && (\n <div className=\"pt-4 border-t flex items-center justify-between text-sm text-muted-foreground\">\n <span>\n {properties.length}{\" \"}\n {properties.length === 1\n ? propertyLabel.singular\n : propertyLabel.plural}\n </span>\n <span>\n {properties.filter((p) => p.required).length} required\n </span>\n </div>\n )}\n </>\n )}\n </div>\n\n {properties.length > 0 && (\n <div className=\"border-t p-2 pt-4 bg-background\">\n <Button\n onClick={() => addPropertyDialog.open()}\n className=\"w-full\"\n variant=\"outline\"\n data-testid=\"button-add-property\"\n >\n <Plus className=\"w-4 h-4\" />\n Add {propertyLabel.singular}\n </Button>\n </div>\n )}\n </div>\n </div>\n\n {showOutput && (\n <div className=\"w-2/5\">\n <JsonOutput schema={schema} />\n </div>\n )}\n </div>\n\n {addPropertyDialog.isOpen && addPropertyDialog.data && (\n <PropertyEditDialog\n property={addPropertyDialog.data}\n open={addPropertyDialog.isOpen}\n isNewProperty={true}\n onOpenChange={addPropertyDialog.setIsOpen}\n propertyLabel={propertyLabel}\n onUpdate={addPropertyDialog.confirm}\n showRegex={showRegex}\n keyEditable={keyEditable}\n />\n )}\n </div>\n </TypeLabelsProvider>\n );\n}\n"],"names":["r","t","f","n","o","clsx","falsyToString","value","cx","cva","base","config","props","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","key","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","CLASS_PART_SEPARATOR","createClassGroupUtils","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","_a","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","prefix","getPrefixedClassGroupEntries","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","path","currentClassPartObject","pathPart","func","classGroupEntries","prefixedClassGroup","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","classNames","result","originalClassName","variantModifier","modifierId","classId","conflictGroups","i","group","twJoin","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isInteger","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","twMerge","cn","inputs","buttonVariants","Button","React","size","asChild","ref","jsx","Slot","Input","type","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","sideOffset","Select","SelectPrimitive","SelectValue","SelectTrigger","children","jsxs","ChevronDown","SelectScrollUpButton","ChevronUp","SelectScrollDownButton","SelectContent","position","SelectLabel","SelectItem","Check","SelectSeparator","Dialog","DialogPrimitive","DialogPortal","DialogOverlay","DialogContent","X","DialogHeader","DialogFooter","DialogTitle","DialogDescription","labelVariants","Label","LabelPrimitive","Checkbox","CheckboxPrimitive","Textarea","toSnakeCase","str","usePropertyEditor","onUpdate","isNewProperty","keyEditable","handleFieldChange","field","title","autoKey","defaultTypeLabels","TypeLabelsContext","createContext","TypeLabelsProvider","customLabels","typeLabels","getTypeLabel","useTypeLabels","useContext","PropertyEditDialog","open","onOpenChange","isArrayItem","propertyLabel","showRegex","localProperty","setLocalProperty","useState","useEffect","handleTitleChange","handleTitleBlur","handleKeyChange","handleConstraintChange","handleSave","handleCancel","e","checked","newValue","currentEnum","newEnum","_","useInlineEditor","initialValue","onSave","options","allowEmpty","onEditStart","onEditCancel","isEditing","setIsEditing","setValue","startEdit","handleChange","handleBlur","trimmedValue","useTypeSelector","isChangingType","setIsChangingType","newType","updated","generatePropertyId","useDialogManager","onConfirm","onCancel","createInitialData","isOpen","setIsOpen","data","setData","initialData","dataToUse","close","confirmedData","newIsOpen","useChildManager","addChildDialog","child","childId","newChildren","c","PropertyDocument","onDelete","level","editDialog","titleEditor","descriptionEditor","typeSelector","childManager","HeadingTag","canHaveChildren","hasChildren","headingClasses","Type","Hash","CheckSquare","Braces","List","FileText","Plus","Fragment","Pencil","Trash2","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","importJsonFile","resolve","reject","input","file","reader","event","downloadJsonFile","filename","jsonString","blob","url","a","JsonOutput","schema","copied","setCopied","CheckCircle2","Copy","Download","SchemaMetadata","description","version","isExpanded","setIsExpanded","ChevronRight","generateSchema","properties","metadata","includeMetadata","buildProperties","required","p","prop","propSchema","requiredChildren","parseSchema","parseProperties","requiredList","propertyType","useSchemaBuilder","onChange","parsedProperties","parsedMetadata","useMemo","addProperty","useCallback","updateProperty","id","exists","updatedProperties","newSchema","deleteProperty","clearAll","updateMetadata","updatedMetadata","importSchema","downloadSchema","ThemeToggle","setTheme","initial","newTheme","Moon","Sun","JsonSchemaBuilder","showMetadata","showImport","showClear","showOutput","showHeader","showSummary","createProperty","clearAllProperties","addPropertyDialog","handleImport","Upload"],"mappings":";;;;;;;;;;AAAA,SAASA,GAAE,GAAE;AAAC,MAAIC,GAAEC,GAAEC,IAAE;AAAG,MAAa,OAAO,KAAjB,YAA8B,OAAO,KAAjB,SAAmB,CAAAA,KAAG;AAAA,WAAoB,OAAO,KAAjB,SAAmB,KAAG,MAAM,QAAQ,CAAC,GAAE;AAAC,QAAIC,IAAE,EAAE;AAAO,SAAIH,IAAE,GAAEA,IAAEG,GAAEH,IAAI,GAAEA,CAAC,MAAIC,IAAEF,GAAE,EAAEC,CAAC,CAAC,OAAKE,MAAIA,KAAG,MAAKA,KAAGD;AAAA,EAAE,MAAM,MAAIA,KAAK,EAAE,GAAEA,CAAC,MAAIC,MAAIA,KAAG,MAAKA,KAAGD;AAAG,SAAOC;AAAC;AAAQ,SAASE,KAAM;AAAC,WAAQ,GAAEJ,GAAEC,IAAE,GAAEC,IAAE,IAAGC,IAAE,UAAU,QAAOF,IAAEE,GAAEF,IAAI,EAAC,IAAE,UAAUA,CAAC,OAAKD,IAAED,GAAE,CAAC,OAAKG,MAAIA,KAAG,MAAKA,KAAGF;AAAG,SAAOE;AAAC;ACe/W,MAAMG,KAAgB,CAACC,MAAQ,OAAOA,KAAU,YAAY,GAAGA,CAAK,KAAKA,MAAU,IAAI,MAAMA,GAChFC,KAAKH,IACLI,KAAM,CAACC,GAAMC,MAAS,CAACC,MAAQ;AACpC,MAAIC;AACJ,OAAKF,KAAW,OAA4B,SAASA,EAAO,aAAa,KAAM,QAAOH,GAAGE,GAAME,KAAU,OAA2B,SAASA,EAAM,OAAOA,KAAU,OAA2B,SAASA,EAAM,SAAS;AACvN,QAAM,EAAE,UAAAE,GAAU,iBAAAC,EAAe,IAAKJ,GAChCK,IAAuB,OAAO,KAAKF,CAAQ,EAAE,IAAI,CAACG,MAAU;AAC9D,UAAMC,IAAcN,KAAU,OAA2B,SAASA,EAAMK,CAAO,GACzEE,IAAqBJ,KAAoB,OAAqC,SAASA,EAAgBE,CAAO;AACpH,QAAIC,MAAgB,KAAM,QAAO;AACjC,UAAME,IAAad,GAAcY,CAAW,KAAKZ,GAAca,CAAkB;AACjF,WAAOL,EAASG,CAAO,EAAEG,CAAU;AAAA,EACvC,CAAC,GACKC,IAAwBT,KAAS,OAAO,QAAQA,CAAK,EAAE,OAAO,CAACU,GAAKC,MAAQ;AAC9E,QAAI,CAACC,GAAKjB,CAAK,IAAIgB;AACnB,WAAIhB,MAAU,WAGde,EAAIE,CAAG,IAAIjB,IACJe;AAAA,EACX,GAAG,CAAA,CAAE,GACCG,IAA+Bd,KAAW,SAAsCE,IAA2BF,EAAO,sBAAsB,QAAQE,MAA6B,SAAvG,SAAyHA,EAAyB,OAAO,CAACS,GAAKC,MAAQ;AAC/O,QAAI,EAAE,OAAOG,GAAS,WAAWC,GAAa,GAAGC,EAAsB,IAAKL;AAC5E,WAAO,OAAO,QAAQK,CAAsB,EAAE,MAAM,CAACL,MAAQ;AACzD,UAAI,CAACC,GAAKjB,CAAK,IAAIgB;AACnB,aAAO,MAAM,QAAQhB,CAAK,IAAIA,EAAM,SAAS;AAAA,QACzC,GAAGQ;AAAA,QACH,GAAGM;AAAA,MACvB,EAAkBG,CAAG,CAAC,IAAK;AAAA,QACP,GAAGT;AAAA,QACH,GAAGM;AAAA,MACvB,EAAmBG,CAAG,MAAMjB;AAAA,IAChB,CAAC,IAAI;AAAA,MACD,GAAGe;AAAA,MACHI;AAAA,MACAC;AAAA,IAChB,IAAgBL;AAAA,EACR,GAAG,CAAA,CAAE;AACL,SAAOd,GAAGE,GAAMM,GAAsBS,GAA8Bb,KAAU,OAA2B,SAASA,EAAM,OAAOA,KAAU,OAA2B,SAASA,EAAM,SAAS;AAChM,GCtDEiB,KAAuB,KACvBC,KAAwB,CAAAnB,MAAU;AACtC,QAAMoB,IAAWC,GAAerB,CAAM,GAChC;AAAA,IACJ,wBAAAsB;AAAA,IACA,gCAAAC;AAAA,EACJ,IAAMvB;AAgBJ,SAAO;AAAA,IACL,iBAhBsB,CAAAwB,MAAa;AACnC,YAAMC,IAAaD,EAAU,MAAMN,EAAoB;AAEvD,aAAIO,EAAW,CAAC,MAAM,MAAMA,EAAW,WAAW,KAChDA,EAAW,MAAK,GAEXC,GAAkBD,GAAYL,CAAQ,KAAKO,GAA+BH,CAAS;AAAA,IAC5F;AAAA,IAUE,6BATkC,CAACI,GAAcC,MAAuB;AACxE,YAAMC,IAAYR,EAAuBM,CAAY,KAAK,CAAA;AAC1D,aAAIC,KAAsBN,EAA+BK,CAAY,IAC5D,CAAC,GAAGE,GAAW,GAAGP,EAA+BK,CAAY,CAAC,IAEhEE;AAAA,IACT;AAAA,EAIF;AACA,GACMJ,KAAoB,CAACD,GAAYM,MAAoB;;AACzD,MAAIN,EAAW,WAAW;AACxB,WAAOM,EAAgB;AAEzB,QAAMC,IAAmBP,EAAW,CAAC,GAC/BQ,IAAsBF,EAAgB,SAAS,IAAIC,CAAgB,GACnEE,IAA8BD,IAAsBP,GAAkBD,EAAW,MAAM,CAAC,GAAGQ,CAAmB,IAAI;AACxH,MAAIC;AACF,WAAOA;AAET,MAAIH,EAAgB,WAAW,WAAW;AACxC;AAEF,QAAMI,IAAYV,EAAW,KAAKP,EAAoB;AACtD,UAAOkB,IAAAL,EAAgB,WAAW,KAAK,CAAC;AAAA,IACtC,WAAAM;AAAA,EACJ,MAAQA,EAAUF,CAAS,CAAC,MAFnB,gBAAAC,EAEsB;AAC/B,GACME,KAAyB,cACzBX,KAAiC,CAAAH,MAAa;AAClD,MAAIc,GAAuB,KAAKd,CAAS,GAAG;AAC1C,UAAMe,IAA6BD,GAAuB,KAAKd,CAAS,EAAE,CAAC,GACrEgB,IAAWD,KAAA,gBAAAA,EAA4B,UAAU,GAAGA,EAA2B,QAAQ,GAAG;AAChG,QAAIC;AAEF,aAAO,gBAAgBA;AAAA,EAE3B;AACF,GAIMnB,KAAiB,CAAArB,MAAU;AAC/B,QAAM;AAAA,IACJ,OAAAyC;AAAA,IACA,QAAAC;AAAA,EACJ,IAAM1C,GACEoB,IAAW;AAAA,IACf,UAAU,oBAAI,IAAG;AAAA,IACjB,YAAY,CAAA;AAAA,EAChB;AAEE,SADkCuB,GAA6B,OAAO,QAAQ3C,EAAO,WAAW,GAAG0C,CAAM,EAC/E,QAAQ,CAAC,CAACd,GAAcgB,CAAU,MAAM;AAChE,IAAAC,GAA0BD,GAAYxB,GAAUQ,GAAca,CAAK;AAAA,EACrE,CAAC,GACMrB;AACT,GACMyB,KAA4B,CAACD,GAAYb,GAAiBH,GAAca,MAAU;AACtF,EAAAG,EAAW,QAAQ,CAAAE,MAAmB;AACpC,QAAI,OAAOA,KAAoB,UAAU;AACvC,YAAMC,IAAwBD,MAAoB,KAAKf,IAAkBiB,GAAQjB,GAAiBe,CAAe;AACjH,MAAAC,EAAsB,eAAenB;AACrC;AAAA,IACF;AACA,QAAI,OAAOkB,KAAoB,YAAY;AACzC,UAAIG,GAAcH,CAAe,GAAG;AAClC,QAAAD,GAA0BC,EAAgBL,CAAK,GAAGV,GAAiBH,GAAca,CAAK;AACtF;AAAA,MACF;AACA,MAAAV,EAAgB,WAAW,KAAK;AAAA,QAC9B,WAAWe;AAAA,QACX,cAAAlB;AAAA,MACR,CAAO;AACD;AAAA,IACF;AACA,WAAO,QAAQkB,CAAe,EAAE,QAAQ,CAAC,CAACjC,GAAK+B,CAAU,MAAM;AAC7D,MAAAC,GAA0BD,GAAYI,GAAQjB,GAAiBlB,CAAG,GAAGe,GAAca,CAAK;AAAA,IAC1F,CAAC;AAAA,EACH,CAAC;AACH,GACMO,KAAU,CAACjB,GAAiBmB,MAAS;AACzC,MAAIC,IAAyBpB;AAC7B,SAAAmB,EAAK,MAAMhC,EAAoB,EAAE,QAAQ,CAAAkC,MAAY;AACnD,IAAKD,EAAuB,SAAS,IAAIC,CAAQ,KAC/CD,EAAuB,SAAS,IAAIC,GAAU;AAAA,MAC5C,UAAU,oBAAI,IAAG;AAAA,MACjB,YAAY,CAAA;AAAA,IACpB,CAAO,GAEHD,IAAyBA,EAAuB,SAAS,IAAIC,CAAQ;AAAA,EACvE,CAAC,GACMD;AACT,GACMF,KAAgB,CAAAI,MAAQA,EAAK,eAC7BV,KAA+B,CAACW,GAAmBZ,MAClDA,IAGEY,EAAkB,IAAI,CAAC,CAAC1B,GAAcgB,CAAU,MAAM;AAC3D,QAAMW,IAAqBX,EAAW,IAAI,CAAAE,MACpC,OAAOA,KAAoB,WACtBJ,IAASI,IAEd,OAAOA,KAAoB,WACtB,OAAO,YAAY,OAAO,QAAQA,CAAe,EAAE,IAAI,CAAC,CAACjC,GAAKjB,CAAK,MAAM,CAAC8C,IAAS7B,GAAKjB,CAAK,CAAC,CAAC,IAEjGkD,CACR;AACD,SAAO,CAAClB,GAAc2B,CAAkB;AAC1C,CAAC,IAbQD,GAiBLE,KAAiB,CAAAC,MAAgB;AACrC,MAAIA,IAAe;AACjB,WAAO;AAAA,MACL,KAAK,MAAA;AAAA;AAAA,MACL,KAAK,MAAM;AAAA,MAAC;AAAA,IAClB;AAEE,MAAIC,IAAY,GACZC,IAAQ,oBAAI,IAAG,GACfC,IAAgB,oBAAI,IAAG;AAC3B,QAAMC,IAAS,CAAChD,GAAKjB,MAAU;AAC7B,IAAA+D,EAAM,IAAI9C,GAAKjB,CAAK,GACpB8D,KACIA,IAAYD,MACdC,IAAY,GACZE,IAAgBD,GAChBA,IAAQ,oBAAI,IAAG;AAAA,EAEnB;AACA,SAAO;AAAA,IACL,IAAI9C,GAAK;AACP,UAAIjB,IAAQ+D,EAAM,IAAI9C,CAAG;AACzB,UAAIjB,MAAU;AACZ,eAAOA;AAET,WAAKA,IAAQgE,EAAc,IAAI/C,CAAG,OAAO;AACvC,eAAAgD,EAAOhD,GAAKjB,CAAK,GACVA;AAAA,IAEX;AAAA,IACA,IAAIiB,GAAKjB,GAAO;AACd,MAAI+D,EAAM,IAAI9C,CAAG,IACf8C,EAAM,IAAI9C,GAAKjB,CAAK,IAEpBiE,EAAOhD,GAAKjB,CAAK;AAAA,IAErB;AAAA,EACJ;AACA,GACMkE,KAAqB,KACrBC,KAAuB,CAAA/D,MAAU;AACrC,QAAM;AAAA,IACJ,WAAAgE;AAAA,IACA,4BAAAC;AAAA,EACJ,IAAMjE,GACEkE,IAA6BF,EAAU,WAAW,GAClDG,IAA0BH,EAAU,CAAC,GACrCI,IAAkBJ,EAAU,QAE5BK,IAAiB,CAAA7C,MAAa;AAClC,UAAM8C,IAAY,CAAA;AAClB,QAAIC,IAAe,GACfC,IAAgB,GAChBC;AACJ,aAASC,IAAQ,GAAGA,IAAQlD,EAAU,QAAQkD,KAAS;AACrD,UAAIC,IAAmBnD,EAAUkD,CAAK;AACtC,UAAIH,MAAiB,GAAG;AACtB,YAAII,MAAqBR,MAA4BD,KAA8B1C,EAAU,MAAMkD,GAAOA,IAAQN,CAAe,MAAMJ,IAAY;AACjJ,UAAAM,EAAU,KAAK9C,EAAU,MAAMgD,GAAeE,CAAK,CAAC,GACpDF,IAAgBE,IAAQN;AACxB;AAAA,QACF;AACA,YAAIO,MAAqB,KAAK;AAC5B,UAAAF,IAA0BC;AAC1B;AAAA,QACF;AAAA,MACF;AACA,MAAIC,MAAqB,MACvBJ,MACSI,MAAqB,OAC9BJ;AAAA,IAEJ;AACA,UAAMK,IAAqCN,EAAU,WAAW,IAAI9C,IAAYA,EAAU,UAAUgD,CAAa,GAC3GK,IAAuBD,EAAmC,WAAWd,EAAkB,GACvFgB,IAAgBD,IAAuBD,EAAmC,UAAU,CAAC,IAAIA,GACzFG,IAA+BN,KAA2BA,IAA0BD,IAAgBC,IAA0BD,IAAgB;AACpJ,WAAO;AAAA,MACL,WAAAF;AAAA,MACA,sBAAAO;AAAA,MACA,eAAAC;AAAA,MACA,8BAAAC;AAAA,IACN;AAAA,EACE;AACA,SAAId,IACK,CAAAzC,MAAayC,EAA2B;AAAA,IAC7C,WAAAzC;AAAA,IACA,gBAAA6C;AAAA,EACN,CAAK,IAEIA;AACT,GAMMW,KAAgB,CAAAV,MAAa;AACjC,MAAIA,EAAU,UAAU;AACtB,WAAOA;AAET,QAAMW,IAAkB,CAAA;AACxB,MAAIC,IAAoB,CAAA;AACxB,SAAAZ,EAAU,QAAQ,CAAAa,MAAY;AAE5B,IAD2BA,EAAS,CAAC,MAAM,OAEzCF,EAAgB,KAAK,GAAGC,EAAkB,KAAI,GAAIC,CAAQ,GAC1DD,IAAoB,CAAA,KAEpBA,EAAkB,KAAKC,CAAQ;AAAA,EAEnC,CAAC,GACDF,EAAgB,KAAK,GAAGC,EAAkB,KAAI,CAAE,GACzCD;AACT,GACMG,KAAoB,CAAApF,OAAW;AAAA,EACnC,OAAOwD,GAAexD,EAAO,SAAS;AAAA,EACtC,gBAAgB+D,GAAqB/D,CAAM;AAAA,EAC3C,GAAGmB,GAAsBnB,CAAM;AACjC,IACMqF,KAAsB,OACtBC,KAAiB,CAACC,GAAWC,MAAgB;AACjD,QAAM;AAAA,IACJ,gBAAAnB;AAAA,IACA,iBAAAoB;AAAA,IACA,6BAAAC;AAAA,EACJ,IAAMF,GAQEG,IAAwB,CAAA,GACxBC,IAAaL,EAAU,KAAI,EAAG,MAAMF,EAAmB;AAC7D,MAAIQ,IAAS;AACb,WAASnB,IAAQkB,EAAW,SAAS,GAAGlB,KAAS,GAAGA,KAAS,GAAG;AAC9D,UAAMoB,IAAoBF,EAAWlB,CAAK,GACpC;AAAA,MACJ,WAAAJ;AAAA,MACA,sBAAAO;AAAA,MACA,eAAAC;AAAA,MACA,8BAAAC;AAAA,IACN,IAAQV,EAAeyB,CAAiB;AACpC,QAAIjE,IAAqB,EAAQkD,GAC7BnD,IAAe6D,EAAgB5D,IAAqBiD,EAAc,UAAU,GAAGC,CAA4B,IAAID,CAAa;AAChI,QAAI,CAAClD,GAAc;AACjB,UAAI,CAACC,GAAoB;AAEvB,QAAAgE,IAASC,KAAqBD,EAAO,SAAS,IAAI,MAAMA,IAASA;AACjE;AAAA,MACF;AAEA,UADAjE,IAAe6D,EAAgBX,CAAa,GACxC,CAAClD,GAAc;AAEjB,QAAAiE,IAASC,KAAqBD,EAAO,SAAS,IAAI,MAAMA,IAASA;AACjE;AAAA,MACF;AACA,MAAAhE,IAAqB;AAAA,IACvB;AACA,UAAMkE,IAAkBf,GAAcV,CAAS,EAAE,KAAK,GAAG,GACnD0B,IAAanB,IAAuBkB,IAAkBjC,KAAqBiC,GAC3EE,IAAUD,IAAapE;AAC7B,QAAI+D,EAAsB,SAASM,CAAO;AAExC;AAEF,IAAAN,EAAsB,KAAKM,CAAO;AAClC,UAAMC,IAAiBR,EAA4B9D,GAAcC,CAAkB;AACnF,aAASsE,IAAI,GAAGA,IAAID,EAAe,QAAQ,EAAEC,GAAG;AAC9C,YAAMC,IAAQF,EAAeC,CAAC;AAC9B,MAAAR,EAAsB,KAAKK,IAAaI,CAAK;AAAA,IAC/C;AAEA,IAAAP,IAASC,KAAqBD,EAAO,SAAS,IAAI,MAAMA,IAASA;AAAA,EACnE;AACA,SAAOA;AACT;AAWA,SAASQ,KAAS;AAChB,MAAI3B,IAAQ,GACR4B,GACAC,GACAC,IAAS;AACb,SAAO9B,IAAQ,UAAU;AACvB,KAAI4B,IAAW,UAAU5B,GAAO,OAC1B6B,IAAgBE,GAAQH,CAAQ,OAClCE,MAAWA,KAAU,MACrBA,KAAUD;AAIhB,SAAOC;AACT;AACA,MAAMC,KAAU,CAAAC,MAAO;AACrB,MAAI,OAAOA,KAAQ;AACjB,WAAOA;AAET,MAAIH,GACAC,IAAS;AACb,WAASG,IAAI,GAAGA,IAAID,EAAI,QAAQC;AAC9B,IAAID,EAAIC,CAAC,MACHJ,IAAgBE,GAAQC,EAAIC,CAAC,CAAC,OAChCH,MAAWA,KAAU,MACrBA,KAAUD;AAIhB,SAAOC;AACT;AACA,SAASI,GAAoBC,MAAsBC,GAAkB;AACnE,MAAItB,GACAuB,GACAC,GACAC,IAAiBC;AACrB,WAASA,EAAkB3B,GAAW;AACpC,UAAMvF,IAAS8G,EAAiB,OAAO,CAACK,GAAgBC,MAAwBA,EAAoBD,CAAc,GAAGN,GAAmB;AACxI,WAAArB,IAAcJ,GAAkBpF,CAAM,GACtC+G,IAAWvB,EAAY,MAAM,KAC7BwB,IAAWxB,EAAY,MAAM,KAC7ByB,IAAiBI,GACVA,EAAc9B,CAAS;AAAA,EAChC;AACA,WAAS8B,EAAc9B,GAAW;AAChC,UAAM+B,IAAeP,EAASxB,CAAS;AACvC,QAAI+B;AACF,aAAOA;AAET,UAAMzB,IAASP,GAAeC,GAAWC,CAAW;AACpD,WAAAwB,EAASzB,GAAWM,CAAM,GACnBA;AAAA,EACT;AACA,SAAO,WAA6B;AAClC,WAAOoB,EAAeZ,GAAO,MAAM,MAAM,SAAS,CAAC;AAAA,EACrD;AACF;AACA,MAAMkB,IAAY,CAAA1G,MAAO;AACvB,QAAM2G,IAAc,CAAA/E,MAASA,EAAM5B,CAAG,KAAK,CAAA;AAC3C,SAAA2G,EAAY,gBAAgB,IACrBA;AACT,GACMC,KAAsB,8BACtBC,KAAgB,cAChBC,KAA6B,oBAAI,IAAI,CAAC,MAAM,QAAQ,QAAQ,CAAC,GAC7DC,KAAkB,oCAClBC,KAAkB,6HAClBC,KAAqB,4CAErBC,KAAc,mEACdC,KAAa,gGACbC,IAAW,CAAArI,MAASsI,EAAStI,CAAK,KAAK+H,GAAc,IAAI/H,CAAK,KAAK8H,GAAc,KAAK9H,CAAK,GAC3FuI,IAAoB,CAAAvI,MAASwI,EAAoBxI,GAAO,UAAUyI,EAAY,GAC9EH,IAAW,CAAAtI,MAAS,EAAQA,KAAU,CAAC,OAAO,MAAM,OAAOA,CAAK,CAAC,GACjE0I,KAAoB,CAAA1I,MAASwI,EAAoBxI,GAAO,UAAUsI,CAAQ,GAC1EK,IAAY,CAAA3I,MAAS,EAAQA,KAAU,OAAO,UAAU,OAAOA,CAAK,CAAC,GACrE4I,KAAY,CAAA5I,MAASA,EAAM,SAAS,GAAG,KAAKsI,EAAStI,EAAM,MAAM,GAAG,EAAE,CAAC,GACvE6I,IAAmB,CAAA7I,MAAS6H,GAAoB,KAAK7H,CAAK,GAC1D8I,IAAe,CAAA9I,MAASgI,GAAgB,KAAKhI,CAAK,GAClD+I,KAA0B,oBAAI,IAAI,CAAC,UAAU,QAAQ,YAAY,CAAC,GAClEC,KAAkB,CAAAhJ,MAASwI,EAAoBxI,GAAO+I,IAAYE,EAAO,GACzEC,KAAsB,CAAAlJ,MAASwI,EAAoBxI,GAAO,YAAYiJ,EAAO,GAC7EE,KAA2B,oBAAI,IAAI,CAAC,SAAS,KAAK,CAAC,GACnDC,KAAmB,CAAApJ,MAASwI,EAAoBxI,GAAOmJ,IAAaE,EAAO,GAC3EC,KAAoB,CAAAtJ,MAASwI,EAAoBxI,GAAO,IAAIuJ,EAAQ,GACpEC,IAAQ,MAAM,IACdhB,IAAsB,CAACxI,GAAOyJ,GAAOC,MAAc;AACvD,QAAMzD,IAAS4B,GAAoB,KAAK7H,CAAK;AAC7C,SAAIiG,IACEA,EAAO,CAAC,IACH,OAAOwD,KAAU,WAAWxD,EAAO,CAAC,MAAMwD,IAAQA,EAAM,IAAIxD,EAAO,CAAC,CAAC,IAEvEyD,EAAUzD,EAAO,CAAC,CAAC,IAErB;AACT,GACMwC,KAAe,CAAAzI;AAAA;AAAA;AAAA;AAAA,EAIrBiI,GAAgB,KAAKjI,CAAK,KAAK,CAACkI,GAAmB,KAAKlI,CAAK;AAAA,GACvDiJ,KAAU,MAAM,IAChBM,KAAW,CAAAvJ,MAASmI,GAAY,KAAKnI,CAAK,GAC1CqJ,KAAU,CAAArJ,MAASoI,GAAW,KAAKpI,CAAK,GAmBxC2J,KAAmB,MAAM;AAC7B,QAAMC,IAASjC,EAAU,QAAQ,GAC3BkC,IAAUlC,EAAU,SAAS,GAC7BmC,IAAOnC,EAAU,MAAM,GACvBoC,IAAapC,EAAU,YAAY,GACnCqC,IAAcrC,EAAU,aAAa,GACrCsC,IAAetC,EAAU,cAAc,GACvCuC,IAAgBvC,EAAU,eAAe,GACzCwC,IAAcxC,EAAU,aAAa,GACrCyC,IAAWzC,EAAU,UAAU,GAC/B0C,IAAY1C,EAAU,WAAW,GACjC2C,IAAY3C,EAAU,WAAW,GACjC4C,IAAS5C,EAAU,QAAQ,GAC3B6C,IAAM7C,EAAU,KAAK,GACrB8C,IAAqB9C,EAAU,oBAAoB,GACnD+C,IAA6B/C,EAAU,4BAA4B,GACnEgD,IAAQhD,EAAU,OAAO,GACzBiD,IAASjD,EAAU,QAAQ,GAC3BkD,IAAUlD,EAAU,SAAS,GAC7BmD,IAAUnD,EAAU,SAAS,GAC7BoD,IAAWpD,EAAU,UAAU,GAC/BqD,IAAQrD,EAAU,OAAO,GACzBsD,IAAQtD,EAAU,OAAO,GACzBuD,IAAOvD,EAAU,MAAM,GACvBwD,IAAQxD,EAAU,OAAO,GACzByD,IAAYzD,EAAU,WAAW,GACjC0D,IAAgB,MAAM,CAAC,QAAQ,WAAW,MAAM,GAChDC,IAAc,MAAM,CAAC,QAAQ,UAAU,QAAQ,WAAW,QAAQ,GAClEC,IAAiC,MAAM,CAAC,QAAQ1C,GAAkBgB,CAAO,GACzE2B,IAA0B,MAAM,CAAC3C,GAAkBgB,CAAO,GAC1D4B,KAAiC,MAAM,CAAC,IAAIpD,GAAUE,CAAiB,GACvEmD,KAAgC,MAAM,CAAC,QAAQpD,GAAUO,CAAgB,GACzE8C,KAAe,MAAM,CAAC,UAAU,UAAU,QAAQ,eAAe,YAAY,SAAS,gBAAgB,aAAa,KAAK,GACxHC,KAAgB,MAAM,CAAC,SAAS,UAAU,UAAU,UAAU,MAAM,GACpEC,KAAgB,MAAM,CAAC,UAAU,YAAY,UAAU,WAAW,UAAU,WAAW,eAAe,cAAc,cAAc,cAAc,cAAc,aAAa,OAAO,cAAc,SAAS,YAAY,GACrNC,KAAW,MAAM,CAAC,SAAS,OAAO,UAAU,WAAW,UAAU,UAAU,SAAS,GACpFC,IAAkB,MAAM,CAAC,IAAI,KAAKlD,CAAgB,GAClDmD,KAAY,MAAM,CAAC,QAAQ,SAAS,OAAO,cAAc,QAAQ,QAAQ,SAAS,QAAQ,GAC1FC,IAAwB,MAAM,CAAC3D,GAAUO,CAAgB;AAC/D,SAAO;AAAA,IACL,WAAW;AAAA,IACX,WAAW;AAAA,IACX,OAAO;AAAA,MACL,QAAQ,CAACW,CAAK;AAAA,MACd,SAAS,CAACnB,GAAUE,CAAiB;AAAA,MACrC,MAAM,CAAC,QAAQ,IAAIO,GAAcD,CAAgB;AAAA,MACjD,YAAYoD,EAAqB;AAAA,MACjC,aAAa,CAACrC,CAAM;AAAA,MACpB,cAAc,CAAC,QAAQ,IAAI,QAAQd,GAAcD,CAAgB;AAAA,MACjE,eAAe2C,EAAuB;AAAA,MACtC,aAAaC,GAA8B;AAAA,MAC3C,UAAUQ,EAAqB;AAAA,MAC/B,WAAWF,EAAe;AAAA,MAC1B,WAAWE,EAAqB;AAAA,MAChC,QAAQF,EAAe;AAAA,MACvB,KAAKP,EAAuB;AAAA,MAC5B,oBAAoB,CAAC5B,CAAM;AAAA,MAC3B,4BAA4B,CAAChB,IAAWL,CAAiB;AAAA,MACzD,OAAOgD,EAA8B;AAAA,MACrC,QAAQA,EAA8B;AAAA,MACtC,SAASU,EAAqB;AAAA,MAC9B,SAAST,EAAuB;AAAA,MAChC,UAAUS,EAAqB;AAAA,MAC/B,OAAOA,EAAqB;AAAA,MAC5B,OAAOF,EAAe;AAAA,MACtB,MAAME,EAAqB;AAAA,MAC3B,OAAOT,EAAuB;AAAA,MAC9B,WAAWA,EAAuB;AAAA,IACxC;AAAA,IACI,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMX,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,QAAQ,UAAU,SAAS3C,CAAgB;AAAA,MAC5D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,MAKvB,SAAS,CAAC;AAAA,QACR,SAAS,CAACC,CAAY;AAAA,MAC9B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,eAAekD,GAAS;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgBA,GAAS;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgB,CAAC,QAAQ,SAAS,cAAc,cAAc;AAAA,MACtE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAAC,SAAS,OAAO;AAAA,MAC3C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,KAAK,CAAC;AAAA,QACJ,KAAK,CAAC,UAAU,SAAS;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC,SAAS,gBAAgB,UAAU,QAAQ,eAAe,SAAS,gBAAgB,iBAAiB,cAAc,gBAAgB,sBAAsB,sBAAsB,sBAAsB,mBAAmB,aAAa,aAAa,QAAQ,eAAe,YAAY,aAAa,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKnT,OAAO,CAAC;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ,QAAQ,SAAS,KAAK;AAAA,MACvD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAAC,QAAQ,SAAS,QAAQ,QAAQ,SAAS,KAAK;AAAA,MAC/D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC,WAAW,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKvC,cAAc,CAAC;AAAA,QACb,QAAQ,CAAC,WAAW,SAAS,QAAQ,QAAQ,YAAY;AAAA,MACjE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,QAAQ,CAAC,GAAGL,GAAY,GAAI9C,CAAgB;AAAA,MACpD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,UAAUyC,EAAW;AAAA,MAC7B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAcA,EAAW;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAcA,EAAW;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAYD,EAAa;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgBA,EAAa;AAAA,MACrC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgBA,EAAa;AAAA,MACrC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC,UAAU,SAAS,YAAY,YAAY,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,MAK9D,OAAO,CAAC;AAAA,QACN,OAAO,CAACV,CAAK;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAACA,CAAK;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAACA,CAAK;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAACA,CAAK;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,KAAK,CAAC;AAAA,QACJ,KAAK,CAACA,CAAK;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,KAAK,CAAC;AAAA,QACJ,KAAK,CAACA,CAAK;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAACA,CAAK;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAACA,CAAK;AAAA,MACtB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,MAAM,CAAC;AAAA,QACL,MAAM,CAACA,CAAK;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC,WAAW,aAAa,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,MAK/C,GAAG,CAAC;AAAA,QACF,GAAG,CAAC,QAAQhC,GAAWE,CAAgB;AAAA,MAC/C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,OAAO,CAAC;AAAA,QACN,OAAO0C,EAA8B;AAAA,MAC7C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,MAAM,CAAC,OAAO,eAAe,OAAO,aAAa;AAAA,MACzD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,MAAM,CAAC,QAAQ,gBAAgB,QAAQ;AAAA,MAC/C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,MAAM,CAAC;AAAA,QACL,MAAM,CAAC,KAAK,QAAQ,WAAW,QAAQ1C,CAAgB;AAAA,MAC/D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,MAAM,CAAC;AAAA,QACL,MAAMkD,EAAe;AAAA,MAC7B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQA,EAAe;AAAA,MAC/B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAAC,SAAS,QAAQ,QAAQpD,GAAWE,CAAgB;AAAA,MACpE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACW,CAAK;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,KAAK,CAAC,QAAQ;AAAA,UACZ,MAAM,CAAC,QAAQb,GAAWE,CAAgB;AAAA,QACpD,GAAWA,CAAgB;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa6C,GAA6B;AAAA,MAClD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAWA,GAA6B;AAAA,MAChD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAAClC,CAAK;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,KAAK,CAAC,QAAQ;AAAA,UACZ,MAAM,CAACb,GAAWE,CAAgB;AAAA,QAC5C,GAAWA,CAAgB;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa6C,GAA6B;AAAA,MAClD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAWA,GAA6B;AAAA,MAChD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAAC,OAAO,OAAO,SAAS,aAAa,WAAW;AAAA,MACrE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAAC,QAAQ,OAAO,OAAO,MAAM7C,CAAgB;AAAA,MAClE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAAC,QAAQ,OAAO,OAAO,MAAMA,CAAgB;AAAA,MAClE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,KAAK,CAAC;AAAA,QACJ,KAAK,CAAC2B,CAAG;AAAA,MACjB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAACA,CAAG;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAACA,CAAG;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,SAAS,CAAC,UAAU,GAAGsB,GAAQ,CAAE;AAAA,MACzC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,iBAAiB,CAAC,SAAS,OAAO,UAAU,SAAS;AAAA,MAC7D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgB,CAAC,QAAQ,SAAS,OAAO,UAAU,SAAS;AAAA,MACpE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,SAAS,CAAC,UAAU,GAAGA,GAAQ,GAAI,UAAU;AAAA,MACrD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,OAAO,CAAC,SAAS,OAAO,UAAU,YAAY,SAAS;AAAA,MAC/D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,MAAM,CAAC,QAAQ,SAAS,OAAO,UAAU,WAAW,UAAU;AAAA,MACtE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,iBAAiB,CAAC,GAAGA,GAAQ,GAAI,UAAU;AAAA,MACnD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,eAAe,CAAC,SAAS,OAAO,UAAU,YAAY,SAAS;AAAA,MACvE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAAC,QAAQ,SAAS,OAAO,UAAU,SAAS;AAAA,MAClE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,GAAG,CAAC;AAAA,QACF,GAAG,CAAChB,CAAO;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAO;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,GAAG,CAAC;AAAA,QACF,GAAG,CAACF,CAAM;AAAA,MAClB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,IAAI,CAAC;AAAA,QACH,IAAI,CAACA,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAACO,CAAK;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKrC,WAAW,CAAC;AAAA,QACV,WAAW,CAACA,CAAK;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMrC,GAAG,CAAC;AAAA,QACF,GAAG,CAAC,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,OAAOtC,GAAkBgB,CAAO;AAAA,MACvF,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAChB,GAAkBgB,GAAS,OAAO,OAAO,KAAK;AAAA,MAChE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAChB,GAAkBgB,GAAS,QAAQ,QAAQ,OAAO,OAAO,OAAO,SAAS;AAAA,UACjF,QAAQ,CAACf,CAAY;AAAA,QAC/B,GAAWA,CAAY;AAAA,MACvB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,GAAG,CAAC;AAAA,QACF,GAAG,CAACD,GAAkBgB,GAAS,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,MACvF,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAChB,GAAkBgB,GAAS,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,MACrF,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAChB,GAAkBgB,GAAS,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,MACrF,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,MAAM,CAAC;AAAA,QACL,MAAM,CAAChB,GAAkBgB,GAAS,QAAQ,OAAO,OAAO,KAAK;AAAA,MACrE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,aAAa,CAAC;AAAA,QACZ,MAAM,CAAC,QAAQf,GAAcP,CAAiB;AAAA,MACtD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC,eAAe,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKxD,cAAc,CAAC,UAAU,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAKrC,eAAe,CAAC;AAAA,QACd,MAAM,CAAC,QAAQ,cAAc,SAAS,UAAU,UAAU,YAAY,QAAQ,aAAa,SAASG,EAAiB;AAAA,MAC7H,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,MAAM,CAACc,CAAK;AAAA,MACpB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAK5B,eAAe,CAAC,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,MAKzB,oBAAoB,CAAC,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,MAKnC,cAAc,CAAC,eAAe,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7C,eAAe,CAAC,qBAAqB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,MAKnD,gBAAgB,CAAC,sBAAsB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK1D,UAAU,CAAC;AAAA,QACT,UAAU,CAAC,WAAW,SAAS,UAAU,QAAQ,SAAS,UAAUX,CAAgB;AAAA,MAC5F,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAAC,QAAQP,GAAUI,EAAiB;AAAA,MAC1D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAC,QAAQ,SAAS,QAAQ,UAAU,WAAW,SAASL,GAAUQ,CAAgB;AAAA,MACnG,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAAC,QAAQA,CAAgB;AAAA,MAC/C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,MAAM,CAAC,QAAQ,QAAQ,WAAWA,CAAgB;AAAA,MAC1D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,uBAAuB,CAAC;AAAA,QACtB,MAAM,CAAC,UAAU,SAAS;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,qBAAqB,CAAC;AAAA,QACpB,aAAa,CAACe,CAAM;AAAA,MAC5B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,uBAAuB,CAAC;AAAA,QACtB,uBAAuB,CAACiB,CAAO;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,MAAM,CAAC,QAAQ,UAAU,SAAS,WAAW,SAAS,KAAK;AAAA,MACnE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,MAAM,CAACjB,CAAM;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgB,CAACiB,CAAO;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC,aAAa,YAAY,gBAAgB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,MAK3E,yBAAyB,CAAC;AAAA,QACxB,YAAY,CAAC,GAAGe,GAAa,GAAI,MAAM;AAAA,MAC/C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,6BAA6B,CAAC;AAAA,QAC5B,YAAY,CAAC,QAAQ,aAAavD,GAAUE,CAAiB;AAAA,MACrE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC;AAAA,QACnB,oBAAoB,CAAC,QAAQF,GAAUQ,CAAgB;AAAA,MAC/D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,yBAAyB,CAAC;AAAA,QACxB,YAAY,CAACe,CAAM;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC,aAAa,aAAa,cAAc,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAKxE,iBAAiB,CAAC,YAAY,iBAAiB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,MAK1D,aAAa,CAAC;AAAA,QACZ,MAAM,CAAC,QAAQ,UAAU,WAAW,QAAQ;AAAA,MACpD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ4B,EAAuB;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,OAAO,CAAC,YAAY,OAAO,UAAU,UAAU,YAAY,eAAe,OAAO,SAAS3C,CAAgB;AAAA,MAClH,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAY,CAAC,UAAU,UAAU,OAAO,YAAY,YAAY,cAAc;AAAA,MACtF,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAAC,UAAU,SAAS,OAAO,MAAM;AAAA,MAChD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAC,QAAQ,UAAU,MAAM;AAAA,MAC1C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAC,QAAQA,CAAgB;AAAA,MAC1C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,iBAAiB,CAAC;AAAA,QAChB,IAAI,CAAC,SAAS,SAAS,QAAQ;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAAC,UAAU,WAAW,WAAW,MAAM;AAAA,MAC1D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,cAAc,CAAC;AAAA,QACb,cAAc,CAACgC,CAAO;AAAA,MAC9B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAAC,UAAU,WAAW,SAAS;AAAA,MACpD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,IAAI,CAAC,GAAGc,GAAY,GAAIzC,EAAmB;AAAA,MACnD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,IAAI,CAAC,aAAa;AAAA,UAChB,QAAQ,CAAC,IAAI,KAAK,KAAK,SAAS,OAAO;AAAA,QACjD,CAAS;AAAA,MACT,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,IAAI,CAAC,QAAQ,SAAS,WAAWF,EAAe;AAAA,MACxD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,IAAI,CAAC,QAAQ;AAAA,UACX,eAAe,CAAC,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI;AAAA,QACpE,GAAWI,EAAgB;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,IAAI,CAACQ,CAAM;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,qBAAqB,CAAC;AAAA,QACpB,MAAM,CAACc,CAA0B;AAAA,MACzC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC;AAAA,QACnB,KAAK,CAACA,CAA0B;AAAA,MACxC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,IAAI,CAACA,CAA0B;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,MAAM,CAACD,CAAkB;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,KAAK,CAACA,CAAkB;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,IAAI,CAACA,CAAkB;AAAA,MAC/B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,SAAS,CAAC;AAAA,QACR,SAAS,CAACR,CAAY;AAAA,MAC9B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACA,CAAY;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACA,CAAY;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACA,CAAY;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACA,CAAY;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACA,CAAY;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAACA,CAAY;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACA,CAAY;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,QAAQ,CAACE,CAAW;AAAA,MAC5B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAACU,CAAO;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,QAAQ,CAAC,GAAGe,GAAa,GAAI,QAAQ;AAAA,MAC7C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAY,CAACzB,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKvC,YAAY,CAAC;AAAA,QACX,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKvC,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAACU,CAAO;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,QAAQe,GAAa;AAAA,MAC7B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,QAAQ,CAAC5B,CAAW;AAAA,MAC5B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,YAAY,CAACA,CAAW;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,QAAQ,CAACA,CAAW;AAAA,MAC5B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,SAAS,CAAC,IAAI,GAAG4B,GAAa,CAAE;AAAA,MACxC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAACvD,GAAUQ,CAAgB;AAAA,MACrD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,SAAS,CAACR,GAAUE,CAAiB;AAAA,MAC7C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,SAAS,CAACqB,CAAM;AAAA,MACxB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,MAAM6B,GAA8B;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7B,cAAc,CAAC;AAAA,QACb,MAAM,CAAC7B,CAAM;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,gBAAgB,CAACiB,CAAO;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,eAAe,CAACxC,GAAUE,CAAiB;AAAA,MACnD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,qBAAqB,CAAC;AAAA,QACpB,eAAe,CAACqB,CAAM;AAAA,MAC9B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,IAAI,SAAS,QAAQd,GAAcQ,EAAiB;AAAA,MACrE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,QAAQ,CAACE,CAAK;AAAA,MACtB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAACqB,CAAO;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAa,CAAC,GAAGgB,GAAa,GAAI,gBAAgB,aAAa;AAAA,MACvE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAYA,GAAa;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,IAAI,MAAM;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,MAAM,CAAC;AAAA,QACL,MAAM,CAAC/B,CAAI;AAAA,MACnB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAY,CAACC,CAAU;AAAA,MAC/B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,UAAU,CAACK,CAAQ;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,eAAe,CAAC,IAAI,QAAQtB,GAAcD,CAAgB;AAAA,MAClE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAACwB,CAAS;AAAA,MAC7B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,cAAc,CAACC,CAAS;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAACC,CAAM;AAAA,MACvB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,UAAU,CAACQ,CAAQ;AAAA,MAC3B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAACE,CAAK;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,mBAAmB,CAAC;AAAA,QAClB,mBAAmB,CAAC,IAAI,MAAM;AAAA,MACtC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,iBAAiB,CAAC;AAAA,QAChB,iBAAiB,CAACnB,CAAI;AAAA,MAC9B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,uBAAuB,CAAC;AAAA,QACtB,uBAAuB,CAACC,CAAU;AAAA,MAC1C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,qBAAqB,CAAC;AAAA,QACpB,qBAAqB,CAACK,CAAQ;AAAA,MACtC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,sBAAsB,CAAC;AAAA,QACrB,sBAAsB,CAACC,CAAS;AAAA,MACxC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,uBAAuB,CAAC;AAAA,QACtB,uBAAuB,CAACC,CAAS;AAAA,MACzC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,mBAAmB,CAACC,CAAM;AAAA,MAClC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC;AAAA,QACnB,oBAAoB,CAACM,CAAO;AAAA,MACpC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,qBAAqB,CAAC;AAAA,QACpB,qBAAqB,CAACE,CAAQ;AAAA,MACtC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAACE,CAAK;AAAA,MAChC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,mBAAmB,CAAC;AAAA,QAClB,QAAQ,CAAC,YAAY,UAAU;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAACf,CAAa;AAAA,MACxC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC;AAAA,QACnB,oBAAoB,CAACA,CAAa;AAAA,MAC1C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC;AAAA,QACnB,oBAAoB,CAACA,CAAa;AAAA,MAC1C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,gBAAgB,CAAC;AAAA,QACf,OAAO,CAAC,QAAQ,OAAO;AAAA,MAC/B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAC,OAAO,QAAQ;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,YAAY,CAAC;AAAA,QACX,YAAY,CAAC,QAAQ,OAAO,IAAI,UAAU,WAAW,UAAU,aAAarB,CAAgB;AAAA,MACpG,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,UAAUoD,EAAqB;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,MAAM,CAAC;AAAA,QACL,MAAM,CAAC,UAAU,MAAM,OAAO,UAAUpD,CAAgB;AAAA,MAChE,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAOoD,EAAqB;AAAA,MACpC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,SAAS,CAAC;AAAA,QACR,SAAS,CAAC,QAAQ,QAAQ,QAAQ,SAAS,UAAUpD,CAAgB;AAAA,MAC7E,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,WAAW,CAAC;AAAA,QACV,WAAW,CAAC,IAAI,OAAO,MAAM;AAAA,MACrC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAACmC,CAAK;AAAA,MACrB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAACA,CAAK;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,WAAW,CAACA,CAAK;AAAA,MACzB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAACrC,GAAWE,CAAgB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,eAAe,CAACuC,CAAS;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,eAAe,CAACA,CAAS;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,UAAU,CAACF,CAAI;AAAA,MACvB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,UAAU,CAAC;AAAA,QACT,UAAU,CAACA,CAAI;AAAA,MACvB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,oBAAoB,CAAC;AAAA,QACnB,QAAQ,CAAC,UAAU,OAAO,aAAa,SAAS,gBAAgB,UAAU,eAAe,QAAQ,YAAYrC,CAAgB;AAAA,MACrI,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,QAAQe,CAAM;AAAA,MAC/B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAY,CAAC,QAAQ,MAAM;AAAA,MACnC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,QAAQ,WAAW,WAAW,QAAQ,QAAQ,QAAQ,QAAQ,eAAe,QAAQ,gBAAgB,YAAY,QAAQ,aAAa,iBAAiB,SAAS,QAAQ,WAAW,QAAQ,YAAY,cAAc,cAAc,cAAc,YAAY,YAAY,YAAY,YAAY,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,eAAe,eAAe,WAAW,YAAYf,CAAgB;AAAA,MACrc,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,OAAO,CAACe,CAAM;AAAA,MACtB,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,kBAAkB,CAAC;AAAA,QACjB,kBAAkB,CAAC,QAAQ,MAAM;AAAA,MACzC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,QAAQ,KAAK,KAAK,EAAE;AAAA,MACrC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,QAAQ,CAAC,QAAQ,QAAQ;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAY4B,EAAuB;AAAA,MAC3C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,YAAYA,EAAuB;AAAA,MAC3C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,aAAaA,EAAuB;AAAA,MAC5C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,cAAc,CAAC;AAAA,QACb,MAAM,CAAC,SAAS,OAAO,UAAU,YAAY;AAAA,MACrD,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,MAAM,CAAC,UAAU,QAAQ;AAAA,MACjC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,aAAa,CAAC;AAAA,QACZ,MAAM,CAAC,QAAQ,KAAK,KAAK,MAAM;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,mBAAmB,CAAC;AAAA,QAClB,MAAM,CAAC,aAAa,WAAW;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,OAAO,CAAC;AAAA,QACN,OAAO,CAAC,QAAQ,QAAQ,cAAc;AAAA,MAC9C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,aAAa,CAAC,KAAK,QAAQ,OAAO;AAAA,MAC1C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,WAAW,CAAC;AAAA,QACV,aAAa,CAAC,KAAK,MAAM,MAAM;AAAA,MACvC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK/B,QAAQ,CAAC;AAAA,QACP,QAAQ,CAAC,QAAQ,QAAQ,OAAO,MAAM;AAAA,MAC9C,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,eAAe,CAAC;AAAA,QACd,eAAe,CAAC,QAAQ,UAAU,YAAY,aAAa3C,CAAgB;AAAA,MACnF,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,MAAM,CAAC;AAAA,QACL,MAAM,CAACe,GAAQ,MAAM;AAAA,MAC7B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,YAAY,CAAC;AAAA,QACX,QAAQ,CAACvB,GAAUE,GAAmBG,EAAiB;AAAA,MAC/D,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,QAAQ,CAAC;AAAA,QACP,QAAQ,CAACkB,GAAQ,MAAM;AAAA,MAC/B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMD,IAAI,CAAC,WAAW,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7B,uBAAuB,CAAC;AAAA,QACtB,uBAAuB,CAAC,QAAQ,MAAM;AAAA,MAC9C,CAAO;AAAA,IACP;AAAA,IACI,wBAAwB;AAAA,MACtB,UAAU,CAAC,cAAc,YAAY;AAAA,MACrC,YAAY,CAAC,gBAAgB,cAAc;AAAA,MAC3C,OAAO,CAAC,WAAW,WAAW,SAAS,OAAO,OAAO,SAAS,UAAU,MAAM;AAAA,MAC9E,WAAW,CAAC,SAAS,MAAM;AAAA,MAC3B,WAAW,CAAC,OAAO,QAAQ;AAAA,MAC3B,MAAM,CAAC,SAAS,QAAQ,QAAQ;AAAA,MAChC,KAAK,CAAC,SAAS,OAAO;AAAA,MACtB,GAAG,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAAA,MAClD,IAAI,CAAC,MAAM,IAAI;AAAA,MACf,IAAI,CAAC,MAAM,IAAI;AAAA,MACf,GAAG,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAAA,MAClD,IAAI,CAAC,MAAM,IAAI;AAAA,MACf,IAAI,CAAC,MAAM,IAAI;AAAA,MACf,MAAM,CAAC,KAAK,GAAG;AAAA,MACf,aAAa,CAAC,SAAS;AAAA,MACvB,cAAc,CAAC,eAAe,oBAAoB,cAAc,eAAe,cAAc;AAAA,MAC7F,eAAe,CAAC,YAAY;AAAA,MAC5B,oBAAoB,CAAC,YAAY;AAAA,MACjC,cAAc,CAAC,YAAY;AAAA,MAC3B,eAAe,CAAC,YAAY;AAAA,MAC5B,gBAAgB,CAAC,YAAY;AAAA,MAC7B,cAAc,CAAC,WAAW,UAAU;AAAA,MACpC,SAAS,CAAC,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,YAAY;AAAA,MACtM,aAAa,CAAC,cAAc,YAAY;AAAA,MACxC,aAAa,CAAC,cAAc,YAAY;AAAA,MACxC,aAAa,CAAC,cAAc,YAAY;AAAA,MACxC,aAAa,CAAC,cAAc,YAAY;AAAA,MACxC,aAAa,CAAC,cAAc,YAAY;AAAA,MACxC,aAAa,CAAC,cAAc,YAAY;AAAA,MACxC,kBAAkB,CAAC,oBAAoB,kBAAkB;AAAA,MACzD,YAAY,CAAC,cAAc,cAAc,cAAc,cAAc,cAAc,YAAY;AAAA,MAC/F,cAAc,CAAC,cAAc,YAAY;AAAA,MACzC,cAAc,CAAC,cAAc,YAAY;AAAA,MACzC,gBAAgB,CAAC,kBAAkB,kBAAkB,kBAAkB,kBAAkB,kBAAkB,gBAAgB;AAAA,MAC3H,kBAAkB,CAAC,kBAAkB,gBAAgB;AAAA,MACrD,kBAAkB,CAAC,kBAAkB,gBAAgB;AAAA,MACrD,YAAY,CAAC,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW;AAAA,MACnH,aAAa,CAAC,aAAa,WAAW;AAAA,MACtC,aAAa,CAAC,aAAa,WAAW;AAAA,MACtC,YAAY,CAAC,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,aAAa,WAAW;AAAA,MACnH,aAAa,CAAC,aAAa,WAAW;AAAA,MACtC,aAAa,CAAC,aAAa,WAAW;AAAA,MACtC,OAAO,CAAC,WAAW,WAAW,UAAU;AAAA,MACxC,WAAW,CAAC,OAAO;AAAA,MACnB,WAAW,CAAC,OAAO;AAAA,MACnB,YAAY,CAAC,OAAO;AAAA,IAC1B;AAAA,IACI,gCAAgC;AAAA,MAC9B,aAAa,CAAC,SAAS;AAAA,IAC7B;AAAA,EACA;AACA,GAiDMsC,KAAuB,gBAAAlF,GAAoB2C,EAAgB;ACz/E1D,SAASwC,KAAMC,GAAsB;AAC1C,SAAOF,GAAQpM,GAAKsM,CAAM,CAAC;AAC7B;ACCA,MAAMC,KAAiBnM;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,MAER,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAQMoM,IAASC,EAAM;AAAA,EACnB,CAAC,EAAE,WAAA3K,GAAW,SAAAlB,GAAS,MAAA8L,GAAM,SAAAC,IAAU,IAAO,GAAGpM,EAAA,GAASqM,MAGtD,gBAAAC;AAAA,IAFWF,IAAUG,KAAO;AAAA,IAE3B;AAAA,MACC,WAAWT,EAAGE,GAAe,EAAE,SAAA3L,GAAS,MAAA8L,GAAM,WAAA5K,EAAA,CAAW,CAAC;AAAA,MAC1D,KAAA8K;AAAA,MACC,GAAGrM;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAiM,EAAO,cAAc;ACjDrB,MAAMO,IAAQN,EAAM;AAAA,EAClB,CAAC,EAAE,WAAA3K,GAAW,MAAAkL,GAAM,GAAGzM,EAAA,GAASqM,MAE5B,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAAG;AAAA,MACA,WAAWX;AAAA,QACT;AAAA,QACAvK;AAAA,MAAA;AAAA,MAEF,KAAA8K;AAAA,MACC,GAAGrM;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAwM,EAAM,cAAc;ACdpB,MAAME,KAAkBC,EAAiB,UAEnCC,KAAUD,EAAiB,MAE3BE,KAAiBF,EAAiB,SAElCG,KAAiBZ,EAAM,WAG3B,CAAC,EAAE,WAAA3K,GAAW,YAAAwL,IAAa,GAAG,GAAG/M,KAASqM,MAC1C,gBAAAC,EAACK,EAAiB,QAAjB,EACC,UAAA,gBAAAL;AAAA,EAACK,EAAiB;AAAA,EAAjB;AAAA,IACC,KAAAN;AAAA,IACA,YAAAU;AAAA,IACA,WAAWjB;AAAA,MACT;AAAA,MACAvK;AAAA,IAAA;AAAA,IAED,GAAGvB;AAAA,EAAA;AACN,EAAA,CACF,CACD;AACD8M,GAAe,cAAcH,EAAiB,QAAQ;ACpBtD,MAAMK,KAASC,EAAgB,MAIzBC,KAAcD,EAAgB,OAE9BE,KAAgBjB,EAAM,WAG1B,CAAC,EAAE,WAAA3K,GAAW,UAAA6L,GAAU,GAAGpN,KAASqM,MACpC,gBAAAgB;AAAA,EAACJ,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAZ;AAAA,IACA,WAAWP;AAAA,MACT;AAAA,MACAvK;AAAA,IAAA;AAAA,IAED,GAAGvB;AAAA,IAEH,UAAA;AAAA,MAAAoN;AAAA,MACD,gBAAAd,EAACW,EAAgB,MAAhB,EAAqB,SAAO,IAC3B,UAAA,gBAAAX,EAACgB,IAAA,EAAY,WAAU,qBAAA,CAAqB,EAAA,CAC9C;AAAA,IAAA;AAAA,EAAA;AACF,CACD;AACDH,GAAc,cAAcF,EAAgB,QAAQ;AAEpD,MAAMM,KAAuBrB,EAAM,WAGjC,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAACW,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAZ;AAAA,IACA,WAAWP;AAAA,MACT;AAAA,MACAvK;AAAA,IAAA;AAAA,IAED,GAAGvB;AAAA,IAEJ,UAAA,gBAAAsM,EAACkB,IAAA,EAAU,WAAU,UAAA,CAAU;AAAA,EAAA;AACjC,CACD;AACDD,GAAqB,cAAcN,EAAgB,eAAe;AAElE,MAAMQ,KAAyBvB,EAAM,WAGnC,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAACW,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAZ;AAAA,IACA,WAAWP;AAAA,MACT;AAAA,MACAvK;AAAA,IAAA;AAAA,IAED,GAAGvB;AAAA,IAEJ,UAAA,gBAAAsM,EAACgB,IAAA,EAAY,WAAU,UAAA,CAAU;AAAA,EAAA;AACnC,CACD;AACDG,GAAuB,cACrBR,EAAgB,iBAAiB;AAEnC,MAAMS,KAAgBxB,EAAM,WAG1B,CAAC,EAAE,WAAA3K,GAAW,UAAA6L,GAAU,UAAAO,IAAW,UAAU,GAAG3N,KAASqM,MACzD,gBAAAC,EAACW,EAAgB,QAAhB,EACC,UAAA,gBAAAI;AAAA,EAACJ,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAZ;AAAA,IACA,WAAWP;AAAA,MACT;AAAA,MACA6B,MAAa,YACX;AAAA,MACFpM;AAAA,IAAA;AAAA,IAEF,UAAAoM;AAAA,IACC,GAAG3N;AAAA,IAEJ,UAAA;AAAA,MAAA,gBAAAsM,EAACiB,IAAA,EAAqB;AAAA,MACtB,gBAAAjB;AAAA,QAACW,EAAgB;AAAA,QAAhB;AAAA,UACC,WAAWnB;AAAA,YACT;AAAA,YACA6B,MAAa,YACX;AAAA,UAAA;AAAA,UAGH,UAAAP;AAAA,QAAA;AAAA,MAAA;AAAA,wBAEFK,IAAA,CAAA,CAAuB;AAAA,IAAA;AAAA,EAAA;AAC1B,EAAA,CACF,CACD;AACDC,GAAc,cAAcT,EAAgB,QAAQ;AAEpD,MAAMW,KAAc1B,EAAM,WAGxB,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAACW,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAZ;AAAA,IACA,WAAWP,EAAG,qCAAqCvK,CAAS;AAAA,IAC3D,GAAGvB;AAAA,EAAA;AACN,CACD;AACD4N,GAAY,cAAcX,EAAgB,MAAM;AAEhD,MAAMY,IAAa3B,EAAM,WAGvB,CAAC,EAAE,WAAA3K,GAAW,UAAA6L,GAAU,GAAGpN,KAASqM,MACpC,gBAAAgB;AAAA,EAACJ,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAZ;AAAA,IACA,WAAWP;AAAA,MACT;AAAA,MACAvK;AAAA,IAAA;AAAA,IAED,GAAGvB;AAAA,IAEJ,UAAA;AAAA,MAAA,gBAAAsM,EAAC,QAAA,EAAK,WAAU,iEACd,UAAA,gBAAAA,EAACW,EAAgB,eAAhB,EACC,UAAA,gBAAAX,EAACwB,IAAA,EAAM,WAAU,UAAA,CAAU,EAAA,CAC7B,GACF;AAAA,MACA,gBAAAxB,EAACW,EAAgB,UAAhB,EAA0B,UAAAG,EAAA,CAAS;AAAA,IAAA;AAAA,EAAA;AACtC,CACD;AACDS,EAAW,cAAcZ,EAAgB,KAAK;AAE9C,MAAMc,KAAkB7B,EAAM,WAG5B,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAACW,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAAZ;AAAA,IACA,WAAWP,EAAG,4BAA4BvK,CAAS;AAAA,IAClD,GAAGvB;AAAA,EAAA;AACN,CACD;AACD+N,GAAgB,cAAcd,EAAgB,UAAU;ACzIxD,MAAMe,KAASC,EAAgB,MAIzBC,KAAeD,EAAgB,QAI/BE,KAAgBjC,EAAM,WAG1B,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAAC2B,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAA5B;AAAA,IACA,WAAWP;AAAA,MACT;AAAA,MACAvK;AAAA,IAAA;AAAA,IAED,GAAGvB;AAAA,EAAA;AACN,CACD;AACDmO,GAAc,cAAcF,EAAgB,QAAQ;AAEpD,MAAMG,KAAgBlC,EAAM,WAG1B,CAAC,EAAE,WAAA3K,GAAW,UAAA6L,GAAU,GAAGpN,EAAA,GAASqM,MACpC,gBAAAgB,EAACa,IAAA,EACC,UAAA;AAAA,EAAA,gBAAA5B,EAAC6B,IAAA,EAAc;AAAA,EACf,gBAAAd;AAAA,IAACY,EAAgB;AAAA,IAAhB;AAAA,MACC,KAAA5B;AAAA,MACA,WAAWP;AAAA,QACT;AAAA,QACAvK;AAAA,MAAA;AAAA,MAED,GAAGvB;AAAA,MAEH,UAAA;AAAA,QAAAoN;AAAA,QACD,gBAAAC,EAACY,EAAgB,OAAhB,EAAsB,WAAU,iRAC/B,UAAA;AAAA,UAAA,gBAAA3B,EAAC+B,IAAA,EAAE,WAAU,UAAA,CAAU;AAAA,UACvB,gBAAA/B,EAAC,QAAA,EAAK,WAAU,WAAU,UAAA,QAAA,CAAK;AAAA,QAAA,EAAA,CACjC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AACF,EAAA,CACF,CACD;AACD8B,GAAc,cAAcH,EAAgB,QAAQ;AAEpD,MAAMK,KAAe,CAAC;AAAA,EACpB,WAAA/M;AAAA,EACA,GAAGvB;AACL,MACE,gBAAAsM;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWR;AAAA,MACT;AAAA,MACAvK;AAAA,IAAA;AAAA,IAED,GAAGvB;AAAA,EAAA;AACN;AAEFsO,GAAa,cAAc;AAE3B,MAAMC,KAAe,CAAC;AAAA,EACpB,WAAAhN;AAAA,EACA,GAAGvB;AACL,MACE,gBAAAsM;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWR;AAAA,MACT;AAAA,MACAvK;AAAA,IAAA;AAAA,IAED,GAAGvB;AAAA,EAAA;AACN;AAEFuO,GAAa,cAAc;AAE3B,MAAMC,KAActC,EAAM,WAGxB,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAAC2B,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAA5B;AAAA,IACA,WAAWP;AAAA,MACT;AAAA,MACAvK;AAAA,IAAA;AAAA,IAED,GAAGvB;AAAA,EAAA;AACN,CACD;AACDwO,GAAY,cAAcP,EAAgB,MAAM;AAEhD,MAAMQ,KAAoBvC,EAAM,WAG9B,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAAC2B,EAAgB;AAAA,EAAhB;AAAA,IACC,KAAA5B;AAAA,IACA,WAAWP,EAAG,iCAAiCvK,CAAS;AAAA,IACvD,GAAGvB;AAAA,EAAA;AACN,CACD;AACDyO,GAAkB,cAAcR,EAAgB,YAAY;ACrG5D,MAAMS,KAAgB7O;AAAA,EACpB;AACF,GAEM8O,IAAQzC,EAAM,WAIlB,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAACsC,GAAe;AAAA,EAAf;AAAA,IACC,KAAAvC;AAAA,IACA,WAAWP,EAAG4C,GAAA,GAAiBnN,CAAS;AAAA,IACvC,GAAGvB;AAAA,EAAA;AACN,CACD;AACD2O,EAAM,cAAcC,GAAe,KAAK;AChBxC,MAAMC,KAAW3C,EAAM,WAGrB,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAACwC,GAAkB;AAAA,EAAlB;AAAA,IACC,KAAAzC;AAAA,IACA,WAAWP;AAAA,MACT;AAAA,MACAvK;AAAA,IAAA;AAAA,IAED,GAAGvB;AAAA,IAEJ,UAAA,gBAAAsM;AAAA,MAACwC,GAAkB;AAAA,MAAlB;AAAA,QACC,WAAWhD,EAAG,wCAAwC;AAAA,QAEtD,UAAA,gBAAAQ,EAACwB,IAAA,EAAM,WAAU,UAAA,CAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EAC7B;AACF,CACD;AACDe,GAAS,cAAcC,GAAkB,KAAK;ACpB9C,MAAMC,KAAW7C,EAAM,WAGrB,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAExB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWR;AAAA,MACT;AAAA,MACAvK;AAAA,IAAA;AAAA,IAEF,KAAA8K;AAAA,IACC,GAAGrM;AAAA,EAAA;AAAA,CAGT;AACD+O,GAAS,cAAc;ACThB,MAAMC,KAAc,CAACC,MACnBA,EACJ,OACA,cACA,QAAQ,YAAY,EAAE,EACtB,QAAQ,QAAQ,GAAG,GCHXC,KAAoB,CAC/B3M,GACA4M,GACAC,IAAyB,IACzBC,IAAuB,OACK;AAC5B,QAAMC,IAAoB,CAACC,GAA2B5P,MAAe;AACnE,IAAAwP,EAAS,EAAE,GAAG5M,GAAU,CAACgN,CAAK,GAAG5P,GAAO;AAAA,EAC1C;AA6BA,SAAO;AAAA,IACL,mBA5BwB,CAAC6P,MAAkB;AAC3C,MAAAF,EAAkB,SAASE,CAAK;AAAA,IAClC;AAAA,IA2BE,iBAzBsB,MAAM;AAG5B,UAAIJ,KAAiB7M,EAAS,OAAO;AACnC,cAAMkN,IAAUT,GAAYzM,EAAS,KAAK;AAC1C,QAAA+M,EAAkB,OAAOG,CAAO;AAAA,MAClC;AAAA,IACF;AAAA,IAmBE,iBAjBsB,CAAC7O,MAAgB;AAEvC,OAAIwO,KAAiBC,MACnBC,EAAkB,OAAO1O,CAAG;AAAA,IAEhC;AAAA,IAaE,mBAAA0O;AAAA,IACA,wBAZ6B,CAACC,GAAe5P,MAAe;AAC5D,MAAAwP,EAAS;AAAA,QACP,GAAG5M;AAAA,QACH,CAACgN,CAAK,GAAG5P;AAAA,MAAA,CACV;AAAA,IACH;AAAA,EAOE;AAEJ,GCnDM+P,KAAkD;AAAA,EACtD,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AACR,GAOMC,KAAoBC,GAAsC;AAAA,EAC9D,cAAc,CAACnD,MAASiD,GAAkBjD,CAAI;AAAA,EAC9C,YAAYiD;AACd,CAAC;AAEM,SAASG,GAAmB;AAAA,EACjC,UAAAzC;AAAA,EACA,cAAA0C,IAAe,CAAA;AACjB,GAGG;AACD,QAAMC,IAAa,EAAE,GAAGL,IAAmB,GAAGI,EAAA,GAExCE,IAAe,CAACvD,MACbsD,EAAWtD,CAAI,KAAKA;AAG7B,SACE,gBAAAH,EAACqD,GAAkB,UAAlB,EAA2B,OAAO,EAAE,cAAAK,GAAc,YAAAD,KAChD,UAAA3C,GACH;AAEJ;AAEO,SAAS6C,KAAgB;AAC9B,SAAOC,GAAWP,EAAiB;AACrC;ACZA,SAAwBQ,GAAmB;AAAA,EACzC,UAAA5N;AAAA,EACA,MAAA6N;AAAA,EACA,cAAAC;AAAA,EACA,UAAAlB;AAAA,EACA,aAAAmB,IAAc;AAAA,EACd,eAAAlB,IAAgB;AAAA,EAChB,eAAAmB,IAAgB,EAAE,UAAU,YAAY,QAAQ,aAAA;AAAA,EAChD,WAAAC,IAAY;AAAA,EACZ,aAAAnB,IAAc;AAChB,GAA4B;;AAC1B,QAAM,EAAE,YAAAU,EAAA,IAAeE,GAAA,GAGjB,CAACQ,GAAeC,CAAgB,IAAIC,EAAuBpO,CAAQ;AAGzE,EAAAqO,GAAU,MAAM;AACd,IAAIR,KACFM,EAAiBnO,CAAQ;AAAA,EAE7B,GAAG,CAACA,GAAU6N,CAAI,CAAC;AAEnB,QAAM;AAAA,IACJ,mBAAAS;AAAA,IACA,iBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,mBAAAzB;AAAA,IACA,wBAAA0B;AAAA,EAAA,IACE9B,GAAkBuB,GAAeC,GAAkBtB,GAAeC,CAAW,GAE3E4B,IAAa,MAAM;;AACvB,KAAI9O,IAAAsO,EAAc,UAAd,QAAAtO,EAAqB,WACvBgN,EAASsB,CAAa,GACtBJ,EAAa,EAAK;AAAA,EAEtB,GAEMa,IAAe,MAAM;AACzB,IAAAR,EAAiBnO,CAAQ,GACzB8N,EAAa,EAAK;AAAA,EACpB;AAEA,SACE,gBAAA/D,EAAC0B,IAAA,EAAO,MAAAoC,GAAY,cAAAC,GAClB,UAAA,gBAAAhD;AAAA,IAACe;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,eAAY;AAAA,MAEZ,UAAA;AAAA,QAAA,gBAAA9B,EAACgC,IAAA,EAAa,WAAU,2BACtB,UAAA,gBAAAhC,EAACkC,MACE,UAAAY,IACG,OAAOmB,EAAc,QAAQ,KAC7B,QAAQA,EAAc,QAAQ,IACpC,GACF;AAAA,QACA,gBAAAlD,EAAC,OAAA,EAAI,WAAU,sDAEb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,YAAA,gBAAAA,EAACsB,GAAA,EAAM,WAAU,6BACf,UAAA;AAAA,cAAA,gBAAArC,EAAC,QAAA,EAAK,WAAU,sCAAA,CAAsC;AAAA,cAAO;AAAA,YAAA,GAE/D;AAAA,YACA,gBAAAe;AAAA,cAACL;AAAA,cAAA;AAAA,gBACC,OAAOyD,EAAc;AAAA,gBACrB,eAAe,CAAC9Q,MAAU2P,EAAkB,QAAQ3P,CAAK;AAAA,gBACzD,eAAY;AAAA,gBAEZ,UAAA;AAAA,kBAAA,gBAAA2M,EAACa,IAAA,EACC,UAAA,gBAAAb,EAACY,IAAA,CAAA,CAAY,GACf;AAAA,oCACCQ,IAAA,EACC,UAAA;AAAA,oBAAA,gBAAApB,EAACuB,GAAA,EAAW,OAAM,UAAU,UAAAkC,EAAW,QAAO;AAAA,oBAC9C,gBAAAzD,EAACuB,GAAA,EAAW,OAAM,UAAU,YAAW,QAAO;AAAA,oBAC9C,gBAAAvB,EAACuB,GAAA,EAAW,OAAM,WAAW,YAAW,SAAQ;AAAA,oBAChD,gBAAAvB,EAACuB,GAAA,EAAW,OAAM,WAAW,YAAW,SAAQ;AAAA,oBAChD,gBAAAvB,EAACuB,GAAA,EAAW,OAAM,UAAU,YAAW,QAAO;AAAA,oBAC9C,gBAAAvB,EAACuB,GAAA,EAAW,OAAM,SAAS,YAAW,OAAM;AAAA,oBAC5C,gBAAAvB,EAACuB,GAAA,EAAW,OAAM,QAAQ,YAAW,MAAK;AAAA,oBAC1C,gBAAAvB,EAACuB,GAAA,EAAW,OAAM,QAAQ,YAAW,KAAA,CAAK;AAAA,kBAAA,EAAA,CAC5C;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,GACF;AAAA,UAGA,gBAAAR,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,YAAA,gBAAAA,EAACsB,GAAA,EAAM,WAAU,6BACf,UAAA;AAAA,cAAA,gBAAArC,EAAC,QAAA,EAAK,WAAU,sCAAA,CAAsC;AAAA,cAAO;AAAA,YAAA,GAE/D;AAAA,YACA,gBAAAA;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAOiE,EAAc,SAAS;AAAA,gBAC9B,UAAU,CAACU,MAAMN,EAAkBM,EAAE,OAAO,KAAK;AAAA,gBACjD,QAAQL;AAAA,gBACR,aAAY;AAAA,gBACZ,eAAY;AAAA,gBACZ,UAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,YAET,CAAC1B,KAAiBqB,EAAc,OAC/B,gBAAApD,EAAC,KAAA,EAAE,WAAU,2CAA0C,UAAA;AAAA,cAAA;AAAA,cAC/CoD,EAAc;AAAA,YAAA,EAAA,CACtB;AAAA,UAAA,GAEJ;AAAA,WAGErB,KAAiBC,MACjB,gBAAAhC,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,YAAA,gBAAAf,EAACqC,KAAM,UAAA,MAAA,CAAG;AAAA,YACV,gBAAArC;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAOiE,EAAc;AAAA,gBACrB,UAAU,CAACU,MAAMJ,EAAgBI,EAAE,OAAO,KAAK;AAAA,gBAC/C,aAAY;AAAA,gBACZ,eAAY;AAAA,cAAA;AAAA,YAAA;AAAA,YAEb,CAAC/B,KACA,gBAAA9C,EAAC,KAAA,EAAE,WAAU,gDAA+C,UAAA,qEAAA,CAE5D;AAAA,UAAA,GAEJ;AAAA,UAIF,gBAAAe,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,YAAA,gBAAAf,EAACqC,KAAM,UAAA,cAAA,CAAW;AAAA,YAClB,gBAAArC;AAAA,cAACyC;AAAA,cAAA;AAAA,gBACC,aAAY;AAAA,gBACZ,OAAO0B,EAAc,eAAe;AAAA,gBACpC,UAAU,CAACU,MAAM7B,EAAkB,eAAe6B,EAAE,OAAO,KAAK;AAAA,gBAChE,MAAM;AAAA,gBACN,eAAY;AAAA,cAAA;AAAA,YAAA;AAAA,UACd,GACF;AAAA,UAGCV,EAAc,SAAS,WACtB,gBAAApD,EAAC,OAAA,EAAI,WAAU,gDACb,UAAA;AAAA,YAAA,gBAAAA,EAACsB,GAAA,EAAM,WAAU,+CACd,UAAA;AAAA,cAAAoB,EAAW;AAAA,cAAM;AAAA,YAAA,GACpB;AAAA,YACCU,EAAc,QACb,gBAAApD,EAAC,OAAA,EAAI,WAAU,2BAEb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,gBAAA,gBAAAf,EAACqC,KAAM,UAAA,YAAA,CAAS;AAAA,gBAChB,gBAAAtB;AAAA,kBAACL;AAAA,kBAAA;AAAA,oBACC,OAAOyD,EAAc,MAAM;AAAA,oBAC3B,eAAe,CAAC9Q,MACd+Q,EAAiB;AAAA,sBACf,GAAGD;AAAA,sBACH,OAAO;AAAA,wBACL,GAAGA,EAAc;AAAA,wBACjB,MAAM9Q;AAAA,sBAAA;AAAA,oBACR,CACD;AAAA,oBAGH,UAAA;AAAA,sBAAA,gBAAA2M,EAACa,IAAA,EACC,UAAA,gBAAAb,EAACY,IAAA,CAAA,CAAY,GACf;AAAA,wCACCQ,IAAA,EACC,UAAA;AAAA,wBAAA,gBAAApB,EAACuB,GAAA,EAAW,OAAM,UACf,UAAAkC,EAAW,QACd;AAAA,wBACA,gBAAAzD,EAACuB,GAAA,EAAW,OAAM,UACf,YAAW,QACd;AAAA,wBACA,gBAAAvB,EAACuB,GAAA,EAAW,OAAM,WACf,YAAW,SACd;AAAA,wBACA,gBAAAvB,EAACuB,GAAA,EAAW,OAAM,WACf,YAAW,SACd;AAAA,wBACA,gBAAAvB,EAACuB,GAAA,EAAW,OAAM,UACf,YAAW,QACd;AAAA,wBACA,gBAAAvB,EAACuB,GAAA,EAAW,OAAM,SACf,YAAW,OACd;AAAA,wBACA,gBAAAvB,EAACuB,GAAA,EAAW,OAAM,QAAQ,YAAW,MAAK;AAAA,wBAC1C,gBAAAvB,EAACuB,GAAA,EAAW,OAAM,QAAQ,YAAW,KAAA,CAAK;AAAA,sBAAA,EAAA,CAC5C;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF,GACF;AAAA,cACA,gBAAAR,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,gBAAA,gBAAAf,EAACqC,KAAM,UAAA,aAAA,CAAU;AAAA,gBACjB,gBAAArC;AAAA,kBAACE;AAAA,kBAAA;AAAA,oBACC,OAAOiE,EAAc,MAAM,SAAS;AAAA,oBACpC,UAAU,CAACU,MACTT,EAAiB;AAAA,sBACf,GAAGD;AAAA,sBACH,OAAO;AAAA,wBACL,GAAGA,EAAc;AAAA,wBACjB,OAAOU,EAAE,OAAO;AAAA,sBAAA;AAAA,oBAClB,CACD;AAAA,oBAEH,aAAY;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACd,GACF;AAAA,cAGA,gBAAA9D;AAAA,gBAACpB;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,SAAS,MACPyE,EAAiB,EAAE,GAAGD,GAAe,OAAO,QAAW;AAAA,kBAE1D,UAAA;AAAA,oBAAA;AAAA,oBACSV,EAAW;AAAA,oBAAM;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC3B,EAAA,CACF,IAEA,gBAAA1C;AAAA,cAACpB;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,SAAS,MAAM;AAEb,kBAAAyE,EAAiB;AAAA,oBACf,GAAGD;AAAA,oBACH,OAAO;AAAA,sBACL,IAAI,KAAK,IAAA,EAAM,SAAA,IAAa,KAAK,OAAA;AAAA,sBACjC,KAAK;AAAA,sBACL,MAAM;AAAA,sBACN,UAAU;AAAA,oBAAA;AAAA,kBACZ,CACD;AAAA,gBACH;AAAA,gBACD,UAAA;AAAA,kBAAA;AAAA,kBACMV,EAAW;AAAA,kBAAM;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACxB,GAEJ;AAAA,UAGD,CAACO,KACA,gBAAAjD,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,YAAA,gBAAAf;AAAA,cAACuC;AAAA,cAAA;AAAA,gBACC,IAAG;AAAA,gBACH,SAAS4B,EAAc;AAAA,gBACvB,iBAAiB,CAACW,MAChB9B,EAAkB,YAAY8B,CAAO;AAAA,gBAEvC,eAAY;AAAA,cAAA;AAAA,YAAA;AAAA,8BAEbzC,GAAA,EAAM,SAAQ,iBAAgB,WAAU,kBAAiB,UAAA,iBAAA,CAE1D;AAAA,UAAA,GACF;AAAA,UAGD8B,EAAc,SAAS,YACtB,gBAAApD,EAAC,WAAA,EAAQ,WAAU,qBACjB,UAAA;AAAA,YAAA,gBAAAf,EAAC,aAAQ,WAAU,2DACjB,UAAA,gBAAAe,EAAC,MAAA,EAAG,WAAU,8BACX,UAAA;AAAA,cAAA0C,EAAW;AAAA,cAAO;AAAA,YAAA,EAAA,CACrB,EAAA,CACF;AAAA,YACA,gBAAA1C,EAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,kBAAA,gBAAAf,EAACqC,GAAA,EAAM,SAAQ,cAAa,UAAA,kBAAc;AAAA,kBAC1C,gBAAArC;AAAA,oBAACE;AAAA,oBAAA;AAAA,sBACC,IAAG;AAAA,sBACH,MAAK;AAAA,sBACL,aAAY;AAAA,sBACZ,OAAOiE,EAAc,aAAa;AAAA,sBAClC,UAAU,CAACU,MACTH;AAAA,wBACE;AAAA,wBACAG,EAAE,OAAO,QAAQ,SAASA,EAAE,OAAO,KAAK,IAAI;AAAA,sBAAA;AAAA,sBAGhD,eAAY;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACd,GACF;AAAA,gBACA,gBAAA9D,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,kBAAA,gBAAAf,EAACqC,GAAA,EAAM,SAAQ,cAAa,UAAA,kBAAc;AAAA,kBAC1C,gBAAArC;AAAA,oBAACE;AAAA,oBAAA;AAAA,sBACC,IAAG;AAAA,sBACH,MAAK;AAAA,sBACL,aAAY;AAAA,sBACZ,OAAOiE,EAAc,aAAa;AAAA,sBAClC,UAAU,CAACU,MACTH;AAAA,wBACE;AAAA,wBACAG,EAAE,OAAO,QAAQ,SAASA,EAAE,OAAO,KAAK,IAAI;AAAA,sBAAA;AAAA,sBAGhD,eAAY;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACd,EAAA,CACF;AAAA,cAAA,GACF;AAAA,cACCX,KACC,gBAAAnD,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,gBAAA,gBAAAf,EAACqC,GAAA,EAAM,SAAQ,WAAU,UAAA,mBAAe;AAAA,gBACxC,gBAAArC;AAAA,kBAACE;AAAA,kBAAA;AAAA,oBACC,IAAG;AAAA,oBACH,aAAY;AAAA,oBACZ,OAAOiE,EAAc,WAAW;AAAA,oBAChC,UAAU,CAACU,MACTH,EAAuB,WAAWG,EAAE,OAAO,KAAK;AAAA,oBAElD,WAAU;AAAA,oBACV,eAAY;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACd,GACF;AAAA,cAEF,gBAAA9D,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,gBAAA,gBAAAf,EAACqC,KAAM,UAAA,cAAA,CAAW;AAAA,gBAClB,gBAAArC,EAAC,OAAA,EAAI,WAAU,aACZ,WAAC,GAAImE,EAAc,QAAQ,CAAA,GAAK,EAAE,EAAE,IAAI,CAAC9Q,GAAO8E;;AAC/C,yCAAA6H;AAAA,oBAACE;AAAA,oBAAA;AAAA,sBAEC,aACE/H,SAAWtC,IAAAsO,EAAc,SAAd,gBAAAtO,EAAoB,WAAU,KACrC,qBACA;AAAA,sBAEN,OAAAxC;AAAA,sBACA,UAAU,CAACwR,MAAM;AACf,8BAAME,IAAWF,EAAE,OAAO,OACpBG,IAAcb,EAAc,QAAQ,CAAA;AAE1C,4BAAIhM,MAAU6M,EAAY;AAExB,0BAAID,EAAS,UACXL,EAAuB,QAAQ;AAAA,4BAC7B,GAAGM;AAAA,4BACHD,EAAS,KAAA;AAAA,0BAAK,CACf;AAAA,iCAICA,EAAS,QAAQ;AACnB,gCAAME,IAAU,CAAC,GAAGD,CAAW;AAC/B,0BAAAC,EAAQ9M,CAAK,IAAI4M,EAAS,KAAA,GAC1BL,EAAuB,QAAQO,CAAO;AAAA,wBACxC,OAAO;AAEL,gCAAMA,IAAUD,EAAY;AAAA,4BAC1B,CAACE,GAAGtL,MAAMA,MAAMzB;AAAA,0BAAA;AAElB,0BAAAuM;AAAA,4BACE;AAAA,4BACAO,EAAQ,SAAS,IAAIA,IAAU;AAAA,0BAAA;AAAA,wBAEnC;AAAA,sBAEJ;AAAA,sBACA,eAAa,mBAAmB9M,CAAK;AAAA,oBAAA;AAAA,oBArChCA;AAAA,kBAAA;AAAA,iBAuCR,GACH;AAAA,gBACA,gBAAA6H,EAAC,KAAA,EAAE,WAAU,iCAAgC,UAAA,sDAAA,CAE7C;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,GACF;AAAA,WAGAmE,EAAc,SAAS,YACvBA,EAAc,SAAS,cACvB,gBAAApD,EAAC,WAAA,EAAQ,WAAU,qBACjB,UAAA;AAAA,YAAA,gBAAAf,EAAC,WAAA,EAAQ,WAAU,2DACjB,UAAA,gBAAAA,EAAC,QAAG,WAAU,8BAA6B,iCAE3C,EAAA,CACF;AAAA,8BACC,OAAA,EAAI,WAAU,sBACb,UAAA,gBAAAe,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,gBAAA,gBAAAf,EAACqC,GAAA,EAAM,SAAQ,WAAU,UAAA,iBAAa;AAAA,gBACtC,gBAAArC;AAAA,kBAACE;AAAA,kBAAA;AAAA,oBACC,IAAG;AAAA,oBACH,MAAK;AAAA,oBACL,aAAY;AAAA,oBACZ,OAAOiE,EAAc,WAAW;AAAA,oBAChC,UAAU,CAACU,MACTH;AAAA,sBACE;AAAA,sBACAG,EAAE,OAAO,QACL,WAAWA,EAAE,OAAO,KAAK,IACzB;AAAA,oBAAA;AAAA,oBAGR,eAAY;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACd,GACF;AAAA,cACA,gBAAA9D,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,gBAAA,gBAAAf,EAACqC,GAAA,EAAM,SAAQ,WAAU,UAAA,iBAAa;AAAA,gBACtC,gBAAArC;AAAA,kBAACE;AAAA,kBAAA;AAAA,oBACC,IAAG;AAAA,oBACH,MAAK;AAAA,oBACL,aAAY;AAAA,oBACZ,OAAOiE,EAAc,WAAW;AAAA,oBAChC,UAAU,CAACU,MACTH;AAAA,sBACE;AAAA,sBACAG,EAAE,OAAO,QACL,WAAWA,EAAE,OAAO,KAAK,IACzB;AAAA,oBAAA;AAAA,oBAGR,eAAY;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACd,EAAA,CACF;AAAA,YAAA,EAAA,CACF,EAAA,CACF;AAAA,UAAA,GACF;AAAA,UAGDV,EAAc,SAAS,WACtB,gBAAApD,EAAC,WAAA,EAAQ,WAAU,qBACjB,UAAA;AAAA,YAAA,gBAAAf,EAAC,aAAQ,WAAU,2DACjB,UAAA,gBAAAe,EAAC,MAAA,EAAG,WAAU,8BACX,UAAA;AAAA,cAAA0C,EAAW;AAAA,cAAM;AAAA,YAAA,EAAA,CACpB,EAAA,CACF;AAAA,YACA,gBAAA1C,EAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,kBAAA,gBAAAf,EAACqC,GAAA,EAAM,SAAQ,aAAY,UAAA,iBAAa;AAAA,kBACxC,gBAAArC;AAAA,oBAACE;AAAA,oBAAA;AAAA,sBACC,IAAG;AAAA,sBACH,MAAK;AAAA,sBACL,aAAY;AAAA,sBACZ,OAAOiE,EAAc,YAAY;AAAA,sBACjC,UAAU,CAACU,MACTH;AAAA,wBACE;AAAA,wBACAG,EAAE,OAAO,QAAQ,SAASA,EAAE,OAAO,KAAK,IAAI;AAAA,sBAAA;AAAA,sBAGhD,eAAY;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACd,GACF;AAAA,gBACA,gBAAA9D,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,kBAAA,gBAAAf,EAACqC,GAAA,EAAM,SAAQ,aAAY,UAAA,iBAAa;AAAA,kBACxC,gBAAArC;AAAA,oBAACE;AAAA,oBAAA;AAAA,sBACC,IAAG;AAAA,sBACH,MAAK;AAAA,sBACL,aAAY;AAAA,sBACZ,OAAOiE,EAAc,YAAY;AAAA,sBACjC,UAAU,CAACU,MACTH;AAAA,wBACE;AAAA,wBACAG,EAAE,OAAO,QAAQ,SAASA,EAAE,OAAO,KAAK,IAAI;AAAA,sBAAA;AAAA,sBAGhD,eAAY;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACd,EAAA,CACF;AAAA,cAAA,GACF;AAAA,cACA,gBAAA9D,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,gBAAA,gBAAAf;AAAA,kBAACuC;AAAA,kBAAA;AAAA,oBACC,IAAG;AAAA,oBACH,SAAS4B,EAAc,eAAe;AAAA,oBACtC,iBAAiB,CAACW,MAChBJ,EAAuB,eAAeI,CAAO;AAAA,oBAE/C,eAAY;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAEbzC,GAAA,EAAM,SAAQ,gBAAe,WAAU,kBAAiB,UAAA,2BAAA,CAEzD;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,GAEJ;AAAA,QACA,gBAAAtB,EAACkB,IAAA,EAAa,WAAU,6CACtB,UAAA;AAAA,UAAA,gBAAAjC;AAAA,YAACL;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,SAASiF;AAAA,cACT,eAAY;AAAA,cACb,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD,gBAAA5E;AAAA,YAACL;AAAA,YAAA;AAAA,cACC,SAASgF;AAAA,cACT,eAAY;AAAA,cACZ,UAAU,GAAC9O,IAAAsO,EAAc,UAAd,QAAAtO,EAAqB;AAAA,cACjC,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AChcO,SAASsP,GACdC,GACAC,GACAC,IAAkC,CAAA,GACX;AACvB,QAAM,EAAE,YAAAC,IAAa,IAAO,aAAAC,GAAa,cAAAC,MAAiBH,GAEpD,CAACI,GAAWC,CAAY,IAAItB,EAAS,EAAK,GAC1C,CAAChR,GAAOuS,CAAQ,IAAIvB,EAASe,CAAY;AAG/C,EAAAd,GAAU,MAAM;AACd,IAAKoB,KACHE,EAASR,CAAY;AAAA,EAEzB,GAAG,CAACA,GAAcM,CAAS,CAAC;AAE5B,QAAMG,IAAY,MAAM;AACtB,IAAAD,EAASR,CAAY,GACrBO,EAAa,EAAI,GACjBH,KAAA,QAAAA;AAAA,EACF,GAEMM,IAAe,CAACf,MAAqB;AACzC,IAAAa,EAASb,CAAQ;AAAA,EACnB,GAEMgB,IAAa,MAAM;AACvB,UAAMC,IAAe3S,EAAM,KAAA;AAG3B,QAAI,CAACkS,KAAc,CAACS,GAAc;AAChC,MAAAJ,EAASR,CAAY,GACrBO,EAAa,EAAK;AAClB;AAAA,IACF;AAGA,IAAIK,MAAiBZ,KACnBC,EAAOW,CAAY,GAGrBL,EAAa,EAAK;AAAA,EACpB;AAYA,SAAO;AAAA,IACL,WAAAD;AAAA,IACA,OAAArS;AAAA,IACA,WAAAwS;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAhBoB,CAAClB,MAA6C;AAClE,MAAIA,EAAE,QAAQ,UACZkB,EAAA,IACSlB,EAAE,QAAQ,aACnBe,EAASR,CAAY,GACrBO,EAAa,EAAK,GAClBF,KAAA,QAAAA;AAAA,IAEJ;AAAA,EAQE;AAEJ;AC1FO,SAASQ,GACdhQ,GACA4M,GACuB;AACvB,QAAM,CAACqD,GAAgBC,CAAiB,IAAI9B,EAAS,EAAK;AAwC1D,SAAO;AAAA,IACL,gBAAA6B;AAAA,IACA,mBAAAC;AAAA,IACA,kBA/BuB,CAACC,MAA0B;AAClD,YAAMC,IAAwB,EAAE,GAAGpQ,GAAU,MAAMmQ,EAAA;AAGnD,MAAIA,MAAY,aACd,OAAOC,EAAQ,WACf,OAAOA,EAAQ,WACf,OAAOA,EAAQ,SACf,OAAOA,EAAQ,OAEbD,MAAY,YAAYA,MAAY,cACtC,OAAOC,EAAQ,SACf,OAAOA,EAAQ,UAEbD,MAAY,YACd,OAAOC,EAAQ,UACf,OAAOA,EAAQ,UACf,OAAOA,EAAQ,aACf,OAAOA,EAAQ,QAEbD,MAAY,YACd,OAAOC,EAAQ,UAGjBxD,EAASwD,CAAO,GAChBF,EAAkB,EAAK;AAAA,IACzB;AAAA,IAME,gBA1CqC;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAmCA;AAEJ;AC/FO,MAAMG,KAAqB,MACzB,GAAG,KAAK,IAAA,CAAK,IAAI,KAAK,QAAQ;AC2EhC,SAASC,GACdjB,IAAsC,IACX;AAC3B,QAAM,EAAE,WAAAkB,GAAW,UAAAC,GAAU,mBAAAC,EAAA,IAAsBpB,GAE7C,CAACqB,GAAQC,CAAS,IAAIvC,EAAS,EAAK,GACpC,CAACwC,GAAMC,CAAO,IAAIzC,EAAmB,IAAI,GAEzCP,IAAO,CAACiD,MAAoB;AAChC,UAAMC,IACJD,MAAgBL,IAAoBA,EAAA,IAAsB;AAC5D,IAAAI,EAAQE,CAAS,GACjBJ,EAAU,EAAI;AAAA,EAChB,GAEMK,IAAQ,MAAM;AAClB,IAAAL,EAAU,EAAK,GACfE,EAAQ,IAAI,GACZL,KAAA,QAAAA;AAAA,EACF;AAgBA,SAAO;AAAA,IACL,QAAAE;AAAA,IACA,MAAAE;AAAA,IACA,MAAA/C;AAAA,IACA,OAAAmD;AAAA,IACA,SAnBc,CAACC,MAAqB;AACpC,MAAAV,KAAA,QAAAA,EAAYU,IACZN,EAAU,EAAK,GACfE,EAAQ,IAAI;AAAA,IACd;AAAA,IAgBE,WAdsB,CAACK,MAAuB;AAC9C,MAAKA,IAGHP,EAAU,EAAI,IAFdK,EAAA;AAAA,IAIJ;AAAA,EAQa;AAEf;AC9DO,SAASG,GACdnR,GACA4M,GACuB;AACvB,QAAMwE,IAAiBd,GAA+B;AAAA,IACpD,mBAAmB,OAAO;AAAA,MACxB,IAAID,GAAA;AAAA,MACJ,KAAK;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,IAEZ,WAAW,CAACgB,MAAU;AACpB,MAAAzE,EAAS;AAAA,QACP,GAAG5M;AAAA,QACH,UAAU,CAAC,GAAIA,EAAS,YAAY,CAAA,GAAKqR,CAAK;AAAA,MAAA,CAC/C;AAAA,IACH;AAAA,EAAA,CACD;AAcD,SAAO;AAAA,IACL,UAAU,MAAMD,EAAe,KAAA;AAAA,IAC/B,aAdkB,CAACE,GAAiBlB,MAA0B;AAC9D,YAAMmB,IAAcvR,EAAS,SAAU;AAAA,QAAI,CAACwR,MAC1CA,EAAE,OAAOF,IAAUlB,IAAUoB;AAAA,MAAA;AAE/B,MAAA5E,EAAS,EAAE,GAAG5M,GAAU,UAAUuR,GAAa;AAAA,IACjD;AAAA,IAUE,aARkB,CAACD,MAAoB;AACvC,YAAMC,IAAcvR,EAAS,SAAU,OAAO,CAACwR,MAAMA,EAAE,OAAOF,CAAO;AACrE,MAAA1E,EAAS,EAAE,GAAG5M,GAAU,UAAUuR,GAAa;AAAA,IACjD;AAAA,IAME,gBAAgB;AAAA,MACd,QAAQH,EAAe;AAAA,MACvB,MAAMA,EAAe;AAAA,MACrB,WAAWA,EAAe;AAAA,MAC1B,SAASA,EAAe;AAAA,IAAA;AAAA,EAC1B;AAEJ;AC/DA,SAAwBK,GAAiB;AAAA,EACvC,UAAAzR;AAAA,EACA,UAAA4M;AAAA,EACA,UAAA8E;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,aAAA5D,IAAc;AAAA,EACd,WAAAE,IAAY;AAAA,EACZ,aAAAnB,IAAc;AAChB,GAA0B;AACxB,QAAM,EAAE,cAAAW,GAAc,YAAAD,EAAA,IAAeE,GAAA,GAG/BkE,IAAatB,GAAA,GAGbuB,IAAc3C;AAAA,IAClBlP,EAAS,SAASA,EAAS,OAAO;AAAA,IAClC,CAAC8O,MAAalC,EAAS,EAAE,GAAG5M,GAAU,OAAO8O,GAAU;AAAA,IACvD,EAAE,YAAY,GAAA;AAAA,EAAM,GAIhBgD,IAAoB5C;AAAA,IACxBlP,EAAS,eAAe;AAAA,IACxB,CAAC8O,MAAalC,EAAS,EAAE,GAAG5M,GAAU,aAAa8O,KAAY,QAAW;AAAA,IAC1E,EAAE,YAAY,GAAA;AAAA,EAAK,GAIfiD,IAAe/B,GAAgBhQ,GAAU4M,CAAQ,GAGjDoF,IAAeb,GAAgBnR,GAAU4M,CAAQ,GAEjDqF,IAAa,IAAI,KAAK,IAAIN,GAAO,CAAC,CAAC,IACnCO,IAAkBlS,EAAS,SAAS,UACpCmS,IACJD,KAAmBlS,EAAS,YAAYA,EAAS,SAAS,SAAS,GAE/DoS,IACJ;AAAA,IACE,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EAAA,EACHT,CAAK,KAAK;AAEd,SACE,gBAAA7G,EAAC,OAAA,EAAI,WAAU,SACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2FAEb,UAAA;AAAA,MAAA,gBAAAf,EAAC,SAAI,WAAU,kBACb,UAAA,gBAAAe,EAAC,OAAA,EAAI,WAAU,0BACZ,UAAA;AAAA,QAAA,CAACiD,KACA,gBAAAhE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS,MACP6C,EAAS,EAAE,GAAG5M,GAAU,UAAU,CAACA,EAAS,UAAU;AAAA,YAExD,WAAU;AAAA,YACV,OACEA,EAAS,WACL,4CACA;AAAA,YAGL,UAAAA,EAAS,WACR,gBAAA+J,EAAC,QAAA,EAAK,WAAU,yCAAwC,IAExD,gBAAAA,EAAC,QAAA,EAAK,WAAU,kEAAA,CAAkE;AAAA,UAAA;AAAA,QAAA;AAAA,QAKvF8H,EAAY,YACX,gBAAA9H;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,OAAO4H,EAAY;AAAA,YACnB,UAAU,CAACjD,MAAMiD,EAAY,aAAajD,EAAE,OAAO,KAAK;AAAA,YACxD,QAAQiD,EAAY;AAAA,YACpB,WAAWA,EAAY;AAAA,YACvB,WAAS;AAAA,YACT,WAAWO;AAAA,YACX,aAAY;AAAA,UAAA;AAAA,QAAA,IAGd,gBAAAtH,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,YAAA,gBAAAf;AAAA,cAACkI;AAAA,cAAA;AAAA,gBACC,WAAW,GAAGG,CAAc;AAAA,gBAC5B,SAASP,EAAY;AAAA,gBAEpB,UAAA7R,EAAS,SAASA,EAAS,yBACzB,QAAA,EAAK,WAAU,gCAA+B,UAAA,UAAA,CAE/C;AAAA,cAAA;AAAA,YAAA;AAAA,YAGH+R,EAAa,iBACZ,gBAAAjH;AAAA,cAACL;AAAA,cAAA;AAAA,gBACC,OAAOzK,EAAS;AAAA,gBAChB,eAAe,CAAC5C,MACd2U,EAAa,iBAAiB3U,CAAqB;AAAA,gBAErD,MAAM2U,EAAa;AAAA,gBACnB,cAAcA,EAAa;AAAA,gBAE3B,UAAA;AAAA,kBAAA,gBAAAhI,EAACa,IAAA,EAAc,WAAU,iBACvB,UAAA,gBAAAb,EAACY,MAAY,GACf;AAAA,oCACCQ,IAAA,EACE,UAAA4G,EAAa,eAAe,IAAI,CAAC7H,MAChC,gBAAAH,EAACuB,GAAA,EAAsB,OAAOpB,GAC3B,UAAAsD,EAAWtD,CAAI,EAAA,GADDA,CAEjB,CACD,EAAA,CACH;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,IAGF,gBAAAH,EAACI,IAAA,EACC,UAAA,gBAAAW,EAACT,IAAA,EACC,UAAA;AAAA,cAAA,gBAAAN,EAACO,IAAA,EAAe,SAAO,IACrB,UAAA,gBAAAQ;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAMiH,EAAa,kBAAkB,EAAI;AAAA,kBAClD,WAAU;AAAA,kBAET,UAAA;AAAA,oBAAA/R,EAAS,SAAS,YACjB,gBAAA+J,EAACsI,IAAA,EAAK,WAAU,iCAAgC;AAAA,oBAEjDrS,EAAS,SAAS,YACjB,gBAAA+J,EAACuI,IAAA,EAAK,WAAU,iCAAgC;AAAA,oBAEjDtS,EAAS,SAAS,aACjB,gBAAA+J,EAACuI,IAAA,EAAK,WAAU,iCAAgC;AAAA,oBAEjDtS,EAAS,SAAS,aACjB,gBAAA+J,EAACwI,IAAA,EAAY,WAAU,iCAAgC;AAAA,oBAExDvS,EAAS,SAAS,YACjB,gBAAA+J,EAACyI,IAAA,EAAO,WAAU,iCAAgC;AAAA,oBAEnDxS,EAAS,SAAS,WACjB,gBAAA+J,EAAC0I,IAAA,EAAK,WAAU,iCAAgC;AAAA,oBAEjDzS,EAAS,SAAS,UACjB,gBAAA+J,EAAC2I,IAAA,EAAS,WAAU,gCAAA,CAAgC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA,GAG1D;AAAA,gCACCnI,IAAA,EACE,UAAA;AAAA,gBAAAkD,EAAazN,EAAS,IAAI;AAAA,gBAC1BA,EAAS,SAAS,WAAWA,EAAS,QACnC,OAAOyN,EAAazN,EAAS,MAAM,IAAI,CAAC,KACxC;AAAA,gBACJ,gBAAA+J,EAAC,OAAA,EAAI,WAAU,sCAAqC,UAAA,uBAAA,CAEpD;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,EAAA,CACF,EAAA,CACF;AAAA,YAED/J,EAAS,SAAS,YACjB,gBAAA+J;AAAA,cAACL;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAASsI,EAAa;AAAA,gBACtB,eAAa,oBAAoBhS,EAAS,EAAE;AAAA,gBAE5C,UAAA,gBAAA+J,EAAC4I,GAAA,EAAK,WAAU,YAAA,CAAY;AAAA,cAAA;AAAA,YAAA;AAAA,UAC9B,GAEJ;AAAA,UACA,gBAAA5I,EAAC,OAAA,EAAI,WAAU,UACZ,YAAkB,YACjB,gBAAAA;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,OAAO6H,EAAkB;AAAA,cACzB,UAAU,CAAClD,MACTkD,EAAkB,aAAalD,EAAE,OAAO,KAAK;AAAA,cAE/C,QAAQkD,EAAkB;AAAA,cAC1B,WAAWA,EAAkB;AAAA,cAC7B,WAAS;AAAA,cACT,WAAU;AAAA,cACV,aAAY;AAAA,YAAA;AAAA,UAAA,IAGd,gBAAA/H,EAAA6I,IAAA,EACG,UAAA5S,EAAS,cACR,gBAAA+J;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,eAAa,oBAAoB/J,EAAS,EAAE;AAAA,cAC5C,SAAS8R,EAAkB;AAAA,cAE1B,UAAA9R,EAAS;AAAA,YAAA;AAAA,UAAA,IAGZ,gBAAA+J;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS+H,EAAkB;AAAA,cAC5B,UAAA;AAAA,YAAA;AAAA,UAAA,GAIL,EAAA,CAEJ;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,CAEJ,EAAA,CACF;AAAA,MAGA,gBAAAhH,EAAC,OAAA,EAAI,WAAU,yFACb,UAAA;AAAA,QAAA,gBAAAf;AAAA,UAACL;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAAS,MAAMkI,EAAW,KAAK5R,CAAQ;AAAA,YACvC,eAAa,eAAeA,EAAS,EAAE;AAAA,YAEvC,UAAA,gBAAA+J,EAAC8I,IAAA,EAAO,WAAU,UAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAG7BX,KAAmBlS,EAAS,SAAS,YACpC,gBAAA+J;AAAA,UAACL;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAASsI,EAAa;AAAA,YACtB,eAAa,oBAAoBhS,EAAS,EAAE;AAAA,YAE5C,UAAA,gBAAA+J,EAAC4I,GAAA,EAAK,WAAU,UAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAG9B,gBAAA5I;AAAA,UAACL;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAASgI;AAAA,YACT,eAAa,iBAAiB1R,EAAS,EAAE;AAAA,YAEzC,UAAA,gBAAA+J,EAAC+I,IAAA,EAAO,WAAU,UAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MAC9B,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAGCX,KACC,gBAAApI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WACE4H,MAAU,IACN,4CACA;AAAA,QAGL,UAAA3R,EAAS,SAAU,IAAI,CAACqR,MACvB,gBAAAtH;AAAA,UAAC0H;AAAA,UAAA;AAAA,YAEC,UAAUJ;AAAA,YACV,UAAU,CAACjB,MACT4B,EAAa,YAAYX,EAAM,IAAIjB,CAAO;AAAA,YAE5C,UAAU,MAAM4B,EAAa,YAAYX,EAAM,EAAE;AAAA,YACjD,OAAOM,IAAQ;AAAA,YACf,WAAA1D;AAAA,YACA,aAAAnB;AAAA,UAAA;AAAA,UARKuE,EAAM;AAAA,QAAA,CAUd;AAAA,MAAA;AAAA,IAAA;AAAA,IAKJrR,EAAS,SAAS,WAAWA,EAAS,SACrC,gBAAA8K;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WACE6G,MAAU,IACN,4CACA;AAAA,QAGN,UAAA;AAAA,UAAA,gBAAA7G,EAAC,OAAA,EAAI,WAAU,8DACZ,UAAA;AAAA,YAAA2C,EAAa,OAAO;AAAA,YAAE;AAAA,UAAA,GACzB;AAAA,UACA,gBAAA1D;AAAA,YAAC0H;AAAA,YAAA;AAAA,cACC,UAAUzR,EAAS;AAAA,cACnB,UAAU,CAACoQ,MAAYxD,EAAS,EAAE,GAAG5M,GAAU,OAAOoQ,GAAS;AAAA,cAC/D,UAAU,MAAMxD,EAAS,EAAE,GAAG5M,GAAU,OAAO,QAAW;AAAA,cAC1D,OAAO2R,IAAQ;AAAA,cACf,aAAa;AAAA,cACb,WAAA1D;AAAA,cACA,aAAAnB;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAIJ,gBAAA/C;AAAA,MAAC6D;AAAA,MAAA;AAAA,QACC,UAAUgE,EAAW,QAAQ5R;AAAA,QAC7B,MAAM4R,EAAW;AAAA,QACjB,cAAcA,EAAW;AAAA,QACzB,UAAU,CAACxB,MAAY;AACrB,UAAAxD,EAASwD,CAAO,GAChBwB,EAAW,MAAA;AAAA,QACb;AAAA,QACA,aAAA7D;AAAA,QACA,eAAe;AAAA,QACf,WAAAE;AAAA,QACA,aAAAnB;AAAA,MAAA;AAAA,IAAA;AAAA,IAGDkF,EAAa,eAAe,UAC3BA,EAAa,eAAe,QAC1B,gBAAAjI;AAAA,MAAC6D;AAAA,MAAA;AAAA,QACC,UAAUoE,EAAa,eAAe;AAAA,QACtC,MAAMA,EAAa,eAAe;AAAA,QAClC,eAAe;AAAA,QACf,cAAcA,EAAa,eAAe;AAAA,QAC1C,UAAUA,EAAa,eAAe;AAAA,QACtC,WAAA/D;AAAA,QACA,aAAAnB;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GAEN;AAEJ;AC7WA,MAAMiG,KAAOpJ,EAAM,WAGjB,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWP;AAAA,MACT;AAAA,MACAvK;AAAA,IAAA;AAAA,IAED,GAAGvB;AAAA,EAAA;AACN,CACD;AACDsV,GAAK,cAAc;AAEnB,MAAMC,KAAarJ,EAAM,WAGvB,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWP,EAAG,iCAAiCvK,CAAS;AAAA,IACvD,GAAGvB;AAAA,EAAA;AACN,CACD;AACDuV,GAAW,cAAc;AAEzB,MAAMC,KAAYtJ,EAAM,WAGtB,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWP,EAAG,6CAA6CvK,CAAS;AAAA,IACnE,GAAGvB;AAAA,EAAA;AACN,CACD;AACDwV,GAAU,cAAc;AAExB,MAAMC,KAAkBvJ,EAAM,WAG5B,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWP,EAAG,iCAAiCvK,CAAS;AAAA,IACvD,GAAGvB;AAAA,EAAA;AACN,CACD;AACDyV,GAAgB,cAAc;AAE9B,MAAMC,KAAcxJ,EAAM,WAGxB,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,KAASqM,wBACzB,OAAA,EAAI,KAAAA,GAAU,WAAWP,EAAG,YAAYvK,CAAS,GAAI,GAAGvB,GAAO,CACjE;AACD0V,GAAY,cAAc;AAE1B,MAAMC,KAAazJ,EAAM,WAGvB,CAAC,EAAE,WAAA3K,GAAW,GAAGvB,EAAA,GAASqM,MAC1B,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,WAAWP,EAAG,8BAA8BvK,CAAS;AAAA,IACpD,GAAGvB;AAAA,EAAA;AACN,CACD;AACD2V,GAAW,cAAc;ACpElB,MAAMC,KAAiB,MACrB,IAAI,QAAQ,CAACC,GAASC,MAAW;AACtC,QAAMC,IAAQ,SAAS,cAAc,OAAO;AAC5C,EAAAA,EAAM,OAAO,QACbA,EAAM,SAAS,SAEfA,EAAM,WAAW,CAAC5E,MAAM;;AACtB,UAAM6E,KAAQ7T,IAAAgP,EAAE,OAA4B,UAA9B,gBAAAhP,EAAsC;AACpD,QAAI,CAAC6T,GAAM;AACT,MAAAF,EAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC;AAAA,IACF;AAEA,UAAMG,IAAS,IAAI,WAAA;AACnB,IAAAA,EAAO,SAAS,CAACC,MAAU;;AACzB,UAAI;AACF,cAAM/C,IAAO,KAAK,OAAMhR,IAAA+T,EAAM,WAAN,gBAAA/T,EAAc,MAAgB;AACtD,QAAA0T,EAAQ1C,CAAI;AAAA,MACd,QAAc;AACZ,QAAA2C,EAAO,IAAI,MAAM,mBAAmB,CAAC;AAAA,MACvC;AAAA,IACF,GACAG,EAAO,UAAU,MAAMH,EAAO,IAAI,MAAM,qBAAqB,CAAC,GAC9DG,EAAO,WAAWD,CAAI;AAAA,EACxB,GAEAD,EAAM,MAAA;AACR,CAAC,GAMUI,KAAmB,CAC9BhD,GACAiD,IAAmB,kBACV;AACT,QAAMC,IAAa,KAAK,UAAUlD,GAAM,MAAM,CAAC,GACzCmD,IAAO,IAAI,KAAK,CAACD,CAAU,GAAG,EAAE,MAAM,oBAAoB,GAC1DE,IAAM,IAAI,gBAAgBD,CAAI,GAE9BE,IAAI,SAAS,cAAc,GAAG;AACpC,EAAAA,EAAE,OAAOD,GACTC,EAAE,WAAWJ,GACb,SAAS,KAAK,YAAYI,CAAC,GAC3BA,EAAE,MAAA,GACF,SAAS,KAAK,YAAYA,CAAC,GAC3B,IAAI,gBAAgBD,CAAG;AACzB;AC3CA,SAAwBE,GAAW,EAAE,QAAAC,KAA2B;AAC9D,QAAM,CAACC,GAAQC,CAAS,IAAIjG,EAAS,EAAK,GAEpC0F,IAAa,KAAK,UAAUK,GAAQ,MAAM,CAAC;AAYjD,SACE,gBAAArJ,EAAC,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,MAAA,gBAAAf,EAAC,MAAA,EAAG,WAAU,uBAAsB,UAAA,sBAAkB;AAAA,MACtD,gBAAAe,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,QAAA,gBAAAf;AAAA,UAACL;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAlBS,YAAY;AAC7B,oBAAM,UAAU,UAAU,UAAUoK,CAAU,GAC9CO,EAAU,EAAI,GACd,WAAW,MAAMA,EAAU,EAAK,GAAG,GAAI;AAAA,YACzC;AAAA,YAeU,eAAY;AAAA,YAEX,UAAAD,sBACEE,IAAA,EAAa,WAAU,WAAU,IAElC,gBAAAvK,EAACwK,IAAA,EAAK,WAAU,UAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAG9B,gBAAAxK;AAAA,UAACL;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAxBa,MAAM;AAC3B,cAAAkK,GAAiBO,GAAQ,aAAa;AAAA,YACxC;AAAA,YAuBU,eAAY;AAAA,YAEZ,UAAA,gBAAApK,EAACyK,IAAA,EAAS,WAAU,UAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MAChC,EAAA,CACF;AAAA,IAAA,GACF;AAAA,sBAEC,OAAA,EAAI,WAAU,wBACb,UAAA,gBAAAzK,EAACgJ,IAAA,EAAK,WAAU,mBACd,UAAA,gBAAAhJ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,eAAY;AAAA,QAEZ,UAAA,gBAAAA,EAAC,UAAM,UAAA+J,EAAA,CAAW;AAAA,MAAA;AAAA,IAAA,GAEtB,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AClDA,SAAwBW,GAAe;AAAA,EACrC,OAAAxH;AAAA,EACA,aAAAyH;AAAA,EACA,SAAAC;AAAA,EACA,UAAA/H;AACF,GAAwB;AACtB,QAAM,CAACgI,GAAYC,CAAa,IAAIzG,EAAS,EAAK;AAElD,SACE,gBAAAtD,EAACiI,IAAA,EAAK,WAAU,OACd,UAAA;AAAA,IAAA,gBAAAjI;AAAA,MAACpB;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,SAAS,MAAMmL,EAAc,CAACD,CAAU;AAAA,QACxC,WAAU;AAAA,QACV,eAAY;AAAA,QAEZ,UAAA;AAAA,UAAA,gBAAA7K,EAAC,MAAA,EAAG,WAAU,uBAAsB,UAAA,mBAAe;AAAA,UAClD6K,sBACE7J,IAAA,EAAY,WAAU,WAAU,IAEjC,gBAAAhB,EAAC+K,IAAA,EAAa,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIrCF,KACC,gBAAA9J,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAAA,gBAAAf;AAAA,UAACqC;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAU;AAAA,YACX,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD,gBAAArC;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,aAAY;AAAA,YACZ,OAAOgD;AAAA,YACP,UAAU,CAAC2B,MAAMhC,EAAS,SAASgC,EAAE,OAAO,KAAK;AAAA,YACjD,eAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MACd,GACF;AAAA,MAEA,gBAAA9D,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAAA,gBAAAf;AAAA,UAACqC;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAU;AAAA,YACX,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD,gBAAArC;AAAA,UAACyC;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,aAAY;AAAA,YACZ,OAAOkI;AAAA,YACP,UAAU,CAAC9F,MAAMhC,EAAS,eAAegC,EAAE,OAAO,KAAK;AAAA,YACvD,WAAU;AAAA,YACV,MAAM;AAAA,YACN,eAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MACd,GACF;AAAA,MAEA,gBAAA9D,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAAA,gBAAAf;AAAA,UAACqC;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAU;AAAA,YACX,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAID,gBAAArC;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,aAAY;AAAA,YACZ,OAAO0K;AAAA,YACP,UAAU,CAAC/F,MAAMhC,EAAS,WAAWgC,EAAE,OAAO,KAAK;AAAA,YACnD,eAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MACd,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GAEJ;AAEJ;ACvFO,MAAMmG,KAAiB,CAC5BC,GACAC,GACAC,IAA2B,OACX;AAChB,QAAMf,IAAsB;AAAA,IAC1B,MAAM;AAAA,EAAA;AAIR,EAAIe,KAAmBD,MACjBA,EAAS,UAAOd,EAAO,QAAQc,EAAS,QACxCA,EAAS,gBAAad,EAAO,cAAcc,EAAS;AAI1D,QAAMxX,IAAQ0X,GAAgBH,CAAU;AACxC,EAAI,OAAO,KAAKvX,CAAK,EAAE,SAAS,MAC9B0W,EAAO,aAAa1W;AAItB,QAAM2X,IAAWJ,EACd,OAAO,CAACK,MAAMA,EAAE,YAAYA,EAAE,GAAG,EACjC,IAAI,CAACA,MAAMA,EAAE,GAAG;AACnB,SAAID,EAAS,SAAS,MACpBjB,EAAO,WAAWiB,IAGbjB;AACT,GAKMgB,KAAkB,CACtB1X,MACgC;AAChC,QAAM4F,IAAsC,CAAA;AAE5C,SAAA5F,EAAM,QAAQ,CAAC6X,MAAS;AACtB,QAAI,CAACA,EAAK,IAAK;AAIf,UAAMC,IAA0B,EAAE,MADfD,EAAK,SAAS,SAAS,WAAWA,EAAK,KAClB;AAwCxC,QArCIA,EAAK,UAAOC,EAAW,QAAQD,EAAK,QACpCA,EAAK,gBAAaC,EAAW,cAAcD,EAAK,cAGhDA,EAAK,SAAS,WAChBC,EAAW,SAAS,aAIlBD,EAAK,SAAS,aACZA,EAAK,cAAc,WAAWC,EAAW,YAAYD,EAAK,YAC1DA,EAAK,cAAc,WAAWC,EAAW,YAAYD,EAAK,YAC1DA,EAAK,YAASC,EAAW,UAAUD,EAAK,UACxCA,EAAK,QAAQA,EAAK,KAAK,SAAS,MAAGC,EAAW,OAAOD,EAAK,SAI5DA,EAAK,SAAS,YAAYA,EAAK,SAAS,eACtCA,EAAK,YAAY,WAAWC,EAAW,UAAUD,EAAK,UACtDA,EAAK,YAAY,WAAWC,EAAW,UAAUD,EAAK,WAIxDA,EAAK,SAAS,YACZA,EAAK,aAAa,WAAWC,EAAW,WAAWD,EAAK,WACxDA,EAAK,aAAa,WAAWC,EAAW,WAAWD,EAAK,WACxDA,EAAK,gBAAaC,EAAW,cAAcD,EAAK,cAGhDA,EAAK,UACPC,EAAW,QAAQJ,GAAgB,CAACG,EAAK,KAAK,CAAC,EAAEA,EAAK,MAAM,GAAG,KAAK;AAAA,MAClE,MAAMA,EAAK,MAAM;AAAA,IAAA,KAMnBA,EAAK,SAAS,YAAYA,EAAK,YAAYA,EAAK,SAAS,SAAS,GAAG;AACvE,MAAAC,EAAW,aAAaJ,GAAgBG,EAAK,QAAQ;AACrD,YAAME,IAAmBF,EAAK,SAC3B,OAAO,CAAC9D,MAAMA,EAAE,YAAYA,EAAE,GAAG,EACjC,IAAI,CAACA,MAAMA,EAAE,GAAG;AACnB,MAAIgE,EAAiB,SAAS,MAC5BD,EAAW,WAAWC;AAAA,IAE1B;AAEA,IAAAnS,EAAOiS,EAAK,GAAG,IAAIC;AAAA,EACrB,CAAC,GAEMlS;AACT,GC7FaoS,KAAc,CAACtB,MAAsC;AAChE,QAAM9Q,IAAuB;AAAA,IAC3B,YAAY,CAAA;AAAA,EAAC;AAIf,UAAI8Q,EAAO,SAASA,EAAO,iBACzB9Q,EAAO,WAAW;AAAA,IAChB,OAAO,OAAO8Q,EAAO,SAAU,WAAWA,EAAO,QAAQ;AAAA,IACzD,aACE,OAAOA,EAAO,eAAgB,WAAWA,EAAO,cAAc;AAAA,IAChE,SAAS;AAAA;AAAA,EAAA,IAKTA,EAAO,cAAc,OAAOA,EAAO,cAAe,aACpD9Q,EAAO,aAAaqS;AAAA,IAClBvB,EAAO;AAAA,IACP,MAAM,QAAQA,EAAO,QAAQ,IAAIA,EAAO,WAAW,CAAA;AAAA,EAAC,IAIjD9Q;AACT,GAKaqS,KAAkB,CAC7BjY,GACAkY,IAAyB,OAEpBlY,IAEE,OAAO,QAAQA,CAAK,EACxB,OAAO,CAAC,CAAA,EAAG8X,CAAU,MAAM,OAAOA,KAAe,QAAQ,EACzD,IAAI,CAAC,CAAClX,GAAKkX,CAAU,MAAM;AAC1B,QAAMpB,IAASoB;AAGf,MAAIK,IACF,OAAOzB,EAAO,QAAS,WAAWA,EAAO,OAAO;AAIlD,EAAIyB,MAAiB,YAAYzB,EAAO,WAAW,eACjDyB,IAAe;AAGjB,QAAM5V,IAAyB;AAAA,IAC7B,IAAIqQ,GAAA;AAAA,IACJ,KAAAhS;AAAA,IACA,OAAO,OAAO8V,EAAO,SAAU,WAAWA,EAAO,QAAQ;AAAA,IACzD,MAAMyB;AAAA,IACN,aACE,OAAOzB,EAAO,eAAgB,WAC1BA,EAAO,cACP;AAAA,IACN,UAAUwB,EAAa,SAAStX,CAAG;AAAA,EAAA;AAIrC,SAAI8V,EAAO,cAAc,WAAWnU,EAAS,YAAYmU,EAAO,YAC5DA,EAAO,cAAc,WAAWnU,EAAS,YAAYmU,EAAO,YAC5DA,EAAO,YAASnU,EAAS,UAAUmU,EAAO,UAC1CA,EAAO,QAAQ,MAAM,QAAQA,EAAO,IAAI,MAC1CnU,EAAS,OAAOmU,EAAO,OAGrBA,EAAO,YAAY,WAAWnU,EAAS,UAAUmU,EAAO,UACxDA,EAAO,YAAY,WAAWnU,EAAS,UAAUmU,EAAO,UAGxDA,EAAO,aAAa,WAAWnU,EAAS,WAAWmU,EAAO,WAC1DA,EAAO,aAAa,WAAWnU,EAAS,WAAWmU,EAAO,WAC1DA,EAAO,gBAAanU,EAAS,cAAcmU,EAAO,cAIpDnU,EAAS,SAAS,WAClBmU,EAAO,SACP,OAAOA,EAAO,SAAU,YACxB,CAAC,MAAM,QAAQA,EAAO,KAAK,MAE3BnU,EAAS,QAAQ0V;AAAA,IACf,EAAE,MAAMvB,EAAO,MAAA;AAAA,IACf,CAAA;AAAA,EAAC,EACD,KAAK,CAACkB,MAAMA,EAAE,QAAQ,MAAM,IAI5BlB,EAAO,cAAc,OAAOA,EAAO,cAAe,aACpDnU,EAAS,WAAW0V;AAAA,IAClBvB,EAAO;AAAA,IACP,MAAM,QAAQA,EAAO,QAAQ,IAAIA,EAAO,WAAW,CAAA;AAAA,EAAC,IAIjDnU;AACT,CAAC,IAnEgB,CAAA,GCnBR6V,KAAmB,CAAC;AAAA,EAC/B,QAAA1B;AAAA,EACA,UAAA2B;AAAA,EACA,iBAAAZ,IAAkB;AACpB,MAAuD;AAErD,QAAM,EAAE,YAAYa,GAAkB,UAAUC,MAAmBC;AAAA,IACjE,MAAMR,GAAYtB,CAAM;AAAA,IACxB,CAACA,CAAM;AAAA,EAAA,GAGHa,IAAae,GACbd,IAAWe,KAAkB;AAAA,IACjC,OAAO;AAAA,IACP,aAAa;AAAA,IACb,SAAS;AAAA,EAAA,GAILE,IAAcC,EAAY,OACC;AAAA,IAC7B,IAAI9F,GAAA;AAAA,IACJ,KAAK;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,EAAA,IAGX,CAAA,CAAE,GAGC+F,IAAiBD;AAAA,IACrB,CAACE,GAAYjG,MAA0B;AACrC,YAAMkG,IAAStB,EAAW,KAAK,CAACK,MAAMA,EAAE,OAAOgB,CAAE;AACjD,UAAIE;AAEJ,MAAID,IACFC,IAAoBvB,EAAW,IAAI,CAACK,MAAOA,EAAE,OAAOgB,IAAKjG,IAAUiF,CAAE,IAGrEkB,IAAoB,CAAC,GAAGvB,GAAY5E,CAAO;AAG7C,YAAMoG,IAAYzB;AAAA,QAChBwB;AAAA,QACAtB;AAAA,QACAC;AAAA,MAAA;AAEF,MAAAY,EAASU,CAAS;AAAA,IACpB;AAAA,IACA,CAACxB,GAAYC,GAAUC,GAAiBY,CAAQ;AAAA,EAAA,GAI5CW,IAAiBN;AAAA,IACrB,CAACE,MAAe;AACd,YAAME,IAAoBvB,EAAW,OAAO,CAACK,MAAMA,EAAE,OAAOgB,CAAE,GACxDG,IAAYzB;AAAA,QAChBwB;AAAA,QACAtB;AAAA,QACAC;AAAA,MAAA;AAEF,MAAAY,EAASU,CAAS;AAAA,IACpB;AAAA,IACA,CAACxB,GAAYC,GAAUC,GAAiBY,CAAQ;AAAA,EAAA,GAI5CY,IAAWP,EAAY,MAAM;AAEjC,UAAMK,IAAYzB,GAAe,IADX,EAAE,OAAO,IAAI,aAAa,GAAgB,GACZG,CAAe;AACnE,IAAAY,EAASU,CAAS;AAAA,EACpB,GAAG,CAACtB,GAAiBY,CAAQ,CAAC,GAGxBa,IAAiBR;AAAA,IACrB,CAACnJ,GAA6B5P,MAAkB;AAC9C,YAAMwZ,IAAkB,EAAE,GAAG3B,GAAU,CAACjI,CAAK,GAAG5P,EAAA,GAC1CoZ,IAAYzB;AAAA,QAChBC;AAAA,QACA4B;AAAA,QACA1B;AAAA,MAAA;AAEF,MAAAY,EAASU,CAAS;AAAA,IACpB;AAAA,IACA,CAACxB,GAAYC,GAAUC,GAAiBY,CAAQ;AAAA,EAAA,GAI5Ce,IAAeV,EAAY,YAAY;AAC3C,UAAMvF,IAAO,MAAMyC,GAAA;AACnB,IAAAyC,EAASlF,CAAI;AAAA,EACf,GAAG,CAACkF,CAAQ,CAAC,GAGPgB,IAAiBX,EAAY,MAAM;AACvC,IAAAvC,GAAiBO,GAAQ,aAAa;AAAA,EACxC,GAAG,CAACA,CAAM,CAAC;AAEX,SAAO;AAAA,IACL,YAAAa;AAAA,IACA,UAAAC;AAAA,IACA,aAAAiB;AAAA,IACA,gBAAAE;AAAA,IACA,gBAAAK;AAAA,IACA,UAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,cAAAE;AAAA,IACA,gBAAAC;AAAA,EAAA;AAEJ;ACrIA,SAAwBC,KAAc;AACpC,QAAM,CAAC9W,GAAO+W,CAAQ,IAAI5I,EAA2B,OAAO;AAE5D,SAAAC,GAAU,MAAM;AAEd,UAAM4I,IADS,aAAa,QAAQ,OAAO,MAGxC,OAAO,WAAW,8BAA8B,EAAE,UAC/C,SACA;AACN,IAAAD,EAASC,CAAO,GAChB,SAAS,gBAAgB,UAAU,OAAO,QAAQA,MAAY,MAAM;AAAA,EACtE,GAAG,CAAA,CAAE,GAUH,gBAAAlN;AAAA,IAACL;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,SAXgB,MAAM;AACxB,cAAMwN,IAAWjX,MAAU,UAAU,SAAS;AAC9C,QAAA+W,EAASE,CAAQ,GACjB,aAAa,QAAQ,SAASA,CAAQ,GACtC,SAAS,gBAAgB,UAAU,OAAO,QAAQA,MAAa,MAAM;AAAA,MACvE;AAAA,MAOI,eAAY;AAAA,MAEX,UAAAjX,MAAU,UACT,gBAAA8J,EAACoN,IAAA,EAAK,WAAU,WAAU,IAE1B,gBAAApN,EAACqN,IAAA,EAAI,WAAU,UAAA,CAAU;AAAA,IAAA;AAAA,EAAA;AAIjC;AC2DO,SAASC,GAAkB;AAAA,EAChC,QAAAlD;AAAA,EACA,UAAA2B;AAAA,EACA,cAAAwB,IAAe;AAAA,EACf,YAAAC,IAAa;AAAA,EACb,WAAAC,IAAY;AAAA,EACZ,YAAAC,IAAa;AAAA,EACb,YAAAC,IAAa;AAAA,EACb,WAAA1Y,IAAY;AAAA,EACZ,aAAA2Y,IAAc;AAAA,EACd,YAAAnK;AAAA,EACA,eAAAQ,IAAgB,EAAE,UAAU,YAAY,QAAQ,aAAA;AAAA,EAChD,WAAAC,IAAY;AAAA,EACZ,aAAAnB,IAAc;AAChB,GAA2B;AACzB,QAAM;AAAA,IACJ,YAAAkI;AAAA,IACA,UAAAC;AAAA,IACA,aAAa2C;AAAA,IACb,gBAAAxB;AAAA,IACA,gBAAAK;AAAA,IACA,UAAUoB;AAAA,IACV,gBAAAlB;AAAA,IACA,cAAAE;AAAA,EAAA,IACEhB,GAAiB;AAAA,IACnB,QAAA1B;AAAA,IACA,UAAA2B;AAAA,IACA,iBAAiBwB;AAAA,EAAA,CAClB,GAEKQ,IAAoBxH,GAA+B;AAAA,IACvD,mBAAmB,MAAMsH,EAAA;AAAA,IACzB,WAAW,CAAC5X,MAAa;AACvB,MAAAoW,EAAepW,EAAS,IAAIA,CAAQ;AAAA,IACtC;AAAA,EAAA,CACD,GAEK0W,IAAW,MAAM;AACrB,IAAAmB,EAAA;AAAA,EACF,GAEME,IAAe,YAAY;AAC/B,UAAMlB,EAAA;AAAA,EACR;AAEA,SACE,gBAAA9M,EAACuD,MAAmB,cAAcE,GAChC,4BAAC,OAAA,EAAI,WAAW,GAAGxO,CAAS,4CACzB,UAAA;AAAA,IAAA0Y,uBACE,UAAA,EAAO,WAAU,wDAChB,UAAA,gBAAA5M,EAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,MAAAyM,KACC,gBAAAxN;AAAA,QAACL;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,SAASqO;AAAA,UACT,eAAY;AAAA,UAEZ,UAAA,gBAAAhO,EAACiO,IAAA,EAAO,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAG/BR,KACC,gBAAAzN;AAAA,QAACL;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,SAASgN;AAAA,UACT,UAAU1B,EAAW,WAAW;AAAA,UAChC,eAAY;AAAA,UAEZ,UAAA,gBAAAjL,EAAC+I,IAAA,EAAO,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,wBAG/BiE,IAAA,CAAA,CAAY;AAAA,IAAA,EAAA,CACf,EAAA,CACF;AAAA,IAGF,gBAAAjM,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,MAAA,gBAAAf,EAAC,OAAA,EAAI,WAAW0N,IAAa,mBAAmB,UAC9C,UAAA,gBAAA3M,EAAC,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,sCACZ,UAAA;AAAA,UAAAwM,KACC,gBAAAvN;AAAA,YAAC0K;AAAA,YAAA;AAAA,cACC,OAAOQ,EAAS;AAAA,cAChB,aAAaA,EAAS;AAAA,cACtB,SAASA,EAAS;AAAA,cAClB,UAAU,CAACjI,GAAO5P,MAChBuZ,EAAe3J,GAAmC5P,CAAK;AAAA,YAAA;AAAA,UAAA;AAAA,UAK5D4X,EAAW,WAAW,IACrB,gBAAAlK,EAAC,OAAA,EAAI,WAAU,+DACb,UAAA;AAAA,YAAA,gBAAAf,EAAC,SAAI,WAAU,yEACb,4BAAC4I,GAAA,EAAK,WAAU,iCAAgC,EAAA,CAClD;AAAA,YACA,gBAAA7H,EAAC,MAAA,EAAG,WAAU,4BAA2B,UAAA;AAAA,cAAA;AAAA,cACnCkD,EAAc;AAAA,cAAO;AAAA,YAAA,GAC3B;AAAA,YACA,gBAAAlD,EAAC,KAAA,EAAE,WAAU,+CAA8C,UAAA;AAAA,cAAA;AAAA,cACJ;AAAA,cACpDkD,EAAc;AAAA,YAAA,GACjB;AAAA,YACA,gBAAAlD;AAAA,cAACpB;AAAA,cAAA;AAAA,gBACC,SAAS,MAAMoO,EAAkB,KAAA;AAAA,gBACjC,eAAY;AAAA,gBAEZ,UAAA;AAAA,kBAAA,gBAAA/N,EAAC4I,GAAA,EAAK,WAAU,eAAA,CAAe;AAAA,kBAAE;AAAA,kBAC5B3E,EAAc;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACrB,EAAA,CACF,IAEA,gBAAAlD,EAAA8H,IAAA,EACE,UAAA;AAAA,YAAA,gBAAA7I,EAAC,SAAI,WAAU,aACZ,UAAAiL,EAAW,IAAI,CAAChV,MACf,gBAAA+J;AAAA,cAAC0H;AAAA,cAAA;AAAA,gBAEC,UAAAzR;AAAA,gBACA,UAAU,CAACoQ,MACTgG,EAAepW,EAAS,IAAIoQ,CAAO;AAAA,gBAErC,UAAU,MAAMqG,EAAezW,EAAS,EAAE;AAAA,gBAC1C,WAAAiO;AAAA,gBACA,aAAAnB;AAAA,cAAA;AAAA,cAPK9M,EAAS;AAAA,YAAA,CASjB,GACH;AAAA,YAEC2X,KACC,gBAAA7M,EAAC,OAAA,EAAI,WAAU,iFACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,QAAA,EACE,UAAA;AAAA,gBAAAkK,EAAW;AAAA,gBAAQ;AAAA,gBACnBA,EAAW,WAAW,IACnBhH,EAAc,WACdA,EAAc;AAAA,cAAA,GACpB;AAAA,gCACC,QAAA,EACE,UAAA;AAAA,gBAAAgH,EAAW,OAAO,CAACK,MAAMA,EAAE,QAAQ,EAAE;AAAA,gBAAO;AAAA,cAAA,EAAA,CAC/C;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA,GAEJ;AAAA,QAECL,EAAW,SAAS,KACnB,gBAAAjL,EAAC,OAAA,EAAI,WAAU,mCACb,UAAA,gBAAAe;AAAA,UAACpB;AAAA,UAAA;AAAA,YACC,SAAS,MAAMoO,EAAkB,KAAA;AAAA,YACjC,WAAU;AAAA,YACV,SAAQ;AAAA,YACR,eAAY;AAAA,YAEZ,UAAA;AAAA,cAAA,gBAAA/N,EAAC4I,GAAA,EAAK,WAAU,UAAA,CAAU;AAAA,cAAE;AAAA,cACvB3E,EAAc;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,EACrB,CACF;AAAA,MAAA,EAAA,CAEJ,EAAA,CACF;AAAA,MAECyJ,uBACE,OAAA,EAAI,WAAU,SACb,UAAA,gBAAA1N,EAACmK,IAAA,EAAW,QAAAC,GAAgB,EAAA,CAC9B;AAAA,IAAA,GAEJ;AAAA,IAEC2D,EAAkB,UAAUA,EAAkB,QAC7C,gBAAA/N;AAAA,MAAC6D;AAAA,MAAA;AAAA,QACC,UAAUkK,EAAkB;AAAA,QAC5B,MAAMA,EAAkB;AAAA,QACxB,eAAe;AAAA,QACf,cAAcA,EAAkB;AAAA,QAChC,eAAA9J;AAAA,QACA,UAAU8J,EAAkB;AAAA,QAC5B,WAAA7J;AAAA,QACA,aAAAnB;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,EAAA,CAEJ,EAAA,CACF;AAEJ;","x_google_ignoreList":[0,1,2]}
|