@satoshibits/react-json-schema-builder 1.1.3 → 1.1.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.
Files changed (196) hide show
  1. package/dist/index.cjs.js +1 -1
  2. package/dist/index.cjs10.js +1 -1
  3. package/dist/index.cjs10.js.map +1 -1
  4. package/dist/index.cjs11.js +1 -1
  5. package/dist/index.cjs11.js.map +1 -1
  6. package/dist/index.cjs12.js +1 -1
  7. package/dist/index.cjs12.js.map +1 -1
  8. package/dist/index.cjs13.js +1 -1
  9. package/dist/index.cjs13.js.map +1 -1
  10. package/dist/index.cjs14.js +1 -1
  11. package/dist/index.cjs14.js.map +1 -1
  12. package/dist/index.cjs15.js +6 -1
  13. package/dist/index.cjs15.js.map +1 -1
  14. package/dist/index.cjs16.js +1 -1
  15. package/dist/index.cjs16.js.map +1 -1
  16. package/dist/index.cjs17.js +1 -1
  17. package/dist/index.cjs17.js.map +1 -1
  18. package/dist/index.cjs18.js +1 -1
  19. package/dist/index.cjs18.js.map +1 -1
  20. package/dist/index.cjs19.js +1 -1
  21. package/dist/index.cjs19.js.map +1 -1
  22. package/dist/index.cjs2.js +1 -1
  23. package/dist/index.cjs2.js.map +1 -1
  24. package/dist/index.cjs20.js +1 -1
  25. package/dist/index.cjs20.js.map +1 -1
  26. package/dist/index.cjs21.js +1 -1
  27. package/dist/index.cjs21.js.map +1 -1
  28. package/dist/index.cjs22.js +1 -1
  29. package/dist/index.cjs22.js.map +1 -1
  30. package/dist/index.cjs23.js +1 -6
  31. package/dist/index.cjs23.js.map +1 -1
  32. package/dist/index.cjs24.js +1 -6
  33. package/dist/index.cjs24.js.map +1 -1
  34. package/dist/index.cjs25.js +1 -6
  35. package/dist/index.cjs25.js.map +1 -1
  36. package/dist/index.cjs26.js +1 -1
  37. package/dist/index.cjs26.js.map +1 -1
  38. package/dist/index.cjs27.js +1 -1
  39. package/dist/index.cjs27.js.map +1 -1
  40. package/dist/index.cjs28.js +6 -1
  41. package/dist/index.cjs28.js.map +1 -1
  42. package/dist/index.cjs29.js +6 -1
  43. package/dist/index.cjs29.js.map +1 -1
  44. package/dist/index.cjs3.js +1 -1
  45. package/dist/index.cjs3.js.map +1 -1
  46. package/dist/index.cjs30.js +1 -1
  47. package/dist/index.cjs30.js.map +1 -1
  48. package/dist/index.cjs31.js +1 -1
  49. package/dist/index.cjs34.js +1 -1
  50. package/dist/index.cjs36.js +1 -1
  51. package/dist/index.cjs37.js +1 -1
  52. package/dist/index.cjs38.js +1 -1
  53. package/dist/index.cjs39.js +1 -1
  54. package/dist/index.cjs4.js +1 -1
  55. package/dist/index.cjs4.js.map +1 -1
  56. package/dist/index.cjs41.js +1 -1
  57. package/dist/index.cjs42.js +1 -1
  58. package/dist/index.cjs42.js.map +1 -1
  59. package/dist/index.cjs43.js +1 -1
  60. package/dist/index.cjs47.js +1 -1
  61. package/dist/index.cjs5.js +1 -1
  62. package/dist/index.cjs5.js.map +1 -1
  63. package/dist/index.cjs55.js +1 -5
  64. package/dist/index.cjs55.js.map +1 -1
  65. package/dist/index.cjs56.js +1 -1
  66. package/dist/index.cjs56.js.map +1 -1
  67. package/dist/index.cjs57.js +1 -1
  68. package/dist/index.cjs57.js.map +1 -1
  69. package/dist/index.cjs58.js +1 -1
  70. package/dist/index.cjs58.js.map +1 -1
  71. package/dist/index.cjs59.js +1 -1
  72. package/dist/index.cjs59.js.map +1 -1
  73. package/dist/index.cjs6.js +1 -1
  74. package/dist/index.cjs6.js.map +1 -1
  75. package/dist/index.cjs60.js +1 -1
  76. package/dist/index.cjs60.js.map +1 -1
  77. package/dist/index.cjs61.js +1 -1
  78. package/dist/index.cjs61.js.map +1 -1
  79. package/dist/index.cjs62.js +5 -1
  80. package/dist/index.cjs62.js.map +1 -1
  81. package/dist/index.cjs63.js +1 -1
  82. package/dist/index.cjs63.js.map +1 -1
  83. package/dist/index.cjs65.js +1 -1
  84. package/dist/index.cjs67.js +1 -1
  85. package/dist/index.cjs69.js +1 -1
  86. package/dist/index.cjs7.js +1 -1
  87. package/dist/index.cjs7.js.map +1 -1
  88. package/dist/index.cjs71.js +1 -1
  89. package/dist/index.cjs72.js +1 -1
  90. package/dist/index.cjs75.js +1 -1
  91. package/dist/index.cjs78.js +1 -1
  92. package/dist/index.cjs8.js +1 -1
  93. package/dist/index.cjs8.js.map +1 -1
  94. package/dist/index.cjs81.js +1 -1
  95. package/dist/index.cjs9.js +1 -1
  96. package/dist/index.cjs9.js.map +1 -1
  97. package/dist/index.d.mts +5 -4
  98. package/dist/index.d.mts.map +1 -1
  99. package/dist/index.es.js +18 -28
  100. package/dist/index.es10.js +22 -22
  101. package/dist/index.es10.js.map +1 -1
  102. package/dist/index.es11.js +14 -42
  103. package/dist/index.es11.js.map +1 -1
  104. package/dist/index.es12.js +5 -65
  105. package/dist/index.es12.js.map +1 -1
  106. package/dist/index.es13.js +43 -24
  107. package/dist/index.es13.js.map +1 -1
  108. package/dist/index.es14.js +21 -126
  109. package/dist/index.es14.js.map +1 -1
  110. package/dist/index.es15.js +13 -20
  111. package/dist/index.es15.js.map +1 -1
  112. package/dist/index.es16.js +129 -130
  113. package/dist/index.es16.js.map +1 -1
  114. package/dist/index.es17.js +3 -137
  115. package/dist/index.es17.js.map +1 -1
  116. package/dist/index.es18.js +20 -61
  117. package/dist/index.es18.js.map +1 -1
  118. package/dist/index.es19.js +65 -10
  119. package/dist/index.es19.js.map +1 -1
  120. package/dist/index.es2.js +156 -113
  121. package/dist/index.es2.js.map +1 -1
  122. package/dist/index.es20.js +134 -22
  123. package/dist/index.es20.js.map +1 -1
  124. package/dist/index.es21.js +131 -421
  125. package/dist/index.es21.js.map +1 -1
  126. package/dist/index.es22.js +63 -5
  127. package/dist/index.es22.js.map +1 -1
  128. package/dist/index.es23.js +11 -13
  129. package/dist/index.es23.js.map +1 -1
  130. package/dist/index.es24.js +23 -16
  131. package/dist/index.es24.js.map +1 -1
  132. package/dist/index.es25.js +428 -13
  133. package/dist/index.es25.js.map +1 -1
  134. package/dist/index.es26.js +7 -13
  135. package/dist/index.es26.js.map +1 -1
  136. package/dist/index.es27.js +9 -3
  137. package/dist/index.es27.js.map +1 -1
  138. package/dist/index.es28.js +13 -19
  139. package/dist/index.es28.js.map +1 -1
  140. package/dist/index.es29.js +19 -23
  141. package/dist/index.es29.js.map +1 -1
  142. package/dist/index.es3.js +129 -340
  143. package/dist/index.es3.js.map +1 -1
  144. package/dist/index.es30.js +4 -7
  145. package/dist/index.es30.js.map +1 -1
  146. package/dist/index.es31.js +1 -1
  147. package/dist/index.es34.js +1 -1
  148. package/dist/index.es36.js +7 -7
  149. package/dist/index.es37.js +3 -3
  150. package/dist/index.es38.js +3 -3
  151. package/dist/index.es39.js +2 -2
  152. package/dist/index.es4.js +92 -70
  153. package/dist/index.es4.js.map +1 -1
  154. package/dist/index.es41.js +2 -2
  155. package/dist/index.es42.js +4 -4
  156. package/dist/index.es43.js +6 -6
  157. package/dist/index.es47.js +4 -4
  158. package/dist/index.es5.js +225 -79
  159. package/dist/index.es5.js.map +1 -1
  160. package/dist/index.es55.js +30 -252
  161. package/dist/index.es55.js.map +1 -1
  162. package/dist/index.es56.js +26 -21
  163. package/dist/index.es56.js.map +1 -1
  164. package/dist/index.es57.js +6 -32
  165. package/dist/index.es57.js.map +1 -1
  166. package/dist/index.es58.js +62 -23
  167. package/dist/index.es58.js.map +1 -1
  168. package/dist/index.es59.js +29 -6
  169. package/dist/index.es59.js.map +1 -1
  170. package/dist/index.es6.js +117 -57
  171. package/dist/index.es6.js.map +1 -1
  172. package/dist/index.es60.js +4 -64
  173. package/dist/index.es60.js.map +1 -1
  174. package/dist/index.es61.js +24 -29
  175. package/dist/index.es61.js.map +1 -1
  176. package/dist/index.es62.js +254 -5
  177. package/dist/index.es62.js.map +1 -1
  178. package/dist/index.es63.js +21 -24
  179. package/dist/index.es63.js.map +1 -1
  180. package/dist/index.es65.js +2 -2
  181. package/dist/index.es67.js +3 -3
  182. package/dist/index.es69.js +2 -2
  183. package/dist/index.es7.js +345 -48
  184. package/dist/index.es7.js.map +1 -1
  185. package/dist/index.es71.js +4 -4
  186. package/dist/index.es72.js +1 -1
  187. package/dist/index.es75.js +1 -1
  188. package/dist/index.es78.js +1 -1
  189. package/dist/index.es8.js +73 -163
  190. package/dist/index.es8.js.map +1 -1
  191. package/dist/index.es81.js +1 -1
  192. package/dist/index.es9.js +18 -3
  193. package/dist/index.es9.js.map +1 -1
  194. package/dist/packages/builder/add-dialog.d.ts +5 -5
  195. package/dist/packages/builder/context.d.ts.map +1 -1
  196. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs3.js","sources":["../src/packages/builder/schema-builder.tsx"],"sourcesContent":["import { useEffect, useState, Fragment } from \"react\";\nimport { PropertyAddError, PropertyAddSuccess, useSchema } from \"./context\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Switch } from \"@/components/ui/switch\";\nimport { Bolt, ChevronRight, Copy, Plus, Trash2 } from \"lucide-react\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport { Label } from \"@/components/ui/label\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport { clone } from \"remeda\";\nimport {\n BaseJSONSchemaPlugin,\n useConstraints,\n usePluginSystem,\n} from \"@/packages/constraints/context\";\nimport { EditPropertyDialog } from \"./edit-dialog\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from \"@/components/ui/alert-dialog\";\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\nimport { validateSchema } from \"./utils\";\nimport Ajv from \"ajv\";\nimport { DebouncedInput } from \"@/components/depounced-input\";\nimport { AddPropertyDialog, type AddPropertyDialogProps } from \"./add-dialog\";\nimport { cn } from \"@/lib/utils\";\n\n// PropertyComponent type definition for custom property components\nexport interface PropertyComponentProps {\n property: {\n key: string;\n schema: JSONSchema7;\n isRequired: boolean;\n };\n onPropertyChange: (key: string, changes: Partial<JSONSchema7>) => void;\n onKeyChange: (oldKey: string, newKey: string) => void;\n onDelete: (key: string) => void;\n onDuplicate?: (key: string) => void;\n onNavigate?: (key: string) => void;\n}\n\n// NavigationProps for custom navigation component\nexport interface NavigationProps {\n currentPath: string[];\n onNavigateUp: () => void;\n onNavigateTo: (newPath: string[]) => void;\n isRootPath: boolean;\n}\n\n// AddPropertyButtonProps for custom add property button\nexport interface AddPropertyButtonProps {\n onClick: () => void;\n}\n\ninterface SchemaBuilderProps {\n /** The schema to edit */\n initialSchema?: JSONSchema7;\n /** Constraint plugins to use */\n plugins?: BaseJSONSchemaPlugin[];\n /** Custom component to render properties */\n propertyComponent?: React.ComponentType<PropertyComponentProps>;\n /** Called when the schema changes */\n onSchemaChange?: (schema: JSONSchema7) => void;\n /** Called when a property is successfully added */\n onPropertyAddSuccess?: (props: PropertyAddSuccess) => void;\n /** Called when there's an error adding a property */\n onPropertyAddError?: (props: PropertyAddError) => void;\n /** Called when there's an error changing a property */\n onPropertyChangeError?: (prop: Error) => void;\n /** Called when a property is successfully changed */\n onPropertyChangeSuccess?: () => void;\n /** Class name for the navigation bar back button */\n backButtonClassName?: string;\n /** Class name for the properties list container */\n propertiesListClassName?: string;\n /** Class name for the add property button */\n addPropertyButtonClassName?: string;\n /** Custom navigation component */\n navigationComponent?: React.ComponentType<NavigationProps>;\n /** Custom add property button component */\n addPropertyButtonComponent?: React.ComponentType<AddPropertyButtonProps>;\n}\n\nexport const SchemaBuilder = (props: SchemaBuilderProps) => {\n // State\n const [showPropertyDialog, setShowPropertyDialog] = useState(false);\n const [showEditDialog, setShowEditDialog] = useState(false);\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n const [deleteKey, setDeleteKey] = useState<string | undefined>();\n const [editingKey, setEditingKey] = useState<string | undefined>();\n const [editingProperty, setEditingProperty] = useState<\n JSONSchema7 | undefined\n >();\n const [schemaValidationError, setSchemaValidationError] = useState<\n string | null\n >(null);\n\n // Initialize the plugin system\n usePluginSystem(props.plugins ?? []);\n\n // Get schema context\n const {\n getCurrentSchema,\n setPath,\n path,\n handleAddProperty,\n handlePropertyChange,\n handleKeyChange,\n handleDeleteProperty,\n setSchema,\n isPropertyRequired,\n handleDuplicateProperty,\n } = useSchema({ onSchemaChange: props.onSchemaChange });\n\n // Get constraints context\n const { getConstraintDefinitionsForType } = useConstraints();\n\n // Set schema from props\n useEffect(() => {\n if (props.initialSchema) {\n try {\n // Validate the schema before setting it\n validateSchema(props.initialSchema);\n setSchema(clone(props.initialSchema));\n setSchemaValidationError(null);\n } catch (error) {\n if (error instanceof Error) {\n setSchemaValidationError(error.message);\n } else if (error instanceof Ajv.ValidationError) {\n setSchemaValidationError(`Schema validation error: ${error.message}`);\n } else {\n setSchemaValidationError(\"Unknown schema validation error\");\n }\n }\n }\n }, [props.initialSchema]);\n\n const currentSchema = getCurrentSchema();\n\n // Navigation handlers\n const handleNavigateToProperty = (name: string) => {\n setPath([...path, name]);\n };\n\n const handleNavigateUp = () => {\n setPath(path.slice(0, -1));\n };\n\n // Property management handlers\n const handleEditProperty = (key: string, property: JSONSchema7) => {\n setEditingKey(key);\n setEditingProperty(property);\n setShowEditDialog(true);\n };\n\n const handleInitiateDelete = (key: string) => {\n setDeleteKey(key);\n setShowDeleteDialog(true);\n };\n\n const handleConfirmDelete = () => {\n if (deleteKey) {\n handleDeleteProperty(deleteKey);\n setDeleteKey(undefined);\n }\n setShowDeleteDialog(false);\n };\n\n const handleCancelDelete = () => {\n setDeleteKey(undefined);\n setShowDeleteDialog(false);\n };\n\n const handleDuplicate = (key: string) => {\n const result = handleDuplicateProperty(key);\n\n // Notify if needed\n if (result?.status === \"error\") {\n props.onPropertyAddError?.(result);\n } else if (result?.status === \"success\") {\n props.onPropertyAddSuccess?.(result);\n }\n };\n\n const onAddProperty: AddPropertyDialogProps[\"onSubmit\"] = (...vals) => {\n const result = handleAddProperty(...vals);\n\n if (result.status === \"error\") {\n props.onPropertyAddError?.(result);\n } else if (result.status === \"success\") {\n props.onPropertyAddSuccess?.(result);\n }\n setShowPropertyDialog(false);\n };\n\n // Custom property component or default renderer\n const PropertyComponent = props.propertyComponent;\n\n const renderProperty = (key: string, property: JSONSchema7) => {\n if (PropertyComponent) {\n return (\n <PropertyComponent\n key={key}\n property={{\n key,\n schema: property,\n isRequired: isPropertyRequired(key),\n }}\n onPropertyChange={handlePropertyChange}\n onKeyChange={handleKeyChange}\n onDelete={handleInitiateDelete}\n onDuplicate={handleDuplicate}\n onNavigate={\n property.type === \"object\" ||\n (property.type === \"array\" &&\n typeof property.items === \"object\" &&\n (property.items as JSONSchema7).type === \"object\")\n ? handleNavigateToProperty\n : undefined\n }\n />\n );\n }\n\n // Default property renderer\n return (\n <div\n key={key}\n className=\"flex flex-col md:grid grid-cols-(--my-autofit-grid) gap-4 md:items-center border p-2 rounded-md mb-2\"\n >\n <div className=\"\">\n <DebouncedInput\n value={key}\n onDebounce={(newVal) => handleKeyChange(key, newVal)}\n placeholder=\"Property Key\"\n aria-label={`Property key for ${key}`}\n delay={500}\n />\n </div>\n\n <div className=\"flex items-center gap-2\">\n <Switch\n checked={isPropertyRequired(key)}\n onCheckedChange={(checked) =>\n handlePropertyChange(key, { isRequired: checked })\n }\n aria-label=\"Required\"\n />\n <Label htmlFor={`required-${key}`}>Required</Label>\n </div>\n\n <div className=\"\">\n <Select\n value={\n typeof property === \"object\" && !Array.isArray(property.type)\n ? property.type\n : undefined\n }\n onValueChange={(value) =>\n handlePropertyChange(key, {\n type: value as JSONSchema7[\"type\"],\n })\n }\n aria-label=\"Type\"\n >\n <SelectTrigger className=\"w-full\" aria-label=\"Select type\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={\"string\" satisfies JSONSchema7[\"type\"]}>\n string\n </SelectItem>\n <SelectItem value={\"number\" satisfies JSONSchema7[\"type\"]}>\n number\n </SelectItem>\n <SelectItem value={\"integer\" satisfies JSONSchema7[\"type\"]}>\n integer\n </SelectItem>\n <SelectItem value={\"boolean\" satisfies JSONSchema7[\"type\"]}>\n boolean\n </SelectItem>\n <SelectItem value={\"object\" satisfies JSONSchema7[\"type\"]}>\n object\n </SelectItem>\n <SelectItem value={\"array\" satisfies JSONSchema7[\"type\"]}>\n array\n </SelectItem>\n <SelectItem value={\"null\" satisfies JSONSchema7[\"type\"]}>\n null\n </SelectItem>\n <SelectItem value={\"enum\"}>enum</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"\">\n <DebouncedInput\n value={typeof property === \"object\" ? property.title : undefined}\n onDebounce={(newVal) =>\n handlePropertyChange(key, { title: newVal })\n }\n placeholder=\"Title\"\n />\n </div>\n\n <div className=\"\">\n <DebouncedInput\n value={\n typeof property === \"object\" ? property.description : undefined\n }\n onDebounce={(newVal) =>\n handlePropertyChange(key, { description: newVal })\n }\n placeholder=\"Description\"\n />\n </div>\n\n <div className=\"order-last md:order-none flex gap-2\">\n {/* Delete button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleInitiateDelete(key)}\n aria-label=\"Delete\"\n className=\"block!\"\n >\n <Trash2 size={16} className=\"text-destructive\" />\n </Button>\n\n {/* Duplicate button */}\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleDuplicate(key)}\n aria-label=\"Duplicate\"\n className=\"block!\"\n >\n <Copy size={16} />\n </Button>\n\n {/* Edit button if applicable */}\n {renderEditButton(key, property)}\n\n {/* Navigate button for objects/array items */}\n {renderNavigateButton(key, property)}\n </div>\n\n {/* Render array items configuration if needed */}\n {renderArrayItemsConfig(key, property)}\n </div>\n );\n };\n\n // Helper to render array items configuration\n const renderArrayItemsConfig = (key: string, property: JSONSchema7) => {\n if (typeof property !== \"object\" || property.type !== \"array\") {\n return null;\n }\n\n const items = property.items;\n const itemType =\n !Array.isArray(items) &&\n typeof items === \"object\" &&\n typeof items.type === \"string\"\n ? items?.type\n : \"string\";\n\n return (\n <div className=\"col-span-full flex items-center gap-4 pl-8 mt-2 bg-gray-50 p-2 rounded-md\">\n <Label>Items of type:</Label>\n <Select\n value={itemType as string}\n onValueChange={(value) => {\n const newItems: JSONSchema7 = {\n ...(typeof items === \"object\" ? items : {}),\n type: value as JSONSchema7[\"type\"],\n };\n\n if (value === \"object\") {\n // Initialize empty properties for object type\n newItems.properties = newItems.properties ?? {};\n }\n\n handlePropertyChange(key, { items: newItems });\n }}\n >\n <SelectTrigger\n className=\"w-[200px]\"\n aria-label=\"Select items of type\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={\"string\" satisfies JSONSchema7[\"type\"]}>\n string\n </SelectItem>\n <SelectItem value={\"number\" satisfies JSONSchema7[\"type\"]}>\n number\n </SelectItem>\n <SelectItem value={\"integer\" satisfies JSONSchema7[\"type\"]}>\n integer\n </SelectItem>\n <SelectItem value={\"boolean\" satisfies JSONSchema7[\"type\"]}>\n boolean\n </SelectItem>\n <SelectItem value={\"object\" satisfies JSONSchema7[\"type\"]}>\n object\n </SelectItem>\n <SelectItem value={\"array\" satisfies JSONSchema7[\"type\"]}>\n array\n </SelectItem>\n <SelectItem value={\"null\" satisfies JSONSchema7[\"type\"]}>\n null\n </SelectItem>\n </SelectContent>\n </Select>\n\n {/* Configure object button for array items of type object */}\n {renderNavigateButton(key, items)}\n </div>\n );\n };\n\n // Helper to render the edit constraint button when needed\n const renderEditButton = (key: string, property: JSONSchema7) => {\n if (typeof property !== \"object\") return null;\n\n // Check for constraints\n const availableConstraints = getConstraintDefinitionsForType(\n typeof property.type === \"string\" ? property.type : \"\",\n );\n\n // Check for enum\n const hasEnum = Array.isArray(property?.enum);\n\n if (availableConstraints.length || hasEnum) {\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleEditProperty(key, property)}\n aria-label=\"Edit constraints\"\n >\n <Bolt size={16} />\n </Button>\n );\n }\n\n return null;\n };\n\n const renderNavigateButton = (key: string, items: JSONSchema7[\"items\"]) => {\n if (\n !Array.isArray(items) &&\n typeof items === \"object\" &&\n items?.type === \"object\"\n ) {\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleNavigateToProperty(key)}\n aria-label=\"Navigate\"\n >\n <span className=\"sr-only\">Navigate</span>\n <ChevronRight size={16} />\n </Button>\n );\n }\n\n return null;\n };\n\n // Render navigation component\n const renderNavigation = () => {\n const NavigationComponent = props.navigationComponent;\n\n if (NavigationComponent) {\n return (\n <NavigationComponent\n currentPath={path}\n onNavigateUp={handleNavigateUp}\n onNavigateTo={setPath}\n isRootPath={path.length === 0}\n />\n );\n }\n\n return (\n <div className=\"flex items-center space-x-4\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={handleNavigateUp}\n disabled={path.length === 0}\n className={cn(props.backButtonClassName)}\n >\n Back\n </Button>\n <Breadcrumb>\n <BreadcrumbList>\n <BreadcrumbItem>\n <BreadcrumbLink href=\"#\" onClick={() => setPath([])}>\n Root\n </BreadcrumbLink>\n </BreadcrumbItem>\n {path.map((item, index) => (\n <Fragment key={`path-${index}`}>\n <BreadcrumbSeparator />\n <BreadcrumbItem>\n <BreadcrumbLink\n href=\"#\"\n onClick={() => setPath(path.slice(0, index + 1))}\n >\n {item}\n </BreadcrumbLink>\n </BreadcrumbItem>\n </Fragment>\n ))}\n </BreadcrumbList>\n </Breadcrumb>\n </div>\n );\n };\n\n // Render add property button\n const renderAddPropertyButton = () => {\n const AddPropertyButtonComponent = props.addPropertyButtonComponent;\n\n if (AddPropertyButtonComponent) {\n return (\n <AddPropertyButtonComponent\n onClick={() => setShowPropertyDialog(true)}\n />\n );\n }\n\n return (\n <Button\n type=\"button\"\n className={cn(\"self-center\", props.addPropertyButtonClassName)}\n onClick={() => {\n setShowPropertyDialog(true);\n }}\n >\n <Plus className=\"h-4 w-4 mr-2\" />\n Add Property\n </Button>\n );\n };\n\n return (\n <div>\n {/* Schema validation error */}\n {schemaValidationError && (\n <Alert variant=\"destructive\">\n <AlertTitle>Schema Error</AlertTitle>\n <AlertDescription>{schemaValidationError}</AlertDescription>\n </Alert>\n )}\n\n {/* Navigation bar */}\n {renderNavigation()}\n\n {/* Properties list */}\n <div\n className={cn(\"mt-6 overflow-x-hidden\", props.propertiesListClassName)}\n >\n {Object.entries(currentSchema.properties ?? {}).map(\n ([key, property]) => {\n if (typeof property === \"boolean\") {\n // We don't support editing boolean properties\n return null;\n }\n\n return renderProperty(key, property);\n },\n )}\n </div>\n\n {/* Add property button */}\n {renderAddPropertyButton()}\n\n {/* Add property dialog */}\n <AddPropertyDialog\n open={showPropertyDialog}\n onOpenChange={setShowPropertyDialog}\n onSubmit={onAddProperty}\n />\n\n {/* Edit property dialog */}\n {editingKey && editingProperty && (\n <EditPropertyDialog\n propertyKey={editingKey}\n property={editingProperty}\n open={showEditDialog}\n onOpenChange={setShowEditDialog}\n onSubmit={(params) => {\n handlePropertyChange(...params);\n setEditingKey(undefined);\n setEditingProperty(undefined);\n setShowEditDialog(false);\n }}\n />\n )}\n\n {/* Delete confirmation dialog */}\n <AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Are you sure?</AlertDialogTitle>\n <AlertDialogDescription>\n This action cannot be undone. This will permanently delete the\n property\n {deleteKey ? ` \"${deleteKey}\"` : \"\"} from the schema.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel onClick={handleCancelDelete}>\n Cancel\n </AlertDialogCancel>\n <AlertDialogAction onClick={handleConfirmDelete}>\n Delete\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n );\n};\n"],"names":["SchemaBuilder","props","showPropertyDialog","setShowPropertyDialog","useState","showEditDialog","setShowEditDialog","showDeleteDialog","setShowDeleteDialog","deleteKey","setDeleteKey","editingKey","setEditingKey","editingProperty","setEditingProperty","schemaValidationError","setSchemaValidationError","usePluginSystem","getCurrentSchema","setPath","path","handleAddProperty","handlePropertyChange","handleKeyChange","handleDeleteProperty","setSchema","isPropertyRequired","handleDuplicateProperty","useSchema","getConstraintDefinitionsForType","useConstraints","useEffect","validateSchema","clone","error","Ajv","currentSchema","handleNavigateToProperty","name","handleNavigateUp","handleEditProperty","key","property","handleInitiateDelete","handleConfirmDelete","handleCancelDelete","handleDuplicate","result","onAddProperty","vals","PropertyComponent","renderProperty","jsx","jsxs","DebouncedInput","newVal","Switch","checked","Label","Select","value","SelectTrigger","SelectValue","SelectContent","SelectItem","Button","Trash2","Copy","renderEditButton","renderNavigateButton","renderArrayItemsConfig","items","itemType","newItems","availableConstraints","hasEnum","Bolt","ChevronRight","renderNavigation","NavigationComponent","cn","Breadcrumb","BreadcrumbList","BreadcrumbItem","BreadcrumbLink","item","index","Fragment","BreadcrumbSeparator","renderAddPropertyButton","AddPropertyButtonComponent","Plus","Alert","AlertTitle","AlertDescription","AddPropertyDialog","EditPropertyDialog","params","AlertDialog","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs3.js","sources":["../src/packages/plugins/number.tsx"],"sourcesContent":["import { Input } from \"@/components/ui/input\";\nimport { InputErrorWrapper } from \"@/components/input-error\";\nimport { Label } from \"@/components/ui/label\";\nimport { cn } from \"@/lib/utils\";\nimport {\n BaseJSONSchemaPlugin,\n ConstraintRendererProps,\n useConstraints,\n} from \"@/packages/constraints/context\";\nimport { Button } from \"@/components/ui/button\";\nimport { X } from \"lucide-react\";\n\n// A generic number constraint renderer component to reduce code duplication\nconst NumberConstraintRenderer = ({\n constraintName,\n value,\n onConstraintChange,\n disabled,\n error,\n onRemoveConstraint,\n}: ConstraintRendererProps<number> & { disabled?: boolean }) => {\n const { getConstraintDefinition } = useConstraints();\n const constraintDef = getConstraintDefinition(constraintName);\n\n if (!constraintDef) {\n return null;\n }\n\n return (\n <InputErrorWrapper\n errorCode={error?.code}\n errorDescription={error?.message}\n showError={!!error}\n >\n <div>\n <Label className=\"mb-2\" htmlFor={constraintDef.name}>\n {constraintDef.name}\n </Label>\n <div className=\"flex items-center gap-2\">\n <Input\n id={constraintDef.name}\n type=\"number\"\n value={value}\n onChange={(e) => onConstraintChange(Number(e.target.value))}\n disabled={disabled}\n className={cn({ \"border-destructive\": error })}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onRemoveConstraint()}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n {constraintDef.description && (\n <div className=\"mt-2 text-sm text-gray-500\">\n {constraintDef.description}\n </div>\n )}\n </div>\n </InputErrorWrapper>\n );\n};\n\n// Reuse the generic renderer for all number constraints\nexport const NumberMinimumRenderer = NumberConstraintRenderer;\nexport const NumberMaximumRenderer = NumberConstraintRenderer;\nexport const NumberExclusiveMinimumRenderer = NumberConstraintRenderer;\nexport const NumberExclusiveMaximumRenderer = NumberConstraintRenderer;\nexport const NumberMultipleOfRenderer = NumberConstraintRenderer;\n\nconst plugin: BaseJSONSchemaPlugin = {\n id: \"number-constraints\",\n hooks: {\n registerConstraints() {\n return [\n {\n name: \"minimum\",\n label: \"Minimum\",\n appliesTo: [\"number\", \"integer\"],\n schema: {\n type: \"number\",\n title: \"Minimum Constraint\",\n description: \"The minimum value for this constraint\",\n examples: [0, 1, 10],\n },\n description: \"Constrains a number or integer to a minimum value\",\n defaultValue: 0,\n },\n {\n name: \"maximum\",\n label: \"Maximum\",\n appliesTo: [\"number\", \"integer\"],\n schema: {\n type: \"number\",\n title: \"Maximum Constraint\",\n description: \"The maximum value for this constraint\",\n examples: [10, 100, 1000],\n },\n description: \"Constrains a number or integer to a maximum value\",\n defaultValue: 100,\n },\n {\n name: \"exclusiveMinimum\",\n label: \"Exclusive Minimum\",\n appliesTo: [\"number\", \"integer\"],\n schema: {\n type: \"number\",\n title: \"Exclusive Minimum Constraint\",\n description: \"The value must be strictly greater than this\",\n examples: [0, 1, 10],\n },\n description:\n \"Value must be strictly greater than (not equal to) this value\",\n defaultValue: 0,\n },\n {\n name: \"exclusiveMaximum\",\n label: \"Exclusive Maximum\",\n appliesTo: [\"number\", \"integer\"],\n schema: {\n type: \"number\",\n title: \"Exclusive Maximum Constraint\",\n description: \"The value must be strictly less than this\",\n examples: [10, 100, 1000],\n },\n description:\n \"Value must be strictly less than (not equal to) this value\",\n defaultValue: 100,\n },\n {\n name: \"multipleOf\",\n label: \"Multiple Of\",\n appliesTo: [\"number\", \"integer\"],\n schema: {\n type: \"number\",\n title: \"Multiple Of Constraint\",\n description: \"Value must be a multiple of this number\",\n examples: [2, 5, 10],\n exclusiveMinimum: 0,\n },\n description:\n \"Value must be divisible by this number (e.g., 5 for multiples of 5)\",\n defaultValue: 1,\n },\n ];\n },\n registerRenderers() {\n return {\n minimum: NumberMinimumRenderer,\n maximum: NumberMaximumRenderer,\n exclusiveMinimum: NumberExclusiveMinimumRenderer,\n exclusiveMaximum: NumberExclusiveMaximumRenderer,\n multipleOf: NumberMultipleOfRenderer,\n };\n },\n },\n};\n\nexport default plugin;\n"],"names":["NumberConstraintRenderer","constraintName","value","onConstraintChange","disabled","error","onRemoveConstraint","getConstraintDefinition","useConstraints","constraintDef","jsx","InputErrorWrapper","Label","jsxs","Input","e","cn","Button","X","NumberMinimumRenderer","NumberMaximumRenderer","NumberExclusiveMinimumRenderer","NumberExclusiveMaximumRenderer","NumberMultipleOfRenderer","plugin"],"mappings":"iWAaMA,EAA2B,CAAC,CAChC,eAAAC,EACA,MAAAC,EACA,mBAAAC,EACA,SAAAC,EACA,MAAAC,EACA,mBAAAC,CACF,IAAgE,CACxD,KAAA,CAAE,wBAAAC,CAAwB,EAAIC,iBAAe,EAC7CC,EAAgBF,EAAwBN,CAAc,EAE5D,OAAKQ,EAKHC,EAAA,IAACC,EAAA,kBAAA,CACC,UAAWN,GAAO,KAClB,iBAAkBA,GAAO,QACzB,UAAW,CAAC,CAACA,EAEb,gBAAC,MACC,CAAA,SAAA,CAAAK,EAAAA,IAACE,SAAM,UAAU,OAAO,QAASH,EAAc,KAC5C,WAAc,IACjB,CAAA,EACAI,EAAAA,KAAC,MAAI,CAAA,UAAU,0BACb,SAAA,CAAAH,EAAA,IAACI,EAAA,MAAA,CACC,GAAIL,EAAc,KAClB,KAAK,SACL,MAAAP,EACA,SAAWa,GAAMZ,EAAmB,OAAOY,EAAE,OAAO,KAAK,CAAC,EAC1D,SAAAX,EACA,UAAWY,EAAA,GAAG,CAAE,qBAAsBX,CAAO,CAAA,CAAA,CAC/C,EACAK,EAAA,IAACO,EAAA,OAAA,CACC,KAAK,SACL,QAAQ,QACR,KAAK,OACL,QAAS,IAAMX,EAAmB,EAElC,SAAAI,EAAAA,IAACQ,EAAAA,QAAE,CAAA,UAAU,QAAS,CAAA,CAAA,CAAA,CACxB,EACF,EACCT,EAAc,aACbC,EAAA,IAAC,OAAI,UAAU,6BACZ,WAAc,WACjB,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,EArCO,IAuCX,EAGaS,EAAwBnB,EACxBoB,EAAwBpB,EACxBqB,EAAiCrB,EACjCsB,EAAiCtB,EACjCuB,EAA2BvB,EAElCwB,EAA+B,CACnC,GAAI,qBACJ,MAAO,CACL,qBAAsB,CACb,MAAA,CACL,CACE,KAAM,UACN,MAAO,UACP,UAAW,CAAC,SAAU,SAAS,EAC/B,OAAQ,CACN,KAAM,SACN,MAAO,qBACP,YAAa,wCACb,SAAU,CAAC,EAAG,EAAG,EAAE,CACrB,EACA,YAAa,oDACb,aAAc,CAChB,EACA,CACE,KAAM,UACN,MAAO,UACP,UAAW,CAAC,SAAU,SAAS,EAC/B,OAAQ,CACN,KAAM,SACN,MAAO,qBACP,YAAa,wCACb,SAAU,CAAC,GAAI,IAAK,GAAI,CAC1B,EACA,YAAa,oDACb,aAAc,GAChB,EACA,CACE,KAAM,mBACN,MAAO,oBACP,UAAW,CAAC,SAAU,SAAS,EAC/B,OAAQ,CACN,KAAM,SACN,MAAO,+BACP,YAAa,+CACb,SAAU,CAAC,EAAG,EAAG,EAAE,CACrB,EACA,YACE,gEACF,aAAc,CAChB,EACA,CACE,KAAM,mBACN,MAAO,oBACP,UAAW,CAAC,SAAU,SAAS,EAC/B,OAAQ,CACN,KAAM,SACN,MAAO,+BACP,YAAa,4CACb,SAAU,CAAC,GAAI,IAAK,GAAI,CAC1B,EACA,YACE,6DACF,aAAc,GAChB,EACA,CACE,KAAM,aACN,MAAO,cACP,UAAW,CAAC,SAAU,SAAS,EAC/B,OAAQ,CACN,KAAM,SACN,MAAO,yBACP,YAAa,0CACb,SAAU,CAAC,EAAG,EAAG,EAAE,EACnB,iBAAkB,CACpB,EACA,YACE,sEACF,aAAc,CAAA,CAElB,CACF,EACA,mBAAoB,CACX,MAAA,CACL,QAASL,EACT,QAASC,EACT,iBAAkBC,EAClB,iBAAkBC,EAClB,WAAYC,CACd,CAAA,CACF,CAEJ"}
@@ -3,5 +3,5 @@
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const e=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],o=t.default("X",e);exports.__iconNode=e;exports.default=o;
6
+ */const e=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],o=t.default("ChevronRight",e);exports.__iconNode=e;exports.default=o;
7
7
  //# sourceMappingURL=index.cjs30.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs30.js","sources":["../../../node_modules/.pnpm/lucide-react@0.477.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/x.js"],"sourcesContent":["/**\n * @license lucide-react v0.477.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"X\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n"],"names":["__iconNode","X","createLucideIcon"],"mappings":"gJAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAQ,CAAE,EAC3C,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAU,CAAA,CAC7C,EACMC,EAAIC,EAAAA,QAAiB,IAAKF,CAAU","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.cjs30.js","sources":["../../../node_modules/.pnpm/lucide-react@0.477.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-right.js"],"sourcesContent":["/**\n * @license lucide-react v0.477.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"ChevronRight\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n"],"names":["__iconNode","ChevronRight","createLucideIcon"],"mappings":"gJAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAa,CAAC,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,SAAU,CAAC,EAC7DC,EAAeC,EAAAA,QAAiB,eAAgBF,CAAU","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),u=require("./index.cjs57.js"),i=require("react/jsx-runtime");function c(t){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const a=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(r,e,a.get?a:{enumerable:!0,get:()=>t[e]})}}return r.default=t,Object.freeze(r)}const l=c(n);var s="Label",o=l.forwardRef((t,r)=>i.jsx(u.Primitive.label,{...t,ref:r,onMouseDown:e=>{e.target.closest("button, input, select, textarea")||(t.onMouseDown?.(e),!e.defaultPrevented&&e.detail>1&&e.preventDefault())}}));o.displayName=s;var f=o;exports.Label=o;exports.Root=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),u=require("./index.cjs55.js"),i=require("react/jsx-runtime");function c(t){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const a=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(r,e,a.get?a:{enumerable:!0,get:()=>t[e]})}}return r.default=t,Object.freeze(r)}const l=c(n);var s="Label",o=l.forwardRef((t,r)=>i.jsx(u.Primitive.label,{...t,ref:r,onMouseDown:e=>{e.target.closest("button, input, select, textarea")||(t.onMouseDown?.(e),!e.defaultPrevented&&e.detail>1&&e.preventDefault())}}));o.displayName=s;var f=o;exports.Label=o;exports.Root=f;
2
2
  //# sourceMappingURL=index.cjs31.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("react"),m=require("./index.cjs58.js"),a=require("react/jsx-runtime");function y(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const o=y(g);var p=o.forwardRef((e,t)=>{const{children:r,...n}=e,l=o.Children.toArray(r),i=l.find(b);if(i){const s=i.props.children,c=l.map(f=>f===i?o.Children.count(s)>1?o.Children.only(null):o.isValidElement(s)?s.props.children:null:f);return a.jsx(u,{...n,ref:t,children:o.isValidElement(s)?o.cloneElement(s,void 0,c):null})}return a.jsx(u,{...n,ref:t,children:r})});p.displayName="Slot";var u=o.forwardRef((e,t)=>{const{children:r,...n}=e;if(o.isValidElement(r)){const l=S(r),i=j(n,r.props);return r.type!==o.Fragment&&(i.ref=t?m.composeRefs(t,l):l),o.cloneElement(r,i)}return o.Children.count(r)>1?o.Children.only(null):null});u.displayName="SlotClone";var d=({children:e})=>a.jsx(a.Fragment,{children:e});function b(e){return o.isValidElement(e)&&e.type===d}function j(e,t){const r={...t};for(const n in t){const l=e[n],i=t[n];/^on[A-Z]/.test(n)?l&&i?r[n]=(...c)=>{i(...c),l(...c)}:l&&(r[n]=l):n==="style"?r[n]={...l,...i}:n==="className"&&(r[n]=[l,i].filter(Boolean).join(" "))}return{...e,...r}}function S(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}exports.Slot=p;exports.Slottable=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("react"),m=require("./index.cjs56.js"),a=require("react/jsx-runtime");function y(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const o=y(g);var p=o.forwardRef((e,t)=>{const{children:r,...n}=e,l=o.Children.toArray(r),i=l.find(b);if(i){const s=i.props.children,c=l.map(f=>f===i?o.Children.count(s)>1?o.Children.only(null):o.isValidElement(s)?s.props.children:null:f);return a.jsx(u,{...n,ref:t,children:o.isValidElement(s)?o.cloneElement(s,void 0,c):null})}return a.jsx(u,{...n,ref:t,children:r})});p.displayName="Slot";var u=o.forwardRef((e,t)=>{const{children:r,...n}=e;if(o.isValidElement(r)){const l=S(r),i=j(n,r.props);return r.type!==o.Fragment&&(i.ref=t?m.composeRefs(t,l):l),o.cloneElement(r,i)}return o.Children.count(r)>1?o.Children.only(null):null});u.displayName="SlotClone";var d=({children:e})=>a.jsx(a.Fragment,{children:e});function b(e){return o.isValidElement(e)&&e.type===d}function j(e,t){const r={...t};for(const n in t){const l=e[n],i=t[n];/^on[A-Z]/.test(n)?l&&i?r[n]=(...c)=>{i(...c),l(...c)}:l&&(r[n]=l):n==="style"?r[n]={...l,...i}:n==="className"&&(r[n]=[l,i].filter(Boolean).join(" "))}return{...e,...r}}function S(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}exports.Slot=p;exports.Slottable=d;
2
2
  //# sourceMappingURL=index.cjs34.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("react"),_=require("./index.cjs59.js"),E=require("./index.cjs58.js"),O=require("./index.cjs60.js"),M=require("./index.cjs61.js"),$=require("./index.cjs62.js"),N=require("./index.cjs63.js"),C=require("./index.cjs57.js"),d=require("react/jsx-runtime");function H(e){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(o,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return o.default=e,Object.freeze(o)}const s=H(T);var v="Switch",[I,z]=O.createContextScope(v),[B,D]=I(v),w=s.forwardRef((e,o)=>{const{__scopeSwitch:t,name:r,checked:c,defaultChecked:l,required:i,disabled:n,value:a="on",onCheckedChange:b,form:S,...p}=e,[u,y]=s.useState(null),j=E.useComposedRefs(o,f=>y(f)),m=s.useRef(!1),x=u?S||!!u.closest("form"):!0,[h=!1,R]=M.useControllableState({prop:c,defaultProp:l,onChange:b});return d.jsxs(B,{scope:t,checked:h,disabled:n,children:[d.jsx(C.Primitive.button,{type:"button",role:"switch","aria-checked":h,"aria-required":i,"data-state":g(h),"data-disabled":n?"":void 0,disabled:n,value:a,...p,ref:j,onClick:_.composeEventHandlers(e.onClick,f=>{R(q=>!q),x&&(m.current=f.isPropagationStopped(),m.current||f.stopPropagation())})}),x&&d.jsx(A,{control:u,bubbles:!m.current,name:r,value:a,checked:h,required:i,disabled:n,form:S,style:{transform:"translateX(-100%)"}})]})});w.displayName=v;var P="SwitchThumb",k=s.forwardRef((e,o)=>{const{__scopeSwitch:t,...r}=e,c=D(P,t);return d.jsx(C.Primitive.span,{"data-state":g(c.checked),"data-disabled":c.disabled?"":void 0,...r,ref:o})});k.displayName=P;var A=e=>{const{control:o,checked:t,bubbles:r=!0,...c}=e,l=s.useRef(null),i=$.usePrevious(t),n=N.useSize(o);return s.useEffect(()=>{const a=l.current,b=window.HTMLInputElement.prototype,p=Object.getOwnPropertyDescriptor(b,"checked").set;if(i!==t&&p){const u=new Event("click",{bubbles:r});p.call(a,t),a.dispatchEvent(u)}},[i,t,r]),d.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:t,...c,tabIndex:-1,ref:l,style:{...e.style,...n,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})};function g(e){return e?"checked":"unchecked"}var F=w,L=k;exports.Root=F;exports.Switch=w;exports.SwitchThumb=k;exports.Thumb=L;exports.createSwitchScope=z;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("react"),_=require("./index.cjs57.js"),E=require("./index.cjs56.js"),O=require("./index.cjs58.js"),M=require("./index.cjs59.js"),$=require("./index.cjs60.js"),N=require("./index.cjs61.js"),C=require("./index.cjs55.js"),d=require("react/jsx-runtime");function H(e){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(o,t,r.get?r:{enumerable:!0,get:()=>e[t]})}}return o.default=e,Object.freeze(o)}const s=H(T);var v="Switch",[I,z]=O.createContextScope(v),[B,D]=I(v),w=s.forwardRef((e,o)=>{const{__scopeSwitch:t,name:r,checked:c,defaultChecked:l,required:i,disabled:n,value:a="on",onCheckedChange:b,form:S,...p}=e,[u,y]=s.useState(null),j=E.useComposedRefs(o,f=>y(f)),m=s.useRef(!1),x=u?S||!!u.closest("form"):!0,[h=!1,R]=M.useControllableState({prop:c,defaultProp:l,onChange:b});return d.jsxs(B,{scope:t,checked:h,disabled:n,children:[d.jsx(C.Primitive.button,{type:"button",role:"switch","aria-checked":h,"aria-required":i,"data-state":g(h),"data-disabled":n?"":void 0,disabled:n,value:a,...p,ref:j,onClick:_.composeEventHandlers(e.onClick,f=>{R(q=>!q),x&&(m.current=f.isPropagationStopped(),m.current||f.stopPropagation())})}),x&&d.jsx(A,{control:u,bubbles:!m.current,name:r,value:a,checked:h,required:i,disabled:n,form:S,style:{transform:"translateX(-100%)"}})]})});w.displayName=v;var P="SwitchThumb",k=s.forwardRef((e,o)=>{const{__scopeSwitch:t,...r}=e,c=D(P,t);return d.jsx(C.Primitive.span,{"data-state":g(c.checked),"data-disabled":c.disabled?"":void 0,...r,ref:o})});k.displayName=P;var A=e=>{const{control:o,checked:t,bubbles:r=!0,...c}=e,l=s.useRef(null),i=$.usePrevious(t),n=N.useSize(o);return s.useEffect(()=>{const a=l.current,b=window.HTMLInputElement.prototype,p=Object.getOwnPropertyDescriptor(b,"checked").set;if(i!==t&&p){const u=new Event("click",{bubbles:r});p.call(a,t),a.dispatchEvent(u)}},[i,t,r]),d.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:t,...c,tabIndex:-1,ref:l,style:{...e.style,...n,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})};function g(e){return e?"checked":"unchecked"}var F=w,L=k;exports.Root=F;exports.Switch=w;exports.SwitchThumb=k;exports.Thumb=L;exports.createSwitchScope=z;
2
2
  //# sourceMappingURL=index.cjs36.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("./index.cjs55.js"),n=require("./index.cjs22.js"),r=require("./index.cjs30.js");function d({...t}){return e.jsx(o.Root,{"data-slot":"dialog",...t})}function s({...t}){return e.jsx(o.Portal,{"data-slot":"dialog-portal",...t})}function i({className:t,...a}){return e.jsx(o.Overlay,{"data-slot":"dialog-overlay",className:n.cn("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80",t),...a})}function c({className:t,children:a,...l}){return e.jsxs(s,{"data-slot":"dialog-portal",children:[e.jsx(i,{}),e.jsxs(o.Content,{"data-slot":"dialog-content",className:n.cn("bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",t),...l,children:[a,e.jsxs(o.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[e.jsx(r.default,{}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function g({className:t,...a}){return e.jsx("div",{"data-slot":"dialog-header",className:n.cn("flex flex-col gap-2 text-center sm:text-left",t),...a})}function u({className:t,...a}){return e.jsx("div",{"data-slot":"dialog-footer",className:n.cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t),...a})}function f({className:t,...a}){return e.jsx(o.Title,{"data-slot":"dialog-title",className:n.cn("text-lg leading-none font-semibold",t),...a})}function x({className:t,...a}){return e.jsx(o.Description,{"data-slot":"dialog-description",className:n.cn("text-muted-foreground text-sm",t),...a})}exports.Dialog=d;exports.DialogContent=c;exports.DialogDescription=x;exports.DialogFooter=u;exports.DialogHeader=g;exports.DialogOverlay=i;exports.DialogPortal=s;exports.DialogTitle=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("./index.cjs62.js"),n=require("./index.cjs12.js"),r=require("./index.cjs15.js");function d({...t}){return e.jsx(o.Root,{"data-slot":"dialog",...t})}function s({...t}){return e.jsx(o.Portal,{"data-slot":"dialog-portal",...t})}function i({className:t,...a}){return e.jsx(o.Overlay,{"data-slot":"dialog-overlay",className:n.cn("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80",t),...a})}function c({className:t,children:a,...l}){return e.jsxs(s,{"data-slot":"dialog-portal",children:[e.jsx(i,{}),e.jsxs(o.Content,{"data-slot":"dialog-content",className:n.cn("bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",t),...l,children:[a,e.jsxs(o.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[e.jsx(r.default,{}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function g({className:t,...a}){return e.jsx("div",{"data-slot":"dialog-header",className:n.cn("flex flex-col gap-2 text-center sm:text-left",t),...a})}function u({className:t,...a}){return e.jsx("div",{"data-slot":"dialog-footer",className:n.cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",t),...a})}function f({className:t,...a}){return e.jsx(o.Title,{"data-slot":"dialog-title",className:n.cn("text-lg leading-none font-semibold",t),...a})}function x({className:t,...a}){return e.jsx(o.Description,{"data-slot":"dialog-description",className:n.cn("text-muted-foreground text-sm",t),...a})}exports.Dialog=d;exports.DialogContent=c;exports.DialogDescription=x;exports.DialogFooter=u;exports.DialogHeader=g;exports.DialogOverlay=i;exports.DialogPortal=s;exports.DialogTitle=f;
2
2
  //# sourceMappingURL=index.cjs37.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),m=require("react"),l=require("./index.cjs14.js"),f=require("./index.cjs11.js"),h=require("./index.cjs23.js"),x=({availableDefinitions:i,addedConstraints:a,onAdd:o})=>{const[n,r]=m.useState(),u=()=>{if(!n)return;const e=i.find(d=>d.name===n);if(!e)return;const s={name:n,value:e.defaultValue};o([...a,s]),r(void 0)},c=i.filter(e=>!a.some(s=>s.name===e.name));return c.length>0&&t.jsxs("div",{className:"flex items-end gap-2",children:[t.jsx("div",{className:"flex-1",children:t.jsxs(l.Select,{value:n,onValueChange:e=>{r(e)},children:[t.jsx(l.SelectTrigger,{className:"w-full","aria-label":"Select constraint",children:t.jsx(l.SelectValue,{placeholder:"Select a constraint"})}),t.jsx(l.SelectContent,{children:c.map(e=>t.jsx(l.SelectItem,{value:e.name,children:e.label},e.name))})]})}),t.jsx(f.Button,{type:"button",variant:"outline",size:"icon",onClick:u,disabled:!n,"aria-label":"Add constraint",children:t.jsx(h.default,{className:"h-4 w-4"})})]})};exports.default=x;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),m=require("react"),l=require("./index.cjs16.js"),f=require("./index.cjs13.js"),h=require("./index.cjs26.js"),x=({availableDefinitions:i,addedConstraints:a,onAdd:o})=>{const[n,r]=m.useState(),u=()=>{if(!n)return;const e=i.find(d=>d.name===n);if(!e)return;const s={name:n,value:e.defaultValue};o([...a,s]),r(void 0)},c=i.filter(e=>!a.some(s=>s.name===e.name));return c.length>0&&t.jsxs("div",{className:"flex items-end gap-2",children:[t.jsx("div",{className:"flex-1",children:t.jsxs(l.Select,{value:n,onValueChange:e=>{r(e)},children:[t.jsx(l.SelectTrigger,{className:"w-full","aria-label":"Select constraint",children:t.jsx(l.SelectValue,{placeholder:"Select a constraint"})}),t.jsx(l.SelectContent,{children:c.map(e=>t.jsx(l.SelectItem,{value:e.name,children:e.label},e.name))})]})}),t.jsx(f.Button,{type:"button",variant:"outline",size:"icon",onClick:u,disabled:!n,"aria-label":"Add constraint",children:t.jsx(h.default,{className:"h-4 w-4"})})]})};exports.default=x;
2
2
  //# sourceMappingURL=index.cjs38.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("./index.cjs56.js"),n=require("./index.cjs22.js");function l({className:t,orientation:r="horizontal",decorative:o=!0,...a}){return e.jsx(i.Root,{"data-slot":"separator-root",decorative:o,orientation:r,className:n.cn("bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",t),...a})}exports.Separator=l;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("./index.cjs63.js"),n=require("./index.cjs12.js");function l({className:t,orientation:r="horizontal",decorative:o=!0,...a}){return e.jsx(i.Root,{"data-slot":"separator-root",decorative:o,orientation:r,className:n.cn("bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",t),...a})}exports.Separator=l;
2
2
  //# sourceMappingURL=index.cjs39.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("react/jsx-runtime"),o=require("react"),C=require("./index.cjs19.js"),d=o.createContext(void 0),P=({children:t})=>{const s=o.useRef(new Map),i=o.useRef(new Map);return v.jsx(d.Provider,{value:{constraintDefinitionsMap:s.current,constraintRenderersMap:i.current},children:t})};function h(t){const s=o.useContext(d);if(!s)throw new Error("usePluginSystem must be used within a PluginsProvider");const{constraintDefinitionsMap:i,constraintRenderersMap:c}=s;return o.useMemo(()=>(t.forEach(e=>{if(e.hooks.registerConstraints&&e.hooks.registerConstraints().forEach(a=>{i.set(a.name,a)}),e.hooks.registerRenderers){const r=e.hooks.registerRenderers();Object.entries(r).forEach(([a,n])=>{c.set(a,n)})}}),{hasPlugin(e){return t.some(r=>r.id===e)},getPlugin(e){return t.find(r=>r.id===e)}}),[t])}const R=()=>{const t=o.useContext(d);if(!t)throw new Error("useConstraints must be used within a ConstraintsProvider");const{constraintDefinitionsMap:s,constraintRenderersMap:i}=t,c=()=>Array.from(s.values()),f=n=>c().filter(u=>u.appliesTo.includes(n)),e=n=>s.get(n);return{getConstraintDefinitionsForType:f,getAllDefinitions:c,getRendererForConstraint:n=>i.get(n),getConstraintDefinition:e,validateConstraintValue:(n,l)=>{const u=e(n);if(u){const m=u.schema,g=C.ajv.compile(m);return g(l)?{status:"success"}:{status:"error",code:"invalid",message:"Invalid value",error:g.errors}}return{status:"error",code:"constraint-def-missing",message:"Constraint not found"}}}};exports.PluginsProvider=P;exports.useConstraints=R;exports.usePluginSystem=h;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),d=require("./index.cjs9.js"),b=require("./index.cjs10.js"),x=require("./index.cjs11.js"),h=require("./index.cjs12.js"),j=require("./index.cjs8.js"),f=require("./index.cjs13.js"),g=require("./index.cjs15.js"),i=({constraintName:o,value:a,onConstraintChange:c,disabled:m,error:r,onRemoveConstraint:u})=>{const{getConstraintDefinition:p}=j.useConstraints(),t=p(o);return t?e.jsx(b.InputErrorWrapper,{errorCode:r?.code,errorDescription:r?.message,showError:!!r,children:e.jsxs("div",{children:[e.jsx(x.Label,{className:"mb-2",htmlFor:t.name,children:t.name}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(d.Input,{id:t.name,type:"number",value:a,onChange:l=>c(Number(l.target.value)),disabled:m,min:0,className:h.cn({"border-destructive":r})}),e.jsx(f.Button,{type:"button",variant:"ghost",size:"icon",onClick:()=>u(),children:e.jsx(g.default,{className:"size-4"})})]}),t.description&&e.jsx("div",{className:"mt-2 text-sm text-gray-500",children:t.description})]})}):null},n=i,s=i,P={id:"object-constraints",hooks:{registerConstraints(){return[{name:"minProperties",label:"Min Properties",appliesTo:["object"],schema:{type:"integer",title:"Minimum Properties Constraint",description:"The minimum number of properties the object must have",examples:[1,2,5],minimum:0},description:"Specifies the minimum number of properties in the object",defaultValue:0},{name:"maxProperties",label:"Max Properties",appliesTo:["object"],schema:{type:"integer",title:"Maximum Properties Constraint",description:"The maximum number of properties the object can have",examples:[5,10,20],minimum:0},description:"Specifies the maximum number of properties in the object",defaultValue:10}]},registerRenderers(){return{minProperties:n,maxProperties:s}}}};exports.ObjectMaxPropertiesRenderer=s;exports.ObjectMinPropertiesRenderer=n;exports.default=P;
2
2
  //# sourceMappingURL=index.cjs4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs4.js","sources":["../src/packages/constraints/context.tsx"],"sourcesContent":["import { createContext, useContext, useMemo, useRef } from \"react\";\nimport type { PropsWithChildren, ComponentType } from \"react\";\n\nimport type { JSONSchema7 } from \"json-schema\";\nimport { ajv } from \"@/packages/builder/utils\";\nimport type { OperationError } from \"../builder/shared-types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface ConstraintRendererProps<T = any> {\n value: T;\n onConstraintChange: (newValue: T) => void;\n onRemoveConstraint: () => void;\n constraintName: string;\n // Is this constraint disabled/readonly\n disabled?: boolean;\n error?: OperationError;\n}\n\nexport interface ConstraintDefinition {\n /**\n * The unique identifier for the constraint\n */\n name: keyof JSONSchema7;\n label: string;\n /**\n * Types this constraint applies to.\n */\n appliesTo: string[];\n /**\n * Apply JSON schema principles to the constraint.\n */\n schema: JSONSchema7;\n description?: string;\n defaultValue: unknown;\n}\n\nexport interface Constraint {\n name: ConstraintDefinition[\"name\"];\n value: unknown;\n}\n\nexport interface BaseJSONSchemaPlugin {\n id: string;\n hooks: {\n registerConstraints?: () => ConstraintDefinition[];\n registerRenderers?: () => Record<\n string,\n ComponentType<ConstraintRendererProps>\n >;\n };\n}\n\ninterface ContextState {\n constraintDefinitionsMap: Map<string, ConstraintDefinition>;\n constraintRenderersMap: Map<string, ComponentType<ConstraintRendererProps>>;\n}\n\nconst PluginsContext = createContext<ContextState | undefined>(undefined);\n\nexport const PluginsProvider = ({ children }: PropsWithChildren) => {\n // Store references. If you need to trigger a re-render,\n //use the methods in usePluginSystem hook instead\n const constraintDefinitionsRef = useRef<Map<string, ConstraintDefinition>>(\n new Map(),\n );\n const constraintRenderersRef = useRef<\n Map<string, ComponentType<ConstraintRendererProps>>\n >(new Map());\n\n return (\n <PluginsContext.Provider\n value={{\n constraintDefinitionsMap: constraintDefinitionsRef.current,\n constraintRenderersMap: constraintRenderersRef.current,\n }}\n >\n {children}\n </PluginsContext.Provider>\n );\n};\n\n// The main plugin system hook\nexport function usePluginSystem<TPlugin extends BaseJSONSchemaPlugin>(\n plugins: TPlugin[],\n) {\n const context = useContext(PluginsContext);\n if (!context) {\n throw new Error(\"usePluginSystem must be used within a PluginsProvider\");\n }\n\n const { constraintDefinitionsMap, constraintRenderersMap } = context;\n\n const memoizedPluginValues = useMemo(() => {\n // Register all plugins\n plugins.forEach((plugin) => {\n // Register constraints\n if (plugin.hooks.registerConstraints) {\n const constraints = plugin.hooks.registerConstraints();\n constraints.forEach((constraint) => {\n constraintDefinitionsMap.set(constraint.name, constraint);\n });\n }\n\n // Register renderers\n if (plugin.hooks.registerRenderers) {\n const renderers = plugin.hooks.registerRenderers();\n Object.entries(renderers).forEach(([name, component]) => {\n constraintRenderersMap.set(name, component);\n });\n }\n });\n\n return {\n // Check if a plugin with given ID exists\n hasPlugin(id: string): boolean {\n return plugins.some((plugin) => plugin.id === id);\n },\n\n // Get a plugin by ID\n getPlugin(id: string): BaseJSONSchemaPlugin | undefined {\n return plugins.find((plugin) => plugin.id === id);\n },\n };\n }, [plugins]);\n\n return memoizedPluginValues;\n}\n\nexport const useConstraints = () => {\n const context = useContext(PluginsContext);\n if (!context) {\n throw new Error(\"useConstraints must be used within a ConstraintsProvider\");\n }\n\n const { constraintDefinitionsMap, constraintRenderersMap } = context;\n\n const getAllDefinitions = (): ConstraintDefinition[] => {\n return Array.from(constraintDefinitionsMap.values());\n };\n\n const getConstraintDefinitionsForType = (\n type: string,\n ): ConstraintDefinition[] => {\n const definitions = getAllDefinitions();\n return definitions.filter((definition) =>\n definition.appliesTo.includes(type),\n );\n };\n\n const getConstraintDefinition = (constraintName: string) => {\n return constraintDefinitionsMap.get(constraintName);\n };\n\n const getRendererForConstraint = (constraintName: string) => {\n return constraintRenderersMap.get(constraintName);\n };\n\n const validateConstraintValue = (constraintName: string, value: unknown) => {\n const constraintDefinition = getConstraintDefinition(constraintName);\n\n if (constraintDefinition) {\n const schema = constraintDefinition.schema;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const validate = ajv.compile<any>(schema);\n const valid = validate(value);\n\n if (valid) {\n return { status: \"success\" as const };\n }\n\n const obj = {\n status: \"error\" as const,\n code: \"invalid\" as const,\n message: \"Invalid value\",\n error: validate.errors,\n };\n\n return obj satisfies OperationError;\n }\n\n const obj = {\n status: \"error\" as const,\n code: \"constraint-def-missing\" as const,\n message: \"Constraint not found\",\n };\n\n return obj satisfies OperationError;\n };\n\n return {\n getConstraintDefinitionsForType,\n getAllDefinitions,\n getRendererForConstraint,\n getConstraintDefinition,\n validateConstraintValue,\n };\n};\n"],"names":["PluginsContext","createContext","PluginsProvider","children","constraintDefinitionsRef","useRef","constraintRenderersRef","jsx","usePluginSystem","plugins","context","useContext","constraintDefinitionsMap","constraintRenderersMap","useMemo","plugin","constraint","renderers","name","component","id","useConstraints","getAllDefinitions","getConstraintDefinitionsForType","type","definition","getConstraintDefinition","constraintName","value","constraintDefinition","schema","validate","ajv"],"mappings":"sKAyDMA,EAAiBC,gBAAwC,MAAS,EAE3DC,EAAkB,CAAC,CAAE,SAAAC,KAAkC,CAGlE,MAAMC,EAA2BC,EAAA,WAC3B,GACN,EACMC,EAAyBD,EAAAA,OAEzB,IAAA,GAAK,EAGT,OAAAE,EAAA,IAACP,EAAe,SAAf,CACC,MAAO,CACL,yBAA0BI,EAAyB,QACnD,uBAAwBE,EAAuB,OACjD,EAEC,SAAAH,CAAA,CACH,CAEJ,EAGO,SAASK,EACdC,EACA,CACM,MAAAC,EAAUC,aAAWX,CAAc,EACzC,GAAI,CAACU,EACG,MAAA,IAAI,MAAM,uDAAuD,EAGnE,KAAA,CAAE,yBAAAE,EAA0B,uBAAAC,CAAA,EAA2BH,EAmCtD,OAjCsBI,EAAAA,QAAQ,KAE3BL,EAAA,QAASM,GAAW,CAUtB,GARAA,EAAO,MAAM,qBACKA,EAAO,MAAM,oBAAoB,EACzC,QAASC,GAAe,CACTJ,EAAA,IAAII,EAAW,KAAMA,CAAU,CAAA,CACzD,EAICD,EAAO,MAAM,kBAAmB,CAC5B,MAAAE,EAAYF,EAAO,MAAM,kBAAkB,EAC1C,OAAA,QAAQE,CAAS,EAAE,QAAQ,CAAC,CAACC,EAAMC,CAAS,IAAM,CAChCN,EAAA,IAAIK,EAAMC,CAAS,CAAA,CAC3C,CAAA,CACH,CACD,EAEM,CAEL,UAAUC,EAAqB,CAC7B,OAAOX,EAAQ,KAAMM,GAAWA,EAAO,KAAOK,CAAE,CAClD,EAGA,UAAUA,EAA8C,CACtD,OAAOX,EAAQ,KAAMM,GAAWA,EAAO,KAAOK,CAAE,CAAA,CAEpD,GACC,CAACX,CAAO,CAAC,CAGd,CAEO,MAAMY,EAAiB,IAAM,CAC5B,MAAAX,EAAUC,aAAWX,CAAc,EACzC,GAAI,CAACU,EACG,MAAA,IAAI,MAAM,0DAA0D,EAGtE,KAAA,CAAE,yBAAAE,EAA0B,uBAAAC,CAAA,EAA2BH,EAEvDY,EAAoB,IACjB,MAAM,KAAKV,EAAyB,OAAA,CAAQ,EAG/CW,EACJC,GAEoBF,EAAkB,EACnB,OAAQG,GACzBA,EAAW,UAAU,SAASD,CAAI,CACpC,EAGIE,EAA2BC,GACxBf,EAAyB,IAAIe,CAAc,EAuC7C,MAAA,CACL,gCAAAJ,EACA,kBAAAD,EACA,yBAvCgCK,GACzBd,EAAuB,IAAIc,CAAc,EAuChD,wBAAAD,EACA,wBArC8B,CAACC,EAAwBC,IAAmB,CACpE,MAAAC,EAAuBH,EAAwBC,CAAc,EAEnE,GAAIE,EAAsB,CACxB,MAAMC,EAASD,EAAqB,OAE9BE,EAAWC,EAAAA,IAAI,QAAaF,CAAM,EAGxC,OAFcC,EAASH,CAAK,EAGnB,CAAE,OAAQ,SAAmB,EAG1B,CACV,OAAQ,QACR,KAAM,UACN,QAAS,gBACT,MAAOG,EAAS,MAClB,CAEO,CASF,MANK,CACV,OAAQ,QACR,KAAM,yBACN,QAAS,sBACX,CAGF,CAQA,CACF"}
1
+ {"version":3,"file":"index.cjs4.js","sources":["../src/packages/plugins/object.tsx"],"sourcesContent":["import { Input } from \"@/components/ui/input\";\nimport { InputErrorWrapper } from \"@/components/input-error\";\nimport { Label } from \"@/components/ui/label\";\nimport { cn } from \"@/lib/utils\";\nimport {\n BaseJSONSchemaPlugin,\n ConstraintRendererProps,\n useConstraints,\n} from \"@/packages/constraints/context\";\nimport { Button } from \"@/components/ui/button\";\nimport { X } from \"lucide-react\";\n\n// Number constraint renderer for minProperties and maxProperties\nconst ObjectNumberConstraintRenderer = ({\n constraintName,\n value,\n onConstraintChange,\n disabled,\n error,\n onRemoveConstraint,\n}: ConstraintRendererProps<number> & { disabled?: boolean }) => {\n const { getConstraintDefinition } = useConstraints();\n const constraintDef = getConstraintDefinition(constraintName);\n\n if (!constraintDef) {\n return null;\n }\n\n return (\n <InputErrorWrapper\n errorCode={error?.code}\n errorDescription={error?.message}\n showError={!!error}\n >\n <div>\n <Label className=\"mb-2\" htmlFor={constraintDef.name}>\n {constraintDef.name}\n </Label>\n <div className=\"flex items-center gap-2\">\n <Input\n id={constraintDef.name}\n type=\"number\"\n value={value}\n onChange={(e) => onConstraintChange(Number(e.target.value))}\n disabled={disabled}\n min={0}\n className={cn({ \"border-destructive\": error })}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onRemoveConstraint()}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n {constraintDef.description && (\n <div className=\"mt-2 text-sm text-gray-500\">\n {constraintDef.description}\n </div>\n )}\n </div>\n </InputErrorWrapper>\n );\n};\n\n// Export the renderers\nexport const ObjectMinPropertiesRenderer = ObjectNumberConstraintRenderer;\nexport const ObjectMaxPropertiesRenderer = ObjectNumberConstraintRenderer;\n\nconst plugin: BaseJSONSchemaPlugin = {\n id: \"object-constraints\",\n hooks: {\n registerConstraints() {\n return [\n {\n name: \"minProperties\",\n label: \"Min Properties\",\n appliesTo: [\"object\"],\n schema: {\n type: \"integer\",\n title: \"Minimum Properties Constraint\",\n description:\n \"The minimum number of properties the object must have\",\n examples: [1, 2, 5],\n minimum: 0,\n },\n description:\n \"Specifies the minimum number of properties in the object\",\n defaultValue: 0,\n },\n {\n name: \"maxProperties\",\n label: \"Max Properties\",\n appliesTo: [\"object\"],\n schema: {\n type: \"integer\",\n title: \"Maximum Properties Constraint\",\n description: \"The maximum number of properties the object can have\",\n examples: [5, 10, 20],\n minimum: 0,\n },\n description:\n \"Specifies the maximum number of properties in the object\",\n defaultValue: 10,\n },\n ];\n },\n registerRenderers() {\n return {\n minProperties: ObjectMinPropertiesRenderer,\n maxProperties: ObjectMaxPropertiesRenderer,\n };\n },\n },\n};\n\nexport default plugin;\n"],"names":["ObjectNumberConstraintRenderer","constraintName","value","onConstraintChange","disabled","error","onRemoveConstraint","getConstraintDefinition","useConstraints","constraintDef","jsx","InputErrorWrapper","Label","jsxs","Input","e","cn","Button","X","ObjectMinPropertiesRenderer","ObjectMaxPropertiesRenderer","plugin"],"mappings":"iWAaMA,EAAiC,CAAC,CACtC,eAAAC,EACA,MAAAC,EACA,mBAAAC,EACA,SAAAC,EACA,MAAAC,EACA,mBAAAC,CACF,IAAgE,CACxD,KAAA,CAAE,wBAAAC,CAAwB,EAAIC,iBAAe,EAC7CC,EAAgBF,EAAwBN,CAAc,EAE5D,OAAKQ,EAKHC,EAAA,IAACC,EAAA,kBAAA,CACC,UAAWN,GAAO,KAClB,iBAAkBA,GAAO,QACzB,UAAW,CAAC,CAACA,EAEb,gBAAC,MACC,CAAA,SAAA,CAAAK,EAAAA,IAACE,SAAM,UAAU,OAAO,QAASH,EAAc,KAC5C,WAAc,IACjB,CAAA,EACAI,EAAAA,KAAC,MAAI,CAAA,UAAU,0BACb,SAAA,CAAAH,EAAA,IAACI,EAAA,MAAA,CACC,GAAIL,EAAc,KAClB,KAAK,SACL,MAAAP,EACA,SAAWa,GAAMZ,EAAmB,OAAOY,EAAE,OAAO,KAAK,CAAC,EAC1D,SAAAX,EACA,IAAK,EACL,UAAWY,EAAA,GAAG,CAAE,qBAAsBX,CAAO,CAAA,CAAA,CAC/C,EACAK,EAAA,IAACO,EAAA,OAAA,CACC,KAAK,SACL,QAAQ,QACR,KAAK,OACL,QAAS,IAAMX,EAAmB,EAElC,SAAAI,EAAAA,IAACQ,EAAAA,QAAE,CAAA,UAAU,QAAS,CAAA,CAAA,CAAA,CACxB,EACF,EACCT,EAAc,aACbC,EAAA,IAAC,OAAI,UAAU,6BACZ,WAAc,WACjB,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,EAtCO,IAwCX,EAGaS,EAA8BnB,EAC9BoB,EAA8BpB,EAErCqB,EAA+B,CACnC,GAAI,qBACJ,MAAO,CACL,qBAAsB,CACb,MAAA,CACL,CACE,KAAM,gBACN,MAAO,iBACP,UAAW,CAAC,QAAQ,EACpB,OAAQ,CACN,KAAM,UACN,MAAO,gCACP,YACE,wDACF,SAAU,CAAC,EAAG,EAAG,CAAC,EAClB,QAAS,CACX,EACA,YACE,2DACF,aAAc,CAChB,EACA,CACE,KAAM,gBACN,MAAO,iBACP,UAAW,CAAC,QAAQ,EACpB,OAAQ,CACN,KAAM,UACN,MAAO,gCACP,YAAa,uDACb,SAAU,CAAC,EAAG,GAAI,EAAE,EACpB,QAAS,CACX,EACA,YACE,2DACF,aAAc,EAAA,CAElB,CACF,EACA,mBAAoB,CACX,MAAA,CACL,cAAeF,EACf,cAAeC,CACjB,CAAA,CACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),f=require("react"),F=require("./index.cjs34.js"),a=require("react-hook-form"),d=require("./index.cjs22.js"),g=require("./index.cjs15.js");function x(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const i=x(f),b=a.FormProvider,l=i.createContext({}),I=({...e})=>n.jsx(l.Provider,{value:{name:e.name},children:n.jsx(a.Controller,{...e})}),c=()=>{const e=i.useContext(l),t=i.useContext(u),{getFieldState:r}=a.useFormContext(),o=a.useFormState({name:e.name}),s=r(e.name,o);if(!e)throw new Error("useFormField should be used within <FormField>");const{id:m}=t;return{id:m,name:e.name,formItemId:`${m}-form-item`,formDescriptionId:`${m}-form-item-description`,formMessageId:`${m}-form-item-message`,...s}},u=i.createContext({});function j({className:e,...t}){const r=i.useId();return n.jsx(u.Provider,{value:{id:r},children:n.jsx("div",{"data-slot":"form-item",className:d.cn("grid gap-2",e),...t})})}function C({className:e,...t}){const{error:r,formItemId:o}=c();return n.jsx(g.Label,{"data-slot":"form-label","data-error":!!r,className:d.cn("data-[error=true]:text-destructive-foreground",e),htmlFor:o,...t})}function v({...e}){const{error:t,formItemId:r,formDescriptionId:o,formMessageId:s}=c();return n.jsx(F.Slot,{"data-slot":"form-control",id:r,"aria-describedby":t?`${o} ${s}`:`${o}`,"aria-invalid":!!t,...e})}function S({className:e,...t}){const{error:r,formMessageId:o}=c(),s=r?String(r?.message??""):t.children;return s?n.jsx("p",{"data-slot":"form-message",id:o,className:d.cn("text-destructive-foreground text-sm",e),...t,children:s}):null}exports.Form=b;exports.FormControl=v;exports.FormField=I;exports.FormItem=j;exports.FormLabel=C;exports.FormMessage=S;exports.useFormField=c;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),f=require("react"),F=require("./index.cjs34.js"),a=require("react-hook-form"),d=require("./index.cjs12.js"),g=require("./index.cjs11.js");function x(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const i=x(f),b=a.FormProvider,l=i.createContext({}),I=({...e})=>n.jsx(l.Provider,{value:{name:e.name},children:n.jsx(a.Controller,{...e})}),c=()=>{const e=i.useContext(l),t=i.useContext(u),{getFieldState:r}=a.useFormContext(),o=a.useFormState({name:e.name}),s=r(e.name,o);if(!e)throw new Error("useFormField should be used within <FormField>");const{id:m}=t;return{id:m,name:e.name,formItemId:`${m}-form-item`,formDescriptionId:`${m}-form-item-description`,formMessageId:`${m}-form-item-message`,...s}},u=i.createContext({});function j({className:e,...t}){const r=i.useId();return n.jsx(u.Provider,{value:{id:r},children:n.jsx("div",{"data-slot":"form-item",className:d.cn("grid gap-2",e),...t})})}function C({className:e,...t}){const{error:r,formItemId:o}=c();return n.jsx(g.Label,{"data-slot":"form-label","data-error":!!r,className:d.cn("data-[error=true]:text-destructive-foreground",e),htmlFor:o,...t})}function v({...e}){const{error:t,formItemId:r,formDescriptionId:o,formMessageId:s}=c();return n.jsx(F.Slot,{"data-slot":"form-control",id:r,"aria-describedby":t?`${o} ${s}`:`${o}`,"aria-invalid":!!t,...e})}function S({className:e,...t}){const{error:r,formMessageId:o}=c(),s=r?String(r?.message??""):t.children;return s?n.jsx("p",{"data-slot":"form-message",id:o,className:d.cn("text-destructive-foreground text-sm",e),...t,children:s}):null}exports.Form=b;exports.FormControl=v;exports.FormField=I;exports.FormItem=j;exports.FormLabel=C;exports.FormMessage=S;exports.useFormField=c;
2
2
  //# sourceMappingURL=index.cjs41.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),m=require("./index.cjs15.js"),h=require("./index.cjs28.js"),f=require("./index.cjs29.js"),u=require("react"),j=require("./index.cjs30.js"),y=({values:t,onAddValue:a,renderValues:n,maxValues:s,onRemoveValue:c,...l})=>{const[o,p]=u.useState(),[d,x]=u.useState();return r.jsxs(f.InputErrorWrapper,{errorCode:o,errorDescription:d,showError:!!o,className:"space-y-2",children:[r.jsx(m.Label,{children:"Add Input"}),r.jsx(h.Input,{...l,onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),e.stopPropagation())},onKeyUp:e=>{if(e.key==="Enter"){if(s&&t.length>=s){p("Maximum reached"),x("You have reached the maximum number of values");return}a?.(e.currentTarget.value),e.currentTarget.value=""}}}),n?n():r.jsx("div",{className:"space-x-2 flex",children:t.map((e,i)=>r.jsxs("div",{className:"flex items-center text-xs border rounded p-1 w-max mt-2",children:[r.jsx("span",{children:e}),r.jsx("button",{onClick:()=>c(i),children:r.jsx(j.default,{size:16})})]},`${i}-${e}`))})]})};exports.default=y;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),m=require("./index.cjs11.js"),h=require("./index.cjs9.js"),f=require("./index.cjs10.js"),u=require("react"),j=require("./index.cjs15.js"),y=({values:t,onAddValue:a,renderValues:n,maxValues:s,onRemoveValue:c,...l})=>{const[o,p]=u.useState(),[d,x]=u.useState();return r.jsxs(f.InputErrorWrapper,{errorCode:o,errorDescription:d,showError:!!o,className:"space-y-2",children:[r.jsx(m.Label,{children:"Add Input"}),r.jsx(h.Input,{...l,onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),e.stopPropagation())},onKeyUp:e=>{if(e.key==="Enter"){if(s&&t.length>=s){p("Maximum reached"),x("You have reached the maximum number of values");return}a?.(e.currentTarget.value),e.currentTarget.value=""}}}),n?n():r.jsx("div",{className:"space-x-2 flex",children:t.map((e,i)=>r.jsxs("div",{className:"flex items-center text-xs border rounded p-1 w-max mt-2",children:[r.jsx("span",{children:e}),r.jsx("button",{onClick:()=>c(i),children:r.jsx(j.default,{size:16})})]},`${i}-${e}`))})]})};exports.default=y;
2
2
  //# sourceMappingURL=index.cjs42.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs42.js","sources":["../src/components/multi-input.tsx"],"sourcesContent":["import { Label } from \"@/components/ui/label\";\nimport { Input } from \"@/components/ui/input\";\nimport { X } from \"lucide-react\";\nimport { InputErrorWrapper } from \"@/components/input-error\";\nimport { useState } from \"react\";\n\ninterface MultiInputProps {\n renderValues?: () => React.ReactNode;\n values: string[];\n onAddValue: (newVal: string) => void;\n onRemoveValue: (index: number) => void;\n maxValues?: number;\n}\n\nconst MultiInput = ({\n values,\n onAddValue,\n renderValues,\n maxValues,\n onRemoveValue,\n ...props\n}: MultiInputProps &\n Omit<React.ComponentProps<\"input\">, \"value\" | \"onChange\">) => {\n const [primaryError, setPrimaryError] = useState<string>();\n const [errorDescription, setErrorDescription] = useState<string>();\n\n return (\n <InputErrorWrapper\n errorCode={primaryError}\n errorDescription={errorDescription}\n showError={!!primaryError}\n className=\"space-y-2\"\n >\n <Label>Add Input</Label>\n <Input\n {...props}\n onKeyDown={(e) => {\n // Prevent form submission on Enter key press\n if (e.key === \"Enter\") {\n e.preventDefault();\n //prevent bubbling up\n e.stopPropagation();\n }\n }}\n onKeyUp={(e) => {\n // Add value on Enter key press\n if (e.key === \"Enter\") {\n if (maxValues && values.length >= maxValues) {\n setPrimaryError(\"Maximum reached\");\n setErrorDescription(\n \"You have reached the maximum number of values\",\n );\n return;\n }\n onAddValue?.(e.currentTarget.value);\n e.currentTarget.value = \"\";\n }\n }}\n />\n {renderValues ? (\n renderValues()\n ) : (\n <div className=\"space-x-2 flex\">\n {values.map((value, i) => (\n <div\n key={`${i}-${value}`}\n className=\"flex items-center text-xs border rounded p-1 w-max mt-2\"\n >\n <span>{value}</span>\n <button onClick={() => onRemoveValue(i)}>\n <X size={16} />\n </button>\n </div>\n ))}\n </div>\n )}\n </InputErrorWrapper>\n );\n};\n\nexport default MultiInput;\n"],"names":["MultiInput","values","onAddValue","renderValues","maxValues","onRemoveValue","props","primaryError","setPrimaryError","useState","errorDescription","setErrorDescription","jsxs","InputErrorWrapper","jsx","Label","Input","value","X"],"mappings":"4RAcMA,EAAa,CAAC,CAClB,OAAAC,EACA,WAAAC,EACA,aAAAC,EACA,UAAAC,EACA,cAAAC,EACA,GAAGC,CACL,IACgE,CAC9D,KAAM,CAACC,EAAcC,CAAe,EAAIC,WAAiB,EACnD,CAACC,EAAkBC,CAAmB,EAAIF,WAAiB,EAG/D,OAAAG,EAAA,KAACC,EAAA,kBAAA,CACC,UAAWN,EACX,iBAAAG,EACA,UAAW,CAAC,CAACH,EACb,UAAU,YAEV,SAAA,CAAAO,EAAAA,IAACC,SAAM,SAAS,WAAA,CAAA,EAChBD,EAAA,IAACE,EAAA,MAAA,CACE,GAAGV,EACJ,UAAY,GAAM,CAEZ,EAAE,MAAQ,UACZ,EAAE,eAAe,EAEjB,EAAE,gBAAgB,EAEtB,EACA,QAAU,GAAM,CAEV,GAAA,EAAE,MAAQ,QAAS,CACjB,GAAAF,GAAaH,EAAO,QAAUG,EAAW,CAC3CI,EAAgB,iBAAiB,EACjCG,EACE,+CACF,EACA,MAAA,CAEWT,IAAA,EAAE,cAAc,KAAK,EAClC,EAAE,cAAc,MAAQ,EAAA,CAC1B,CACF,CACF,EACCC,EACCA,EAAa,EAEZW,MAAA,MAAA,CAAI,UAAU,iBACZ,SAAOb,EAAA,IAAI,CAACgB,EAAO,IAClBL,EAAA,KAAC,MAAA,CAEC,UAAU,0DAEV,SAAA,CAAAE,EAAAA,IAAC,QAAM,SAAMG,CAAA,CAAA,EACbH,EAAAA,IAAC,SAAO,CAAA,QAAS,IAAMT,EAAc,CAAC,EACpC,SAACS,EAAA,IAAAI,EAAA,QAAA,CAAE,KAAM,EAAI,CAAA,CACf,CAAA,CAAA,CAAA,EANK,GAAG,CAAC,IAAID,CAAK,EAAA,CAQrB,CACH,CAAA,CAAA,CAAA,CAEJ,CAEJ"}
1
+ {"version":3,"file":"index.cjs42.js","sources":["../src/components/multi-input.tsx"],"sourcesContent":["import { Label } from \"@/components/ui/label\";\nimport { Input } from \"@/components/ui/input\";\nimport { X } from \"lucide-react\";\nimport { InputErrorWrapper } from \"@/components/input-error\";\nimport { useState } from \"react\";\n\ninterface MultiInputProps {\n renderValues?: () => React.ReactNode;\n values: string[];\n onAddValue: (newVal: string) => void;\n onRemoveValue: (index: number) => void;\n maxValues?: number;\n}\n\nconst MultiInput = ({\n values,\n onAddValue,\n renderValues,\n maxValues,\n onRemoveValue,\n ...props\n}: MultiInputProps &\n Omit<React.ComponentProps<\"input\">, \"value\" | \"onChange\">) => {\n const [primaryError, setPrimaryError] = useState<string>();\n const [errorDescription, setErrorDescription] = useState<string>();\n\n return (\n <InputErrorWrapper\n errorCode={primaryError}\n errorDescription={errorDescription}\n showError={!!primaryError}\n className=\"space-y-2\"\n >\n <Label>Add Input</Label>\n <Input\n {...props}\n onKeyDown={(e) => {\n // Prevent form submission on Enter key press\n if (e.key === \"Enter\") {\n e.preventDefault();\n //prevent bubbling up\n e.stopPropagation();\n }\n }}\n onKeyUp={(e) => {\n // Add value on Enter key press\n if (e.key === \"Enter\") {\n if (maxValues && values.length >= maxValues) {\n setPrimaryError(\"Maximum reached\");\n setErrorDescription(\n \"You have reached the maximum number of values\",\n );\n return;\n }\n onAddValue?.(e.currentTarget.value);\n e.currentTarget.value = \"\";\n }\n }}\n />\n {renderValues ? (\n renderValues()\n ) : (\n <div className=\"space-x-2 flex\">\n {values.map((value, i) => (\n <div\n key={`${i}-${value}`}\n className=\"flex items-center text-xs border rounded p-1 w-max mt-2\"\n >\n <span>{value}</span>\n <button onClick={() => onRemoveValue(i)}>\n <X size={16} />\n </button>\n </div>\n ))}\n </div>\n )}\n </InputErrorWrapper>\n );\n};\n\nexport default MultiInput;\n"],"names":["MultiInput","values","onAddValue","renderValues","maxValues","onRemoveValue","props","primaryError","setPrimaryError","useState","errorDescription","setErrorDescription","jsxs","InputErrorWrapper","jsx","Label","Input","value","X"],"mappings":"2RAcMA,EAAa,CAAC,CAClB,OAAAC,EACA,WAAAC,EACA,aAAAC,EACA,UAAAC,EACA,cAAAC,EACA,GAAGC,CACL,IACgE,CAC9D,KAAM,CAACC,EAAcC,CAAe,EAAIC,WAAiB,EACnD,CAACC,EAAkBC,CAAmB,EAAIF,WAAiB,EAG/D,OAAAG,EAAA,KAACC,EAAA,kBAAA,CACC,UAAWN,EACX,iBAAAG,EACA,UAAW,CAAC,CAACH,EACb,UAAU,YAEV,SAAA,CAAAO,EAAAA,IAACC,SAAM,SAAS,WAAA,CAAA,EAChBD,EAAA,IAACE,EAAA,MAAA,CACE,GAAGV,EACJ,UAAY,GAAM,CAEZ,EAAE,MAAQ,UACZ,EAAE,eAAe,EAEjB,EAAE,gBAAgB,EAEtB,EACA,QAAU,GAAM,CAEV,GAAA,EAAE,MAAQ,QAAS,CACjB,GAAAF,GAAaH,EAAO,QAAUG,EAAW,CAC3CI,EAAgB,iBAAiB,EACjCG,EACE,+CACF,EACA,MAAA,CAEWT,IAAA,EAAE,cAAc,KAAK,EAClC,EAAE,cAAc,MAAQ,EAAA,CAC1B,CACF,CACF,EACCC,EACCA,EAAa,EAEZW,MAAA,MAAA,CAAI,UAAU,iBACZ,SAAOb,EAAA,IAAI,CAACgB,EAAO,IAClBL,EAAA,KAAC,MAAA,CAEC,UAAU,0DAEV,SAAA,CAAAE,EAAAA,IAAC,QAAM,SAAMG,CAAA,CAAA,EACbH,EAAAA,IAAC,SAAO,CAAA,QAAS,IAAMT,EAAc,CAAC,EACpC,SAACS,EAAA,IAAAI,EAAA,QAAA,CAAE,KAAM,EAAI,CAAA,CACf,CAAA,CAAA,CAAA,EANK,GAAG,CAAC,IAAID,CAAK,EAAA,CAQrB,CACH,CAAA,CAAA,CAAA,CAEJ,CAEJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const st=require("react"),ct=require("react-dom"),Le=require("./index.cjs64.js"),E=require("./index.cjs59.js"),lt=require("./index.cjs65.js"),H=require("./index.cjs58.js"),it=require("./index.cjs60.js"),at=require("./index.cjs66.js"),dt=require("./index.cjs67.js"),ut=require("./index.cjs68.js"),pt=require("./index.cjs69.js"),Ie=require("./index.cjs70.js"),ee=require("./index.cjs71.js"),ft=require("./index.cjs72.js"),M=require("./index.cjs57.js"),mt=require("./index.cjs34.js"),ht=require("./index.cjs73.js"),ke=require("./index.cjs61.js"),$=require("./index.cjs74.js"),vt=require("./index.cjs62.js"),St=require("./index.cjs75.js"),gt=require("./index.cjs76.js"),xt=require("./index.cjs77.js"),d=require("react/jsx-runtime");function Ve(o){const l=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const e in o)if(e!=="default"){const i=Object.getOwnPropertyDescriptor(o,e);Object.defineProperty(l,e,i.get?i:{enumerable:!0,get:()=>o[e]})}}return l.default=o,Object.freeze(l)}const t=Ve(st),Be=Ve(ct);var wt=[" ","Enter","ArrowUp","ArrowDown"],Ct=[" ","Enter"],se="Select",[ae,de,yt]=lt.createCollection(se),[te,It]=it.createContextScope(se,[yt,ee.createPopperScope]),ue=ee.createPopperScope(),[Tt,G]=te(se),[Pt,Et]=te(se),Te=o=>{const{__scopeSelect:l,children:e,open:i,defaultOpen:r,onOpenChange:u,value:n,defaultValue:s,onValueChange:c,dir:f,name:S,autoComplete:w,disabled:R,required:T,form:y}=o,a=ue(l),[h,g]=t.useState(null),[m,v]=t.useState(null),[F,O]=t.useState(!1),oe=at.useDirection(f),[b=!1,D]=ke.useControllableState({prop:i,defaultProp:r,onChange:u}),[W,Y]=ke.useControllableState({prop:n,defaultProp:s,onChange:c}),L=t.useRef(null),k=h?y||!!h.closest("form"):!0,[U,V]=t.useState(new Set),B=Array.from(U).map(_=>_.props.value).join(";");return d.jsx(ee.Root,{...a,children:d.jsxs(Tt,{required:T,scope:l,trigger:h,onTriggerChange:g,valueNode:m,onValueNodeChange:v,valueNodeHasChildren:F,onValueNodeHasChildrenChange:O,contentId:Ie.useId(),value:W,onValueChange:Y,open:b,onOpenChange:D,dir:oe,triggerPointerDownPosRef:L,disabled:R,children:[d.jsx(ae.Provider,{scope:l,children:d.jsx(Pt,{scope:o.__scopeSelect,onNativeOptionAdd:t.useCallback(_=>{V(j=>new Set(j).add(_))},[]),onNativeOptionRemove:t.useCallback(_=>{V(j=>{const q=new Set(j);return q.delete(_),q})},[]),children:e})}),k?d.jsxs(ot,{"aria-hidden":!0,required:T,tabIndex:-1,name:S,autoComplete:w,value:W,onChange:_=>Y(_.target.value),disabled:R,form:y,children:[W===void 0?d.jsx("option",{value:""}):null,Array.from(U)]},B):null]})})};Te.displayName=se;var qe="SelectTrigger",Pe=t.forwardRef((o,l)=>{const{__scopeSelect:e,disabled:i=!1,...r}=o,u=ue(e),n=G(qe,e),s=n.disabled||i,c=H.useComposedRefs(l,n.onTriggerChange),f=de(e),S=t.useRef("touch"),[w,R,T]=nt(a=>{const h=f().filter(v=>!v.disabled),g=h.find(v=>v.value===n.value),m=rt(h,a,g);m!==void 0&&n.onValueChange(m.value)}),y=a=>{s||(n.onOpenChange(!0),T()),a&&(n.triggerPointerDownPosRef.current={x:Math.round(a.pageX),y:Math.round(a.pageY)})};return d.jsx(ee.Anchor,{asChild:!0,...u,children:d.jsx(M.Primitive.button,{type:"button",role:"combobox","aria-controls":n.contentId,"aria-expanded":n.open,"aria-required":n.required,"aria-autocomplete":"none",dir:n.dir,"data-state":n.open?"open":"closed",disabled:s,"data-disabled":s?"":void 0,"data-placeholder":tt(n.value)?"":void 0,...r,ref:c,onClick:E.composeEventHandlers(r.onClick,a=>{a.currentTarget.focus(),S.current!=="mouse"&&y(a)}),onPointerDown:E.composeEventHandlers(r.onPointerDown,a=>{S.current=a.pointerType;const h=a.target;h.hasPointerCapture(a.pointerId)&&h.releasePointerCapture(a.pointerId),a.button===0&&a.ctrlKey===!1&&a.pointerType==="mouse"&&(y(a),a.preventDefault())}),onKeyDown:E.composeEventHandlers(r.onKeyDown,a=>{const h=w.current!=="";!(a.ctrlKey||a.altKey||a.metaKey)&&a.key.length===1&&R(a.key),!(h&&a.key===" ")&&wt.includes(a.key)&&(y(),a.preventDefault())})})})});Pe.displayName=qe;var Fe="SelectValue",Ee=t.forwardRef((o,l)=>{const{__scopeSelect:e,className:i,style:r,children:u,placeholder:n="",...s}=o,c=G(Fe,e),{onValueNodeHasChildrenChange:f}=c,S=u!==void 0,w=H.useComposedRefs(l,c.onValueNodeChange);return $.useLayoutEffect(()=>{f(S)},[f,S]),d.jsx(M.Primitive.span,{...s,ref:w,style:{pointerEvents:"none"},children:tt(c.value)?d.jsx(d.Fragment,{children:n}):u})});Ee.displayName=Fe;var Rt="SelectIcon",Re=t.forwardRef((o,l)=>{const{__scopeSelect:e,children:i,...r}=o;return d.jsx(M.Primitive.span,{"aria-hidden":!0,...r,ref:l,children:i||"▼"})});Re.displayName=Rt;var bt="SelectPortal",be=o=>d.jsx(ft.Portal,{asChild:!0,...o});be.displayName=bt;var J="SelectContent",_e=t.forwardRef((o,l)=>{const e=G(J,o.__scopeSelect),[i,r]=t.useState();if($.useLayoutEffect(()=>{r(new DocumentFragment)},[]),!e.open){const u=i;return u?Be.createPortal(d.jsx(We,{scope:o.__scopeSelect,children:d.jsx(ae.Slot,{scope:o.__scopeSelect,children:d.jsx("div",{children:o.children})})}),u):null}return d.jsx(Ue,{...o,ref:l})});_e.displayName=J;var A=10,[We,z]=te(J),_t="SelectContentImpl",Ue=t.forwardRef((o,l)=>{const{__scopeSelect:e,position:i="item-aligned",onCloseAutoFocus:r,onEscapeKeyDown:u,onPointerDownOutside:n,side:s,sideOffset:c,align:f,alignOffset:S,arrowPadding:w,collisionBoundary:R,collisionPadding:T,sticky:y,hideWhenDetached:a,avoidCollisions:h,...g}=o,m=G(J,e),[v,F]=t.useState(null),[O,oe]=t.useState(null),b=H.useComposedRefs(l,p=>F(p)),[D,W]=t.useState(null),[Y,L]=t.useState(null),k=de(e),[U,V]=t.useState(!1),B=t.useRef(!1);t.useEffect(()=>{if(v)return gt.hideOthers(v)},[v]),ut.useFocusGuards();const _=t.useCallback(p=>{const[I,...N]=k().map(P=>P.ref.current),[x]=N.slice(-1),C=document.activeElement;for(const P of p)if(P===C||(P?.scrollIntoView({block:"nearest"}),P===I&&O&&(O.scrollTop=0),P===x&&O&&(O.scrollTop=O.scrollHeight),P?.focus(),document.activeElement!==C))return},[k,O]),j=t.useCallback(()=>_([D,v]),[_,D,v]);t.useEffect(()=>{U&&j()},[U,j]);const{onOpenChange:q,triggerPointerDownPosRef:K}=m;t.useEffect(()=>{if(v){let p={x:0,y:0};const I=x=>{p={x:Math.abs(Math.round(x.pageX)-(K.current?.x??0)),y:Math.abs(Math.round(x.pageY)-(K.current?.y??0))}},N=x=>{p.x<=10&&p.y<=10?x.preventDefault():v.contains(x.target)||q(!1),document.removeEventListener("pointermove",I),K.current=null};return K.current!==null&&(document.addEventListener("pointermove",I),document.addEventListener("pointerup",N,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",I),document.removeEventListener("pointerup",N,{capture:!0})}}},[v,q,K]),t.useEffect(()=>{const p=()=>q(!1);return window.addEventListener("blur",p),window.addEventListener("resize",p),()=>{window.removeEventListener("blur",p),window.removeEventListener("resize",p)}},[q]);const[pe,ce]=nt(p=>{const I=k().filter(C=>!C.disabled),N=I.find(C=>C.ref.current===document.activeElement),x=rt(I,p,N);x&&setTimeout(()=>x.ref.current.focus())}),fe=t.useCallback((p,I,N)=>{const x=!B.current&&!N;(m.value!==void 0&&m.value===I||x)&&(W(p),x&&(B.current=!0))},[m.value]),me=t.useCallback(()=>v?.focus(),[v]),Q=t.useCallback((p,I,N)=>{const x=!B.current&&!N;(m.value!==void 0&&m.value===I||x)&&L(p)},[m.value]),le=i==="popper"?ge:Ke,ne=le===ge?{side:s,sideOffset:c,align:f,alignOffset:S,arrowPadding:w,collisionBoundary:R,collisionPadding:T,sticky:y,hideWhenDetached:a,avoidCollisions:h}:{};return d.jsx(We,{scope:e,content:v,viewport:O,onViewportChange:oe,itemRefCallback:fe,selectedItem:D,onItemLeave:me,itemTextRefCallback:Q,focusSelectedItem:j,selectedItemText:Y,position:i,isPositioned:U,searchRef:pe,children:d.jsx(xt.default,{as:mt.Slot,allowPinchZoom:!0,children:d.jsx(pt.FocusScope,{asChild:!0,trapped:m.open,onMountAutoFocus:p=>{p.preventDefault()},onUnmountAutoFocus:E.composeEventHandlers(r,p=>{m.trigger?.focus({preventScroll:!0}),p.preventDefault()}),children:d.jsx(dt.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:u,onPointerDownOutside:n,onFocusOutside:p=>p.preventDefault(),onDismiss:()=>m.onOpenChange(!1),children:d.jsx(le,{role:"listbox",id:m.contentId,"data-state":m.open?"open":"closed",dir:m.dir,onContextMenu:p=>p.preventDefault(),...g,...ne,onPlaced:()=>V(!0),ref:b,style:{display:"flex",flexDirection:"column",outline:"none",...g.style},onKeyDown:E.composeEventHandlers(g.onKeyDown,p=>{const I=p.ctrlKey||p.altKey||p.metaKey;if(p.key==="Tab"&&p.preventDefault(),!I&&p.key.length===1&&ce(p.key),["ArrowUp","ArrowDown","Home","End"].includes(p.key)){let x=k().filter(C=>!C.disabled).map(C=>C.ref.current);if(["ArrowUp","End"].includes(p.key)&&(x=x.slice().reverse()),["ArrowUp","ArrowDown"].includes(p.key)){const C=p.target,P=x.indexOf(C);x=x.slice(P+1)}setTimeout(()=>_(x)),p.preventDefault()}})})})})})})});Ue.displayName=_t;var Nt="SelectItemAlignedPosition",Ke=t.forwardRef((o,l)=>{const{__scopeSelect:e,onPlaced:i,...r}=o,u=G(J,e),n=z(J,e),[s,c]=t.useState(null),[f,S]=t.useState(null),w=H.useComposedRefs(l,b=>S(b)),R=de(e),T=t.useRef(!1),y=t.useRef(!0),{viewport:a,selectedItem:h,selectedItemText:g,focusSelectedItem:m}=n,v=t.useCallback(()=>{if(u.trigger&&u.valueNode&&s&&f&&a&&h&&g){const b=u.trigger.getBoundingClientRect(),D=f.getBoundingClientRect(),W=u.valueNode.getBoundingClientRect(),Y=g.getBoundingClientRect();if(u.dir!=="rtl"){const C=Y.left-D.left,P=W.left-C,X=b.left-P,Z=b.width+X,he=Math.max(Z,D.width),ve=window.innerWidth-A,Se=Le.clamp(P,[A,Math.max(A,ve-he)]);s.style.minWidth=Z+"px",s.style.left=Se+"px"}else{const C=D.right-Y.right,P=window.innerWidth-W.right-C,X=window.innerWidth-b.right-P,Z=b.width+X,he=Math.max(Z,D.width),ve=window.innerWidth-A,Se=Le.clamp(P,[A,Math.max(A,ve-he)]);s.style.minWidth=Z+"px",s.style.right=Se+"px"}const L=R(),k=window.innerHeight-A*2,U=a.scrollHeight,V=window.getComputedStyle(f),B=parseInt(V.borderTopWidth,10),_=parseInt(V.paddingTop,10),j=parseInt(V.borderBottomWidth,10),q=parseInt(V.paddingBottom,10),K=B+_+U+q+j,pe=Math.min(h.offsetHeight*5,K),ce=window.getComputedStyle(a),fe=parseInt(ce.paddingTop,10),me=parseInt(ce.paddingBottom,10),Q=b.top+b.height/2-A,le=k-Q,ne=h.offsetHeight/2,p=h.offsetTop+ne,I=B+_+p,N=K-I;if(I<=Q){const C=L.length>0&&h===L[L.length-1].ref.current;s.style.bottom="0px";const P=f.clientHeight-a.offsetTop-a.offsetHeight,X=Math.max(le,ne+(C?me:0)+P+j),Z=I+X;s.style.height=Z+"px"}else{const C=L.length>0&&h===L[0].ref.current;s.style.top="0px";const X=Math.max(Q,B+a.offsetTop+(C?fe:0)+ne)+N;s.style.height=X+"px",a.scrollTop=I-Q+a.offsetTop}s.style.margin=`${A}px 0`,s.style.minHeight=pe+"px",s.style.maxHeight=k+"px",i?.(),requestAnimationFrame(()=>T.current=!0)}},[R,u.trigger,u.valueNode,s,f,a,h,g,u.dir,i]);$.useLayoutEffect(()=>v(),[v]);const[F,O]=t.useState();$.useLayoutEffect(()=>{f&&O(window.getComputedStyle(f).zIndex)},[f]);const oe=t.useCallback(b=>{b&&y.current===!0&&(v(),m?.(),y.current=!1)},[v,m]);return d.jsx(Ot,{scope:e,contentWrapper:s,shouldExpandOnScrollRef:T,onScrollButtonChange:oe,children:d.jsx("div",{ref:c,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:F},children:d.jsx(M.Primitive.div,{...r,ref:w,style:{boxSizing:"border-box",maxHeight:"100%",...r.style}})})})});Ke.displayName=Nt;var Mt="SelectPopperPosition",ge=t.forwardRef((o,l)=>{const{__scopeSelect:e,align:i="start",collisionPadding:r=A,...u}=o,n=ue(e);return d.jsx(ee.Content,{...n,...u,ref:l,align:i,collisionPadding:r,style:{boxSizing:"border-box",...u.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});ge.displayName=Mt;var[Ot,Ne]=te(J,{}),xe="SelectViewport",Me=t.forwardRef((o,l)=>{const{__scopeSelect:e,nonce:i,...r}=o,u=z(xe,e),n=Ne(xe,e),s=H.useComposedRefs(l,u.onViewportChange),c=t.useRef(0);return d.jsxs(d.Fragment,{children:[d.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:i}),d.jsx(ae.Slot,{scope:e,children:d.jsx(M.Primitive.div,{"data-radix-select-viewport":"",role:"presentation",...r,ref:s,style:{position:"relative",flex:1,overflow:"hidden auto",...r.style},onScroll:E.composeEventHandlers(r.onScroll,f=>{const S=f.currentTarget,{contentWrapper:w,shouldExpandOnScrollRef:R}=n;if(R?.current&&w){const T=Math.abs(c.current-S.scrollTop);if(T>0){const y=window.innerHeight-A*2,a=parseFloat(w.style.minHeight),h=parseFloat(w.style.height),g=Math.max(a,h);if(g<y){const m=g+T,v=Math.min(y,m),F=m-v;w.style.height=v+"px",w.style.bottom==="0px"&&(S.scrollTop=F>0?F:0,w.style.justifyContent="flex-end")}}}c.current=S.scrollTop})})})]})});Me.displayName=xe;var $e="SelectGroup",[At,Dt]=te($e),Ge=t.forwardRef((o,l)=>{const{__scopeSelect:e,...i}=o,r=Ie.useId();return d.jsx(At,{scope:e,id:r,children:d.jsx(M.Primitive.div,{role:"group","aria-labelledby":r,...i,ref:l})})});Ge.displayName=$e;var ze="SelectLabel",Ye=t.forwardRef((o,l)=>{const{__scopeSelect:e,...i}=o,r=Dt(ze,e);return d.jsx(M.Primitive.div,{id:r.id,...i,ref:l})});Ye.displayName=ze;var ie="SelectItem",[jt,Xe]=te(ie),Oe=t.forwardRef((o,l)=>{const{__scopeSelect:e,value:i,disabled:r=!1,textValue:u,...n}=o,s=G(ie,e),c=z(ie,e),f=s.value===i,[S,w]=t.useState(u??""),[R,T]=t.useState(!1),y=H.useComposedRefs(l,m=>c.itemRefCallback?.(m,i,r)),a=Ie.useId(),h=t.useRef("touch"),g=()=>{r||(s.onValueChange(i),s.onOpenChange(!1))};if(i==="")throw new Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return d.jsx(jt,{scope:e,value:i,disabled:r,textId:a,isSelected:f,onItemTextChange:t.useCallback(m=>{w(v=>v||(m?.textContent??"").trim())},[]),children:d.jsx(ae.ItemSlot,{scope:e,value:i,disabled:r,textValue:S,children:d.jsx(M.Primitive.div,{role:"option","aria-labelledby":a,"data-highlighted":R?"":void 0,"aria-selected":f&&R,"data-state":f?"checked":"unchecked","aria-disabled":r||void 0,"data-disabled":r?"":void 0,tabIndex:r?void 0:-1,...n,ref:y,onFocus:E.composeEventHandlers(n.onFocus,()=>T(!0)),onBlur:E.composeEventHandlers(n.onBlur,()=>T(!1)),onClick:E.composeEventHandlers(n.onClick,()=>{h.current!=="mouse"&&g()}),onPointerUp:E.composeEventHandlers(n.onPointerUp,()=>{h.current==="mouse"&&g()}),onPointerDown:E.composeEventHandlers(n.onPointerDown,m=>{h.current=m.pointerType}),onPointerMove:E.composeEventHandlers(n.onPointerMove,m=>{h.current=m.pointerType,r?c.onItemLeave?.():h.current==="mouse"&&m.currentTarget.focus({preventScroll:!0})}),onPointerLeave:E.composeEventHandlers(n.onPointerLeave,m=>{m.currentTarget===document.activeElement&&c.onItemLeave?.()}),onKeyDown:E.composeEventHandlers(n.onKeyDown,m=>{c.searchRef?.current!==""&&m.key===" "||(Ct.includes(m.key)&&g(),m.key===" "&&m.preventDefault())})})})})});Oe.displayName=ie;var re="SelectItemText",Ae=t.forwardRef((o,l)=>{const{__scopeSelect:e,className:i,style:r,...u}=o,n=G(re,e),s=z(re,e),c=Xe(re,e),f=Et(re,e),[S,w]=t.useState(null),R=H.useComposedRefs(l,g=>w(g),c.onItemTextChange,g=>s.itemTextRefCallback?.(g,c.value,c.disabled)),T=S?.textContent,y=t.useMemo(()=>d.jsx("option",{value:c.value,disabled:c.disabled,children:T},c.value),[c.disabled,c.value,T]),{onNativeOptionAdd:a,onNativeOptionRemove:h}=f;return $.useLayoutEffect(()=>(a(y),()=>h(y)),[a,h,y]),d.jsxs(d.Fragment,{children:[d.jsx(M.Primitive.span,{id:c.textId,...u,ref:R}),c.isSelected&&n.valueNode&&!n.valueNodeHasChildren?Be.createPortal(u.children,n.valueNode):null]})});Ae.displayName=re;var Ze="SelectItemIndicator",De=t.forwardRef((o,l)=>{const{__scopeSelect:e,...i}=o;return Xe(Ze,e).isSelected?d.jsx(M.Primitive.span,{"aria-hidden":!0,...i,ref:l}):null});De.displayName=Ze;var we="SelectScrollUpButton",je=t.forwardRef((o,l)=>{const e=z(we,o.__scopeSelect),i=Ne(we,o.__scopeSelect),[r,u]=t.useState(!1),n=H.useComposedRefs(l,i.onScrollButtonChange);return $.useLayoutEffect(()=>{if(e.viewport&&e.isPositioned){let s=function(){const f=c.scrollTop>0;u(f)};const c=e.viewport;return s(),c.addEventListener("scroll",s),()=>c.removeEventListener("scroll",s)}},[e.viewport,e.isPositioned]),r?d.jsx(Je,{...o,ref:n,onAutoScroll:()=>{const{viewport:s,selectedItem:c}=e;s&&c&&(s.scrollTop=s.scrollTop-c.offsetHeight)}}):null});je.displayName=we;var Ce="SelectScrollDownButton",He=t.forwardRef((o,l)=>{const e=z(Ce,o.__scopeSelect),i=Ne(Ce,o.__scopeSelect),[r,u]=t.useState(!1),n=H.useComposedRefs(l,i.onScrollButtonChange);return $.useLayoutEffect(()=>{if(e.viewport&&e.isPositioned){let s=function(){const f=c.scrollHeight-c.clientHeight,S=Math.ceil(c.scrollTop)<f;u(S)};const c=e.viewport;return s(),c.addEventListener("scroll",s),()=>c.removeEventListener("scroll",s)}},[e.viewport,e.isPositioned]),r?d.jsx(Je,{...o,ref:n,onAutoScroll:()=>{const{viewport:s,selectedItem:c}=e;s&&c&&(s.scrollTop=s.scrollTop+c.offsetHeight)}}):null});He.displayName=Ce;var Je=t.forwardRef((o,l)=>{const{__scopeSelect:e,onAutoScroll:i,...r}=o,u=z("SelectScrollButton",e),n=t.useRef(null),s=de(e),c=t.useCallback(()=>{n.current!==null&&(window.clearInterval(n.current),n.current=null)},[]);return t.useEffect(()=>()=>c(),[c]),$.useLayoutEffect(()=>{s().find(S=>S.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:"nearest"})},[s]),d.jsx(M.Primitive.div,{"aria-hidden":!0,...r,ref:l,style:{flexShrink:0,...r.style},onPointerDown:E.composeEventHandlers(r.onPointerDown,()=>{n.current===null&&(n.current=window.setInterval(i,50))}),onPointerMove:E.composeEventHandlers(r.onPointerMove,()=>{u.onItemLeave?.(),n.current===null&&(n.current=window.setInterval(i,50))}),onPointerLeave:E.composeEventHandlers(r.onPointerLeave,()=>{c()})})}),Ht="SelectSeparator",Qe=t.forwardRef((o,l)=>{const{__scopeSelect:e,...i}=o;return d.jsx(M.Primitive.div,{"aria-hidden":!0,...i,ref:l})});Qe.displayName=Ht;var ye="SelectArrow",et=t.forwardRef((o,l)=>{const{__scopeSelect:e,...i}=o,r=ue(e),u=G(ye,e),n=z(ye,e);return u.open&&n.position==="popper"?d.jsx(ee.Arrow,{...r,...i,ref:l}):null});et.displayName=ye;function tt(o){return o===""||o===void 0}var ot=t.forwardRef((o,l)=>{const{value:e,...i}=o,r=t.useRef(null),u=H.useComposedRefs(l,r),n=vt.usePrevious(e);return t.useEffect(()=>{const s=r.current,c=window.HTMLSelectElement.prototype,S=Object.getOwnPropertyDescriptor(c,"value").set;if(n!==e&&S){const w=new Event("change",{bubbles:!0});S.call(s,e),s.dispatchEvent(w)}},[n,e]),d.jsx(St.VisuallyHidden,{asChild:!0,children:d.jsx("select",{...i,ref:u,defaultValue:e})})});ot.displayName="BubbleSelect";function nt(o){const l=ht.useCallbackRef(o),e=t.useRef(""),i=t.useRef(0),r=t.useCallback(n=>{const s=e.current+n;l(s),function c(f){e.current=f,window.clearTimeout(i.current),f!==""&&(i.current=window.setTimeout(()=>c(""),1e3))}(s)},[l]),u=t.useCallback(()=>{e.current="",window.clearTimeout(i.current)},[]);return t.useEffect(()=>()=>window.clearTimeout(i.current),[]),[e,r,u]}function rt(o,l,e){const r=l.length>1&&Array.from(l).every(f=>f===l[0])?l[0]:l,u=e?o.indexOf(e):-1;let n=Lt(o,Math.max(u,0));r.length===1&&(n=n.filter(f=>f!==e));const c=n.find(f=>f.textValue.toLowerCase().startsWith(r.toLowerCase()));return c!==e?c:void 0}function Lt(o,l){return o.map((e,i)=>o[(l+i)%o.length])}var kt=Te,Vt=Pe,Bt=Ee,qt=Re,Ft=be,Wt=_e,Ut=Me,Kt=Oe,$t=Ae,Gt=De,zt=je,Yt=He;exports.Content=Wt;exports.Icon=qt;exports.Item=Kt;exports.ItemIndicator=Gt;exports.ItemText=$t;exports.Portal=Ft;exports.Root=kt;exports.ScrollDownButton=Yt;exports.ScrollUpButton=zt;exports.Select=Te;exports.SelectArrow=et;exports.SelectContent=_e;exports.SelectGroup=Ge;exports.SelectIcon=Re;exports.SelectItem=Oe;exports.SelectItemIndicator=De;exports.SelectItemText=Ae;exports.SelectLabel=Ye;exports.SelectPortal=be;exports.SelectScrollDownButton=He;exports.SelectScrollUpButton=je;exports.SelectSeparator=Qe;exports.SelectTrigger=Pe;exports.SelectValue=Ee;exports.SelectViewport=Me;exports.Trigger=Vt;exports.Value=Bt;exports.Viewport=Ut;exports.createSelectScope=It;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const st=require("react"),ct=require("react-dom"),Le=require("./index.cjs64.js"),E=require("./index.cjs57.js"),lt=require("./index.cjs65.js"),H=require("./index.cjs56.js"),it=require("./index.cjs58.js"),at=require("./index.cjs66.js"),dt=require("./index.cjs67.js"),ut=require("./index.cjs68.js"),pt=require("./index.cjs69.js"),Ie=require("./index.cjs70.js"),ee=require("./index.cjs71.js"),ft=require("./index.cjs72.js"),M=require("./index.cjs55.js"),mt=require("./index.cjs34.js"),ht=require("./index.cjs73.js"),ke=require("./index.cjs59.js"),$=require("./index.cjs74.js"),vt=require("./index.cjs60.js"),St=require("./index.cjs75.js"),gt=require("./index.cjs76.js"),xt=require("./index.cjs77.js"),d=require("react/jsx-runtime");function Ve(o){const l=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const e in o)if(e!=="default"){const i=Object.getOwnPropertyDescriptor(o,e);Object.defineProperty(l,e,i.get?i:{enumerable:!0,get:()=>o[e]})}}return l.default=o,Object.freeze(l)}const t=Ve(st),Be=Ve(ct);var wt=[" ","Enter","ArrowUp","ArrowDown"],Ct=[" ","Enter"],se="Select",[ae,de,yt]=lt.createCollection(se),[te,It]=it.createContextScope(se,[yt,ee.createPopperScope]),ue=ee.createPopperScope(),[Tt,G]=te(se),[Pt,Et]=te(se),Te=o=>{const{__scopeSelect:l,children:e,open:i,defaultOpen:r,onOpenChange:u,value:n,defaultValue:s,onValueChange:c,dir:f,name:S,autoComplete:w,disabled:R,required:T,form:y}=o,a=ue(l),[h,g]=t.useState(null),[m,v]=t.useState(null),[F,O]=t.useState(!1),oe=at.useDirection(f),[b=!1,D]=ke.useControllableState({prop:i,defaultProp:r,onChange:u}),[W,Y]=ke.useControllableState({prop:n,defaultProp:s,onChange:c}),L=t.useRef(null),k=h?y||!!h.closest("form"):!0,[U,V]=t.useState(new Set),B=Array.from(U).map(_=>_.props.value).join(";");return d.jsx(ee.Root,{...a,children:d.jsxs(Tt,{required:T,scope:l,trigger:h,onTriggerChange:g,valueNode:m,onValueNodeChange:v,valueNodeHasChildren:F,onValueNodeHasChildrenChange:O,contentId:Ie.useId(),value:W,onValueChange:Y,open:b,onOpenChange:D,dir:oe,triggerPointerDownPosRef:L,disabled:R,children:[d.jsx(ae.Provider,{scope:l,children:d.jsx(Pt,{scope:o.__scopeSelect,onNativeOptionAdd:t.useCallback(_=>{V(j=>new Set(j).add(_))},[]),onNativeOptionRemove:t.useCallback(_=>{V(j=>{const q=new Set(j);return q.delete(_),q})},[]),children:e})}),k?d.jsxs(ot,{"aria-hidden":!0,required:T,tabIndex:-1,name:S,autoComplete:w,value:W,onChange:_=>Y(_.target.value),disabled:R,form:y,children:[W===void 0?d.jsx("option",{value:""}):null,Array.from(U)]},B):null]})})};Te.displayName=se;var qe="SelectTrigger",Pe=t.forwardRef((o,l)=>{const{__scopeSelect:e,disabled:i=!1,...r}=o,u=ue(e),n=G(qe,e),s=n.disabled||i,c=H.useComposedRefs(l,n.onTriggerChange),f=de(e),S=t.useRef("touch"),[w,R,T]=nt(a=>{const h=f().filter(v=>!v.disabled),g=h.find(v=>v.value===n.value),m=rt(h,a,g);m!==void 0&&n.onValueChange(m.value)}),y=a=>{s||(n.onOpenChange(!0),T()),a&&(n.triggerPointerDownPosRef.current={x:Math.round(a.pageX),y:Math.round(a.pageY)})};return d.jsx(ee.Anchor,{asChild:!0,...u,children:d.jsx(M.Primitive.button,{type:"button",role:"combobox","aria-controls":n.contentId,"aria-expanded":n.open,"aria-required":n.required,"aria-autocomplete":"none",dir:n.dir,"data-state":n.open?"open":"closed",disabled:s,"data-disabled":s?"":void 0,"data-placeholder":tt(n.value)?"":void 0,...r,ref:c,onClick:E.composeEventHandlers(r.onClick,a=>{a.currentTarget.focus(),S.current!=="mouse"&&y(a)}),onPointerDown:E.composeEventHandlers(r.onPointerDown,a=>{S.current=a.pointerType;const h=a.target;h.hasPointerCapture(a.pointerId)&&h.releasePointerCapture(a.pointerId),a.button===0&&a.ctrlKey===!1&&a.pointerType==="mouse"&&(y(a),a.preventDefault())}),onKeyDown:E.composeEventHandlers(r.onKeyDown,a=>{const h=w.current!=="";!(a.ctrlKey||a.altKey||a.metaKey)&&a.key.length===1&&R(a.key),!(h&&a.key===" ")&&wt.includes(a.key)&&(y(),a.preventDefault())})})})});Pe.displayName=qe;var Fe="SelectValue",Ee=t.forwardRef((o,l)=>{const{__scopeSelect:e,className:i,style:r,children:u,placeholder:n="",...s}=o,c=G(Fe,e),{onValueNodeHasChildrenChange:f}=c,S=u!==void 0,w=H.useComposedRefs(l,c.onValueNodeChange);return $.useLayoutEffect(()=>{f(S)},[f,S]),d.jsx(M.Primitive.span,{...s,ref:w,style:{pointerEvents:"none"},children:tt(c.value)?d.jsx(d.Fragment,{children:n}):u})});Ee.displayName=Fe;var Rt="SelectIcon",Re=t.forwardRef((o,l)=>{const{__scopeSelect:e,children:i,...r}=o;return d.jsx(M.Primitive.span,{"aria-hidden":!0,...r,ref:l,children:i||"▼"})});Re.displayName=Rt;var bt="SelectPortal",be=o=>d.jsx(ft.Portal,{asChild:!0,...o});be.displayName=bt;var J="SelectContent",_e=t.forwardRef((o,l)=>{const e=G(J,o.__scopeSelect),[i,r]=t.useState();if($.useLayoutEffect(()=>{r(new DocumentFragment)},[]),!e.open){const u=i;return u?Be.createPortal(d.jsx(We,{scope:o.__scopeSelect,children:d.jsx(ae.Slot,{scope:o.__scopeSelect,children:d.jsx("div",{children:o.children})})}),u):null}return d.jsx(Ue,{...o,ref:l})});_e.displayName=J;var A=10,[We,z]=te(J),_t="SelectContentImpl",Ue=t.forwardRef((o,l)=>{const{__scopeSelect:e,position:i="item-aligned",onCloseAutoFocus:r,onEscapeKeyDown:u,onPointerDownOutside:n,side:s,sideOffset:c,align:f,alignOffset:S,arrowPadding:w,collisionBoundary:R,collisionPadding:T,sticky:y,hideWhenDetached:a,avoidCollisions:h,...g}=o,m=G(J,e),[v,F]=t.useState(null),[O,oe]=t.useState(null),b=H.useComposedRefs(l,p=>F(p)),[D,W]=t.useState(null),[Y,L]=t.useState(null),k=de(e),[U,V]=t.useState(!1),B=t.useRef(!1);t.useEffect(()=>{if(v)return gt.hideOthers(v)},[v]),ut.useFocusGuards();const _=t.useCallback(p=>{const[I,...N]=k().map(P=>P.ref.current),[x]=N.slice(-1),C=document.activeElement;for(const P of p)if(P===C||(P?.scrollIntoView({block:"nearest"}),P===I&&O&&(O.scrollTop=0),P===x&&O&&(O.scrollTop=O.scrollHeight),P?.focus(),document.activeElement!==C))return},[k,O]),j=t.useCallback(()=>_([D,v]),[_,D,v]);t.useEffect(()=>{U&&j()},[U,j]);const{onOpenChange:q,triggerPointerDownPosRef:K}=m;t.useEffect(()=>{if(v){let p={x:0,y:0};const I=x=>{p={x:Math.abs(Math.round(x.pageX)-(K.current?.x??0)),y:Math.abs(Math.round(x.pageY)-(K.current?.y??0))}},N=x=>{p.x<=10&&p.y<=10?x.preventDefault():v.contains(x.target)||q(!1),document.removeEventListener("pointermove",I),K.current=null};return K.current!==null&&(document.addEventListener("pointermove",I),document.addEventListener("pointerup",N,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",I),document.removeEventListener("pointerup",N,{capture:!0})}}},[v,q,K]),t.useEffect(()=>{const p=()=>q(!1);return window.addEventListener("blur",p),window.addEventListener("resize",p),()=>{window.removeEventListener("blur",p),window.removeEventListener("resize",p)}},[q]);const[pe,ce]=nt(p=>{const I=k().filter(C=>!C.disabled),N=I.find(C=>C.ref.current===document.activeElement),x=rt(I,p,N);x&&setTimeout(()=>x.ref.current.focus())}),fe=t.useCallback((p,I,N)=>{const x=!B.current&&!N;(m.value!==void 0&&m.value===I||x)&&(W(p),x&&(B.current=!0))},[m.value]),me=t.useCallback(()=>v?.focus(),[v]),Q=t.useCallback((p,I,N)=>{const x=!B.current&&!N;(m.value!==void 0&&m.value===I||x)&&L(p)},[m.value]),le=i==="popper"?ge:Ke,ne=le===ge?{side:s,sideOffset:c,align:f,alignOffset:S,arrowPadding:w,collisionBoundary:R,collisionPadding:T,sticky:y,hideWhenDetached:a,avoidCollisions:h}:{};return d.jsx(We,{scope:e,content:v,viewport:O,onViewportChange:oe,itemRefCallback:fe,selectedItem:D,onItemLeave:me,itemTextRefCallback:Q,focusSelectedItem:j,selectedItemText:Y,position:i,isPositioned:U,searchRef:pe,children:d.jsx(xt.default,{as:mt.Slot,allowPinchZoom:!0,children:d.jsx(pt.FocusScope,{asChild:!0,trapped:m.open,onMountAutoFocus:p=>{p.preventDefault()},onUnmountAutoFocus:E.composeEventHandlers(r,p=>{m.trigger?.focus({preventScroll:!0}),p.preventDefault()}),children:d.jsx(dt.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:u,onPointerDownOutside:n,onFocusOutside:p=>p.preventDefault(),onDismiss:()=>m.onOpenChange(!1),children:d.jsx(le,{role:"listbox",id:m.contentId,"data-state":m.open?"open":"closed",dir:m.dir,onContextMenu:p=>p.preventDefault(),...g,...ne,onPlaced:()=>V(!0),ref:b,style:{display:"flex",flexDirection:"column",outline:"none",...g.style},onKeyDown:E.composeEventHandlers(g.onKeyDown,p=>{const I=p.ctrlKey||p.altKey||p.metaKey;if(p.key==="Tab"&&p.preventDefault(),!I&&p.key.length===1&&ce(p.key),["ArrowUp","ArrowDown","Home","End"].includes(p.key)){let x=k().filter(C=>!C.disabled).map(C=>C.ref.current);if(["ArrowUp","End"].includes(p.key)&&(x=x.slice().reverse()),["ArrowUp","ArrowDown"].includes(p.key)){const C=p.target,P=x.indexOf(C);x=x.slice(P+1)}setTimeout(()=>_(x)),p.preventDefault()}})})})})})})});Ue.displayName=_t;var Nt="SelectItemAlignedPosition",Ke=t.forwardRef((o,l)=>{const{__scopeSelect:e,onPlaced:i,...r}=o,u=G(J,e),n=z(J,e),[s,c]=t.useState(null),[f,S]=t.useState(null),w=H.useComposedRefs(l,b=>S(b)),R=de(e),T=t.useRef(!1),y=t.useRef(!0),{viewport:a,selectedItem:h,selectedItemText:g,focusSelectedItem:m}=n,v=t.useCallback(()=>{if(u.trigger&&u.valueNode&&s&&f&&a&&h&&g){const b=u.trigger.getBoundingClientRect(),D=f.getBoundingClientRect(),W=u.valueNode.getBoundingClientRect(),Y=g.getBoundingClientRect();if(u.dir!=="rtl"){const C=Y.left-D.left,P=W.left-C,X=b.left-P,Z=b.width+X,he=Math.max(Z,D.width),ve=window.innerWidth-A,Se=Le.clamp(P,[A,Math.max(A,ve-he)]);s.style.minWidth=Z+"px",s.style.left=Se+"px"}else{const C=D.right-Y.right,P=window.innerWidth-W.right-C,X=window.innerWidth-b.right-P,Z=b.width+X,he=Math.max(Z,D.width),ve=window.innerWidth-A,Se=Le.clamp(P,[A,Math.max(A,ve-he)]);s.style.minWidth=Z+"px",s.style.right=Se+"px"}const L=R(),k=window.innerHeight-A*2,U=a.scrollHeight,V=window.getComputedStyle(f),B=parseInt(V.borderTopWidth,10),_=parseInt(V.paddingTop,10),j=parseInt(V.borderBottomWidth,10),q=parseInt(V.paddingBottom,10),K=B+_+U+q+j,pe=Math.min(h.offsetHeight*5,K),ce=window.getComputedStyle(a),fe=parseInt(ce.paddingTop,10),me=parseInt(ce.paddingBottom,10),Q=b.top+b.height/2-A,le=k-Q,ne=h.offsetHeight/2,p=h.offsetTop+ne,I=B+_+p,N=K-I;if(I<=Q){const C=L.length>0&&h===L[L.length-1].ref.current;s.style.bottom="0px";const P=f.clientHeight-a.offsetTop-a.offsetHeight,X=Math.max(le,ne+(C?me:0)+P+j),Z=I+X;s.style.height=Z+"px"}else{const C=L.length>0&&h===L[0].ref.current;s.style.top="0px";const X=Math.max(Q,B+a.offsetTop+(C?fe:0)+ne)+N;s.style.height=X+"px",a.scrollTop=I-Q+a.offsetTop}s.style.margin=`${A}px 0`,s.style.minHeight=pe+"px",s.style.maxHeight=k+"px",i?.(),requestAnimationFrame(()=>T.current=!0)}},[R,u.trigger,u.valueNode,s,f,a,h,g,u.dir,i]);$.useLayoutEffect(()=>v(),[v]);const[F,O]=t.useState();$.useLayoutEffect(()=>{f&&O(window.getComputedStyle(f).zIndex)},[f]);const oe=t.useCallback(b=>{b&&y.current===!0&&(v(),m?.(),y.current=!1)},[v,m]);return d.jsx(Ot,{scope:e,contentWrapper:s,shouldExpandOnScrollRef:T,onScrollButtonChange:oe,children:d.jsx("div",{ref:c,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:F},children:d.jsx(M.Primitive.div,{...r,ref:w,style:{boxSizing:"border-box",maxHeight:"100%",...r.style}})})})});Ke.displayName=Nt;var Mt="SelectPopperPosition",ge=t.forwardRef((o,l)=>{const{__scopeSelect:e,align:i="start",collisionPadding:r=A,...u}=o,n=ue(e);return d.jsx(ee.Content,{...n,...u,ref:l,align:i,collisionPadding:r,style:{boxSizing:"border-box",...u.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});ge.displayName=Mt;var[Ot,Ne]=te(J,{}),xe="SelectViewport",Me=t.forwardRef((o,l)=>{const{__scopeSelect:e,nonce:i,...r}=o,u=z(xe,e),n=Ne(xe,e),s=H.useComposedRefs(l,u.onViewportChange),c=t.useRef(0);return d.jsxs(d.Fragment,{children:[d.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:i}),d.jsx(ae.Slot,{scope:e,children:d.jsx(M.Primitive.div,{"data-radix-select-viewport":"",role:"presentation",...r,ref:s,style:{position:"relative",flex:1,overflow:"hidden auto",...r.style},onScroll:E.composeEventHandlers(r.onScroll,f=>{const S=f.currentTarget,{contentWrapper:w,shouldExpandOnScrollRef:R}=n;if(R?.current&&w){const T=Math.abs(c.current-S.scrollTop);if(T>0){const y=window.innerHeight-A*2,a=parseFloat(w.style.minHeight),h=parseFloat(w.style.height),g=Math.max(a,h);if(g<y){const m=g+T,v=Math.min(y,m),F=m-v;w.style.height=v+"px",w.style.bottom==="0px"&&(S.scrollTop=F>0?F:0,w.style.justifyContent="flex-end")}}}c.current=S.scrollTop})})})]})});Me.displayName=xe;var $e="SelectGroup",[At,Dt]=te($e),Ge=t.forwardRef((o,l)=>{const{__scopeSelect:e,...i}=o,r=Ie.useId();return d.jsx(At,{scope:e,id:r,children:d.jsx(M.Primitive.div,{role:"group","aria-labelledby":r,...i,ref:l})})});Ge.displayName=$e;var ze="SelectLabel",Ye=t.forwardRef((o,l)=>{const{__scopeSelect:e,...i}=o,r=Dt(ze,e);return d.jsx(M.Primitive.div,{id:r.id,...i,ref:l})});Ye.displayName=ze;var ie="SelectItem",[jt,Xe]=te(ie),Oe=t.forwardRef((o,l)=>{const{__scopeSelect:e,value:i,disabled:r=!1,textValue:u,...n}=o,s=G(ie,e),c=z(ie,e),f=s.value===i,[S,w]=t.useState(u??""),[R,T]=t.useState(!1),y=H.useComposedRefs(l,m=>c.itemRefCallback?.(m,i,r)),a=Ie.useId(),h=t.useRef("touch"),g=()=>{r||(s.onValueChange(i),s.onOpenChange(!1))};if(i==="")throw new Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return d.jsx(jt,{scope:e,value:i,disabled:r,textId:a,isSelected:f,onItemTextChange:t.useCallback(m=>{w(v=>v||(m?.textContent??"").trim())},[]),children:d.jsx(ae.ItemSlot,{scope:e,value:i,disabled:r,textValue:S,children:d.jsx(M.Primitive.div,{role:"option","aria-labelledby":a,"data-highlighted":R?"":void 0,"aria-selected":f&&R,"data-state":f?"checked":"unchecked","aria-disabled":r||void 0,"data-disabled":r?"":void 0,tabIndex:r?void 0:-1,...n,ref:y,onFocus:E.composeEventHandlers(n.onFocus,()=>T(!0)),onBlur:E.composeEventHandlers(n.onBlur,()=>T(!1)),onClick:E.composeEventHandlers(n.onClick,()=>{h.current!=="mouse"&&g()}),onPointerUp:E.composeEventHandlers(n.onPointerUp,()=>{h.current==="mouse"&&g()}),onPointerDown:E.composeEventHandlers(n.onPointerDown,m=>{h.current=m.pointerType}),onPointerMove:E.composeEventHandlers(n.onPointerMove,m=>{h.current=m.pointerType,r?c.onItemLeave?.():h.current==="mouse"&&m.currentTarget.focus({preventScroll:!0})}),onPointerLeave:E.composeEventHandlers(n.onPointerLeave,m=>{m.currentTarget===document.activeElement&&c.onItemLeave?.()}),onKeyDown:E.composeEventHandlers(n.onKeyDown,m=>{c.searchRef?.current!==""&&m.key===" "||(Ct.includes(m.key)&&g(),m.key===" "&&m.preventDefault())})})})})});Oe.displayName=ie;var re="SelectItemText",Ae=t.forwardRef((o,l)=>{const{__scopeSelect:e,className:i,style:r,...u}=o,n=G(re,e),s=z(re,e),c=Xe(re,e),f=Et(re,e),[S,w]=t.useState(null),R=H.useComposedRefs(l,g=>w(g),c.onItemTextChange,g=>s.itemTextRefCallback?.(g,c.value,c.disabled)),T=S?.textContent,y=t.useMemo(()=>d.jsx("option",{value:c.value,disabled:c.disabled,children:T},c.value),[c.disabled,c.value,T]),{onNativeOptionAdd:a,onNativeOptionRemove:h}=f;return $.useLayoutEffect(()=>(a(y),()=>h(y)),[a,h,y]),d.jsxs(d.Fragment,{children:[d.jsx(M.Primitive.span,{id:c.textId,...u,ref:R}),c.isSelected&&n.valueNode&&!n.valueNodeHasChildren?Be.createPortal(u.children,n.valueNode):null]})});Ae.displayName=re;var Ze="SelectItemIndicator",De=t.forwardRef((o,l)=>{const{__scopeSelect:e,...i}=o;return Xe(Ze,e).isSelected?d.jsx(M.Primitive.span,{"aria-hidden":!0,...i,ref:l}):null});De.displayName=Ze;var we="SelectScrollUpButton",je=t.forwardRef((o,l)=>{const e=z(we,o.__scopeSelect),i=Ne(we,o.__scopeSelect),[r,u]=t.useState(!1),n=H.useComposedRefs(l,i.onScrollButtonChange);return $.useLayoutEffect(()=>{if(e.viewport&&e.isPositioned){let s=function(){const f=c.scrollTop>0;u(f)};const c=e.viewport;return s(),c.addEventListener("scroll",s),()=>c.removeEventListener("scroll",s)}},[e.viewport,e.isPositioned]),r?d.jsx(Je,{...o,ref:n,onAutoScroll:()=>{const{viewport:s,selectedItem:c}=e;s&&c&&(s.scrollTop=s.scrollTop-c.offsetHeight)}}):null});je.displayName=we;var Ce="SelectScrollDownButton",He=t.forwardRef((o,l)=>{const e=z(Ce,o.__scopeSelect),i=Ne(Ce,o.__scopeSelect),[r,u]=t.useState(!1),n=H.useComposedRefs(l,i.onScrollButtonChange);return $.useLayoutEffect(()=>{if(e.viewport&&e.isPositioned){let s=function(){const f=c.scrollHeight-c.clientHeight,S=Math.ceil(c.scrollTop)<f;u(S)};const c=e.viewport;return s(),c.addEventListener("scroll",s),()=>c.removeEventListener("scroll",s)}},[e.viewport,e.isPositioned]),r?d.jsx(Je,{...o,ref:n,onAutoScroll:()=>{const{viewport:s,selectedItem:c}=e;s&&c&&(s.scrollTop=s.scrollTop+c.offsetHeight)}}):null});He.displayName=Ce;var Je=t.forwardRef((o,l)=>{const{__scopeSelect:e,onAutoScroll:i,...r}=o,u=z("SelectScrollButton",e),n=t.useRef(null),s=de(e),c=t.useCallback(()=>{n.current!==null&&(window.clearInterval(n.current),n.current=null)},[]);return t.useEffect(()=>()=>c(),[c]),$.useLayoutEffect(()=>{s().find(S=>S.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:"nearest"})},[s]),d.jsx(M.Primitive.div,{"aria-hidden":!0,...r,ref:l,style:{flexShrink:0,...r.style},onPointerDown:E.composeEventHandlers(r.onPointerDown,()=>{n.current===null&&(n.current=window.setInterval(i,50))}),onPointerMove:E.composeEventHandlers(r.onPointerMove,()=>{u.onItemLeave?.(),n.current===null&&(n.current=window.setInterval(i,50))}),onPointerLeave:E.composeEventHandlers(r.onPointerLeave,()=>{c()})})}),Ht="SelectSeparator",Qe=t.forwardRef((o,l)=>{const{__scopeSelect:e,...i}=o;return d.jsx(M.Primitive.div,{"aria-hidden":!0,...i,ref:l})});Qe.displayName=Ht;var ye="SelectArrow",et=t.forwardRef((o,l)=>{const{__scopeSelect:e,...i}=o,r=ue(e),u=G(ye,e),n=z(ye,e);return u.open&&n.position==="popper"?d.jsx(ee.Arrow,{...r,...i,ref:l}):null});et.displayName=ye;function tt(o){return o===""||o===void 0}var ot=t.forwardRef((o,l)=>{const{value:e,...i}=o,r=t.useRef(null),u=H.useComposedRefs(l,r),n=vt.usePrevious(e);return t.useEffect(()=>{const s=r.current,c=window.HTMLSelectElement.prototype,S=Object.getOwnPropertyDescriptor(c,"value").set;if(n!==e&&S){const w=new Event("change",{bubbles:!0});S.call(s,e),s.dispatchEvent(w)}},[n,e]),d.jsx(St.VisuallyHidden,{asChild:!0,children:d.jsx("select",{...i,ref:u,defaultValue:e})})});ot.displayName="BubbleSelect";function nt(o){const l=ht.useCallbackRef(o),e=t.useRef(""),i=t.useRef(0),r=t.useCallback(n=>{const s=e.current+n;l(s),function c(f){e.current=f,window.clearTimeout(i.current),f!==""&&(i.current=window.setTimeout(()=>c(""),1e3))}(s)},[l]),u=t.useCallback(()=>{e.current="",window.clearTimeout(i.current)},[]);return t.useEffect(()=>()=>window.clearTimeout(i.current),[]),[e,r,u]}function rt(o,l,e){const r=l.length>1&&Array.from(l).every(f=>f===l[0])?l[0]:l,u=e?o.indexOf(e):-1;let n=Lt(o,Math.max(u,0));r.length===1&&(n=n.filter(f=>f!==e));const c=n.find(f=>f.textValue.toLowerCase().startsWith(r.toLowerCase()));return c!==e?c:void 0}function Lt(o,l){return o.map((e,i)=>o[(l+i)%o.length])}var kt=Te,Vt=Pe,Bt=Ee,qt=Re,Ft=be,Wt=_e,Ut=Me,Kt=Oe,$t=Ae,Gt=De,zt=je,Yt=He;exports.Content=Wt;exports.Icon=qt;exports.Item=Kt;exports.ItemIndicator=Gt;exports.ItemText=$t;exports.Portal=Ft;exports.Root=kt;exports.ScrollDownButton=Yt;exports.ScrollUpButton=zt;exports.Select=Te;exports.SelectArrow=et;exports.SelectContent=_e;exports.SelectGroup=Ge;exports.SelectIcon=Re;exports.SelectItem=Oe;exports.SelectItemIndicator=De;exports.SelectItemText=Ae;exports.SelectLabel=Ye;exports.SelectPortal=be;exports.SelectScrollDownButton=He;exports.SelectScrollUpButton=je;exports.SelectSeparator=Qe;exports.SelectTrigger=Pe;exports.SelectValue=Ee;exports.SelectViewport=Me;exports.Trigger=Vt;exports.Value=Bt;exports.Viewport=Ut;exports.createSelectScope=It;
2
2
  //# sourceMappingURL=index.cjs43.js.map
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("react"),h=require("./index.cjs60.js"),R=require("./index.cjs58.js"),l=require("./index.cjs55.js"),E=require("./index.cjs59.js"),j=require("./index.cjs34.js"),i=require("react/jsx-runtime");function w(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const t=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(r,o,t.get?t:{enumerable:!0,get:()=>e[o]})}}return r.default=e,Object.freeze(r)}const n=w(T);var x="AlertDialog",[M,q]=h.createContextScope(x,[l.createDialogScope]),s=l.createDialogScope(),u=e=>{const{__scopeAlertDialog:r,...o}=e,t=s(r);return i.jsx(l.Root,{...t,...o,modal:!0})};u.displayName=x;var I="AlertDialogTrigger",C=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,...t}=e,a=s(o);return i.jsx(l.Trigger,{...a,...t,ref:r})});C.displayName=I;var $="AlertDialogPortal",A=e=>{const{__scopeAlertDialog:r,...o}=e,t=s(r);return i.jsx(l.Portal,{...t,...o})};A.displayName=$;var L="AlertDialogOverlay",D=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,...t}=e,a=s(o);return i.jsx(l.Overlay,{...a,...t,ref:r})});D.displayName=L;var c="AlertDialogContent",[F,G]=M(c),v=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,children:t,...a}=e,d=s(o),g=n.useRef(null),b=R.useComposedRefs(r,g),N=n.useRef(null);return i.jsx(l.WarningProvider,{contentName:c,titleName:S,docsSlug:"alert-dialog",children:i.jsx(F,{scope:o,cancelRef:N,children:i.jsxs(l.Content,{role:"alertdialog",...d,...a,ref:b,onOpenAutoFocus:E.composeEventHandlers(a.onOpenAutoFocus,p=>{p.preventDefault(),N.current?.focus({preventScroll:!0})}),onPointerDownOutside:p=>p.preventDefault(),onInteractOutside:p=>p.preventDefault(),children:[i.jsx(j.Slottable,{children:t}),i.jsx(Y,{contentRef:g})]})})})});v.displayName=c;var S="AlertDialogTitle",f=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,...t}=e,a=s(o);return i.jsx(l.Title,{...a,...t,ref:r})});f.displayName=S;var O="AlertDialogDescription",m=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,...t}=e,a=s(o);return i.jsx(l.Description,{...a,...t,ref:r})});m.displayName=O;var W="AlertDialogAction",y=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,...t}=e,a=s(o);return i.jsx(l.Close,{...a,...t,ref:r})});y.displayName=W;var P="AlertDialogCancel",_=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,...t}=e,{cancelRef:a}=G(P,o),d=s(o),g=R.useComposedRefs(r,a);return i.jsx(l.Close,{...d,...t,ref:g})});_.displayName=P;var Y=({contentRef:e})=>{const r=`\`${c}\` requires a description for the component to be accessible for screen reader users.
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("react"),h=require("./index.cjs58.js"),R=require("./index.cjs56.js"),l=require("./index.cjs62.js"),E=require("./index.cjs57.js"),j=require("./index.cjs34.js"),i=require("react/jsx-runtime");function w(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const t=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(r,o,t.get?t:{enumerable:!0,get:()=>e[o]})}}return r.default=e,Object.freeze(r)}const n=w(T);var x="AlertDialog",[M,q]=h.createContextScope(x,[l.createDialogScope]),s=l.createDialogScope(),u=e=>{const{__scopeAlertDialog:r,...o}=e,t=s(r);return i.jsx(l.Root,{...t,...o,modal:!0})};u.displayName=x;var I="AlertDialogTrigger",C=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,...t}=e,a=s(o);return i.jsx(l.Trigger,{...a,...t,ref:r})});C.displayName=I;var $="AlertDialogPortal",A=e=>{const{__scopeAlertDialog:r,...o}=e,t=s(r);return i.jsx(l.Portal,{...t,...o})};A.displayName=$;var L="AlertDialogOverlay",D=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,...t}=e,a=s(o);return i.jsx(l.Overlay,{...a,...t,ref:r})});D.displayName=L;var c="AlertDialogContent",[F,G]=M(c),v=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,children:t,...a}=e,d=s(o),g=n.useRef(null),b=R.useComposedRefs(r,g),N=n.useRef(null);return i.jsx(l.WarningProvider,{contentName:c,titleName:S,docsSlug:"alert-dialog",children:i.jsx(F,{scope:o,cancelRef:N,children:i.jsxs(l.Content,{role:"alertdialog",...d,...a,ref:b,onOpenAutoFocus:E.composeEventHandlers(a.onOpenAutoFocus,p=>{p.preventDefault(),N.current?.focus({preventScroll:!0})}),onPointerDownOutside:p=>p.preventDefault(),onInteractOutside:p=>p.preventDefault(),children:[i.jsx(j.Slottable,{children:t}),i.jsx(Y,{contentRef:g})]})})})});v.displayName=c;var S="AlertDialogTitle",f=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,...t}=e,a=s(o);return i.jsx(l.Title,{...a,...t,ref:r})});f.displayName=S;var O="AlertDialogDescription",m=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,...t}=e,a=s(o);return i.jsx(l.Description,{...a,...t,ref:r})});m.displayName=O;var W="AlertDialogAction",y=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,...t}=e,a=s(o);return i.jsx(l.Close,{...a,...t,ref:r})});y.displayName=W;var P="AlertDialogCancel",_=n.forwardRef((e,r)=>{const{__scopeAlertDialog:o,...t}=e,{cancelRef:a}=G(P,o),d=s(o),g=R.useComposedRefs(r,a);return i.jsx(l.Close,{...d,...t,ref:g})});_.displayName=P;var Y=({contentRef:e})=>{const r=`\`${c}\` requires a description for the component to be accessible for screen reader users.
2
2
 
3
3
  You can add a description to the \`${c}\` by passing a \`${O}\` component as a child, which also benefits sighted users by adding visible context to the dialog.
4
4
 
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("./index.cjs28.js"),l=require("./index.cjs29.js"),u=require("./index.cjs15.js"),m=require("./index.cjs22.js"),x=require("./index.cjs4.js"),h=require("./index.cjs11.js"),y=require("./index.cjs13.js"),p=require("./index.cjs30.js"),j=({constraintName:n,value:s,onConstraintChange:i,disabled:c,error:t,onRemoveConstraint:a})=>{const{getConstraintDefinition:o}=x.useConstraints(),r=o(n);return r?e.jsx(l.InputErrorWrapper,{errorCode:t?.code,errorDescription:t?.message,showError:!!t,children:e.jsxs("div",{children:[e.jsx(u.Label,{className:"mb-2",htmlFor:r.name,children:r.name}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(b.Input,{id:r.name,type:"number",value:s,onChange:d=>i(Number(d.target.value)),disabled:c,min:0,className:m.cn({"border-destructive":t})}),e.jsx(h.Button,{type:"button",variant:"ghost",size:"icon",onClick:()=>a(),children:e.jsx(p.default,{className:"size-4"})})]}),r.description&&e.jsx("div",{className:"mt-2 text-sm text-gray-500",children:r.description})]})}):null},g=({constraintName:n,value:s,onConstraintChange:i,disabled:c,error:t,onRemoveConstraint:a})=>{const{getConstraintDefinition:o}=x.useConstraints(),r=o(n);return r?e.jsx(l.InputErrorWrapper,{errorCode:t?.code,errorDescription:t?.message,showError:!!t,children:e.jsxs("div",{children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[e.jsx(u.Label,{htmlFor:r.name,children:r.name}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(y.Switch,{id:r.name,checked:s,onCheckedChange:d=>i(d),disabled:c,className:m.cn({"border-destructive":t})}),e.jsx(h.Button,{type:"button",variant:"ghost",size:"icon",onClick:()=>a(),children:e.jsx(p.default,{className:"size-4"})})]})]}),r.description&&e.jsx("div",{className:"mt-2 text-sm text-gray-500",children:r.description})]})}):null},f=j,v=j,C=g;exports.ArrayMaxItemsRenderer=v;exports.ArrayMinItemsRenderer=f;exports.ArrayUniqueItemsRenderer=C;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),b=require("./index.cjs9.js"),d=require("./index.cjs10.js"),h=require("./index.cjs11.js"),g=require("./index.cjs12.js"),p=require("./index.cjs8.js"),x=require("./index.cjs13.js"),u=require("./index.cjs16.js"),v=require("./index.cjs15.js"),f=({constraintName:r,value:i,onConstraintChange:s,disabled:a,error:n,onRemoveConstraint:l})=>{const{getConstraintDefinition:o}=p.useConstraints(),t=o(r);return t?e.jsx(d.InputErrorWrapper,{errorCode:n?.code,errorDescription:n?.message,showError:!!n,children:e.jsxs("div",{children:[e.jsx(h.Label,{className:"mb-2",htmlFor:t.name,children:t.name}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(b.Input,{id:t.name,type:"number",value:i,onChange:c=>s(Number(c.target.value)),disabled:a,min:0,className:g.cn({"border-destructive":n})}),e.jsx(x.Button,{type:"button",variant:"ghost",size:"icon",onClick:()=>l(),children:e.jsx(v.default,{className:"size-4"})})]}),t.description&&e.jsx("div",{className:"mt-2 text-sm text-gray-500",children:t.description})]})}):null},S=({constraintName:r,value:i,onConstraintChange:s,disabled:a,error:n,onRemoveConstraint:l})=>{const{getConstraintDefinition:o}=p.useConstraints(),t=o(r);return t?e.jsx(d.InputErrorWrapper,{errorCode:n?.code,errorDescription:n?.message,showError:!!n,children:e.jsxs("div",{children:[e.jsx(h.Label,{className:"mb-2",htmlFor:t.name,children:t.name}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(b.Input,{id:t.name,type:"text",value:i,onChange:c=>s(c.target.value),disabled:a,placeholder:"Regular expression pattern",className:g.cn({"border-destructive":n})}),e.jsx(x.Button,{type:"button",variant:"ghost",size:"icon",onClick:()=>l(),children:e.jsx(v.default,{className:"size-4"})})]}),t.description&&e.jsx("div",{className:"mt-2 text-sm text-gray-500",children:t.description})]})}):null},L=({constraintName:r,value:i,onConstraintChange:s,disabled:a,error:n,onRemoveConstraint:l})=>{const{getConstraintDefinition:o}=p.useConstraints(),t=o(r),c=[{value:"email",label:"Email"},{value:"uri",label:"URI"},{value:"url",label:"URL"},{value:"date",label:"Date"},{value:"date-time",label:"Date-Time"},{value:"uuid",label:"UUID"},{value:"hostname",label:"Hostname"},{value:"ipv4",label:"IPv4"},{value:"ipv6",label:"IPv6"},{value:"phone",label:"Phone"}];return t?e.jsx(d.InputErrorWrapper,{errorCode:n?.code,errorDescription:n?.message,showError:!!n,children:e.jsxs("div",{children:[e.jsx(h.Label,{className:"mb-2",htmlFor:t.name,children:t.name}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(u.Select,{value:i,onValueChange:m=>s(m),disabled:a,children:[e.jsx(u.SelectTrigger,{id:t.name,className:g.cn("flex-1",{"border-destructive":n}),children:e.jsx(u.SelectValue,{placeholder:"Select format"})}),e.jsx(u.SelectContent,{children:c.map(m=>e.jsx(u.SelectItem,{value:m.value,children:m.label},m.value))})]}),e.jsx(x.Button,{type:"button",variant:"ghost",size:"icon",onClick:()=>l(),children:e.jsx(v.default,{className:"size-4"})})]}),t.description&&e.jsx("div",{className:"mt-2 text-sm text-gray-500",children:t.description})]})}):null},j=f,C=f,R=S,N=L,y={id:"string-constraints",hooks:{registerConstraints(){return[{name:"minLength",label:"Min Length",appliesTo:["string"],schema:{type:"integer",title:"Minimum Length Constraint",description:"The minimum length of the string",examples:[1,5,10],minimum:0},description:"Constrains a string to a minimum length",defaultValue:0},{name:"maxLength",label:"Max Length",appliesTo:["string"],schema:{type:"integer",title:"Maximum Length Constraint",description:"The maximum length of the string",examples:[50,100,255],minimum:0},description:"Constrains a string to a maximum length",defaultValue:100},{name:"pattern",label:"Pattern",appliesTo:["string"],schema:{type:"string",title:"Pattern Constraint",description:"Regular expression pattern the string must match",examples:["^[a-zA-Z0-9]+$","\\d{3}-\\d{2}-\\d{4}"]},description:"Regular expression that the string must match",defaultValue:""},{name:"format",label:"Format",appliesTo:["string"],schema:{type:"string",title:"Format Constraint",description:"Predefined format the string must follow",enum:["email","uri","url","date","date-time","uuid","hostname","ipv4","ipv6","phone"]},description:"Predefined format validation for the string",defaultValue:"email"}]},registerRenderers(){return{minLength:j,maxLength:C,pattern:R,format:N}}}};exports.StringFormatRenderer=N;exports.StringMaxLengthRenderer=C;exports.StringMinLengthRenderer=j;exports.StringPatternRenderer=R;exports.default=y;
2
2
  //# sourceMappingURL=index.cjs5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs5.js","sources":["../src/packages/plugins/array.tsx"],"sourcesContent":["import { Input } from \"@/components/ui/input\";\nimport { InputErrorWrapper } from \"@/components/input-error\";\nimport { Label } from \"@/components/ui/label\";\nimport { cn } from \"@/lib/utils\";\nimport {\n BaseJSONSchemaPlugin,\n ConstraintRendererProps,\n useConstraints,\n} from \"@/packages/constraints/context\";\nimport { Button } from \"@/components/ui/button\";\nimport { X } from \"lucide-react\";\nimport { Switch } from \"@/components/ui/switch\";\n\n// Generic numeric constraint renderer for arrays (minItems, maxItems)\nconst ArrayNumberConstraintRenderer = ({\n constraintName,\n value,\n onConstraintChange,\n disabled,\n error,\n onRemoveConstraint,\n}: ConstraintRendererProps<number> & { disabled?: boolean }) => {\n const { getConstraintDefinition } = useConstraints();\n const constraintDef = getConstraintDefinition(constraintName);\n\n if (!constraintDef) {\n return null;\n }\n\n return (\n <InputErrorWrapper\n errorCode={error?.code}\n errorDescription={error?.message}\n showError={!!error}\n >\n <div>\n <Label className=\"mb-2\" htmlFor={constraintDef.name}>\n {constraintDef.name}\n </Label>\n <div className=\"flex items-center gap-2\">\n <Input\n id={constraintDef.name}\n type=\"number\"\n value={value}\n onChange={(e) => onConstraintChange(Number(e.target.value))}\n disabled={disabled}\n min={0}\n className={cn({ \"border-destructive\": error })}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onRemoveConstraint()}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n {constraintDef.description && (\n <div className=\"mt-2 text-sm text-gray-500\">\n {constraintDef.description}\n </div>\n )}\n </div>\n </InputErrorWrapper>\n );\n};\n\n// Boolean constraint renderer for uniqueItems\nconst ArrayBooleanConstraintRenderer = ({\n constraintName,\n value,\n onConstraintChange,\n disabled,\n error,\n onRemoveConstraint,\n}: ConstraintRendererProps<boolean> & { disabled?: boolean }) => {\n const { getConstraintDefinition } = useConstraints();\n const constraintDef = getConstraintDefinition(constraintName);\n\n if (!constraintDef) {\n return null;\n }\n\n return (\n <InputErrorWrapper\n errorCode={error?.code}\n errorDescription={error?.message}\n showError={!!error}\n >\n <div>\n <div className=\"mb-2 flex items-center justify-between\">\n <Label htmlFor={constraintDef.name}>{constraintDef.name}</Label>\n <div className=\"flex items-center gap-2\">\n <Switch\n id={constraintDef.name}\n checked={value}\n onCheckedChange={(checked) => onConstraintChange(checked)}\n disabled={disabled}\n className={cn({ \"border-destructive\": error })}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onRemoveConstraint()}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n </div>\n {constraintDef.description && (\n <div className=\"mt-2 text-sm text-gray-500\">\n {constraintDef.description}\n </div>\n )}\n </div>\n </InputErrorWrapper>\n );\n};\n\n// Export the renderers\nexport const ArrayMinItemsRenderer = ArrayNumberConstraintRenderer;\nexport const ArrayMaxItemsRenderer = ArrayNumberConstraintRenderer;\nexport const ArrayUniqueItemsRenderer = ArrayBooleanConstraintRenderer;\n\nconst plugin: BaseJSONSchemaPlugin = {\n id: \"array-constraints\",\n hooks: {\n registerConstraints() {\n return [\n {\n name: \"minItems\",\n label: \"Min Items\",\n appliesTo: [\"array\"],\n schema: {\n type: \"integer\",\n title: \"Minimum Items Constraint\",\n description: \"The minimum number of items the array must contain\",\n examples: [1, 2, 5],\n minimum: 0,\n },\n description: \"Specifies the minimum number of items in the array\",\n defaultValue: 0,\n },\n {\n name: \"maxItems\",\n label: \"Max Items\",\n appliesTo: [\"array\"],\n schema: {\n type: \"integer\",\n title: \"Maximum Items Constraint\",\n description: \"The maximum number of items the array can contain\",\n examples: [10, 20, 100],\n minimum: 0,\n },\n description: \"Specifies the maximum number of items in the array\",\n defaultValue: 10,\n },\n {\n name: \"uniqueItems\",\n label: \"Unique Items\",\n appliesTo: [\"array\"],\n schema: {\n type: \"boolean\",\n title: \"Unique Items Constraint\",\n description: \"Whether array items must be unique\",\n },\n description: \"When true, all items in the array must be unique\",\n defaultValue: false,\n },\n ];\n },\n registerRenderers() {\n return {\n minItems: ArrayMinItemsRenderer,\n maxItems: ArrayMaxItemsRenderer,\n uniqueItems: ArrayUniqueItemsRenderer,\n };\n },\n },\n};\n\nexport default plugin;\n"],"names":["ArrayNumberConstraintRenderer","constraintName","value","onConstraintChange","disabled","error","onRemoveConstraint","getConstraintDefinition","useConstraints","constraintDef","jsx","InputErrorWrapper","Label","jsxs","Input","e","cn","Button","X","ArrayBooleanConstraintRenderer","Switch","checked","ArrayMinItemsRenderer","ArrayMaxItemsRenderer","ArrayUniqueItemsRenderer"],"mappings":"oWAcMA,EAAgC,CAAC,CACrC,eAAAC,EACA,MAAAC,EACA,mBAAAC,EACA,SAAAC,EACA,MAAAC,EACA,mBAAAC,CACF,IAAgE,CACxD,KAAA,CAAE,wBAAAC,CAAwB,EAAIC,iBAAe,EAC7CC,EAAgBF,EAAwBN,CAAc,EAE5D,OAAKQ,EAKHC,EAAA,IAACC,EAAA,kBAAA,CACC,UAAWN,GAAO,KAClB,iBAAkBA,GAAO,QACzB,UAAW,CAAC,CAACA,EAEb,gBAAC,MACC,CAAA,SAAA,CAAAK,EAAAA,IAACE,SAAM,UAAU,OAAO,QAASH,EAAc,KAC5C,WAAc,IACjB,CAAA,EACAI,EAAAA,KAAC,MAAI,CAAA,UAAU,0BACb,SAAA,CAAAH,EAAA,IAACI,EAAA,MAAA,CACC,GAAIL,EAAc,KAClB,KAAK,SACL,MAAAP,EACA,SAAWa,GAAMZ,EAAmB,OAAOY,EAAE,OAAO,KAAK,CAAC,EAC1D,SAAAX,EACA,IAAK,EACL,UAAWY,EAAA,GAAG,CAAE,qBAAsBX,CAAO,CAAA,CAAA,CAC/C,EACAK,EAAA,IAACO,EAAA,OAAA,CACC,KAAK,SACL,QAAQ,QACR,KAAK,OACL,QAAS,IAAMX,EAAmB,EAElC,SAAAI,EAAAA,IAACQ,EAAAA,QAAE,CAAA,UAAU,QAAS,CAAA,CAAA,CAAA,CACxB,EACF,EACCT,EAAc,aACbC,EAAA,IAAC,OAAI,UAAU,6BACZ,WAAc,WACjB,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,EAtCO,IAwCX,EAGMS,EAAiC,CAAC,CACtC,eAAAlB,EACA,MAAAC,EACA,mBAAAC,EACA,SAAAC,EACA,MAAAC,EACA,mBAAAC,CACF,IAAiE,CACzD,KAAA,CAAE,wBAAAC,CAAwB,EAAIC,iBAAe,EAC7CC,EAAgBF,EAAwBN,CAAc,EAE5D,OAAKQ,EAKHC,EAAA,IAACC,EAAA,kBAAA,CACC,UAAWN,GAAO,KAClB,iBAAkBA,GAAO,QACzB,UAAW,CAAC,CAACA,EAEb,gBAAC,MACC,CAAA,SAAA,CAACQ,EAAAA,KAAA,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAH,MAACE,EAAAA,MAAM,CAAA,QAASH,EAAc,KAAO,WAAc,KAAK,EACxDI,EAAAA,KAAC,MAAI,CAAA,UAAU,0BACb,SAAA,CAAAH,EAAA,IAACU,EAAA,OAAA,CACC,GAAIX,EAAc,KAClB,QAASP,EACT,gBAAkBmB,GAAYlB,EAAmBkB,CAAO,EACxD,SAAAjB,EACA,UAAWY,EAAA,GAAG,CAAE,qBAAsBX,CAAO,CAAA,CAAA,CAC/C,EACAK,EAAA,IAACO,EAAA,OAAA,CACC,KAAK,SACL,QAAQ,QACR,KAAK,OACL,QAAS,IAAMX,EAAmB,EAElC,SAAAI,EAAAA,IAACQ,EAAAA,QAAE,CAAA,UAAU,QAAS,CAAA,CAAA,CAAA,CACxB,CACF,CAAA,CAAA,EACF,EACCT,EAAc,aACbC,EAAA,IAAC,OAAI,UAAU,6BACZ,WAAc,WACjB,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,EApCO,IAsCX,EAGaY,EAAwBtB,EACxBuB,EAAwBvB,EACxBwB,EAA2BL"}
1
+ {"version":3,"file":"index.cjs5.js","sources":["../src/packages/plugins/string.tsx"],"sourcesContent":["import { Input } from \"@/components/ui/input\";\nimport { InputErrorWrapper } from \"@/components/input-error\";\nimport { Label } from \"@/components/ui/label\";\nimport { cn } from \"@/lib/utils\";\nimport {\n BaseJSONSchemaPlugin,\n ConstraintRendererProps,\n useConstraints,\n} from \"@/packages/constraints/context\";\nimport { Button } from \"@/components/ui/button\";\nimport { X } from \"lucide-react\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\n\n// Generic string constraint renderer for number-based constraints (minLength, maxLength)\nconst StringNumberConstraintRenderer = ({\n constraintName,\n value,\n onConstraintChange,\n disabled,\n error,\n onRemoveConstraint,\n}: ConstraintRendererProps<number> & { disabled?: boolean }) => {\n const { getConstraintDefinition } = useConstraints();\n const constraintDef = getConstraintDefinition(constraintName);\n\n if (!constraintDef) {\n return null;\n }\n\n return (\n <InputErrorWrapper\n errorCode={error?.code}\n errorDescription={error?.message}\n showError={!!error}\n >\n <div>\n <Label className=\"mb-2\" htmlFor={constraintDef.name}>\n {constraintDef.name}\n </Label>\n <div className=\"flex items-center gap-2\">\n <Input\n id={constraintDef.name}\n type=\"number\"\n value={value}\n onChange={(e) => onConstraintChange(Number(e.target.value))}\n disabled={disabled}\n min={0}\n className={cn({ \"border-destructive\": error })}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onRemoveConstraint()}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n {constraintDef.description && (\n <div className=\"mt-2 text-sm text-gray-500\">\n {constraintDef.description}\n </div>\n )}\n </div>\n </InputErrorWrapper>\n );\n};\n\n// Pattern constraint renderer for regex input\nconst PatternConstraintRenderer = ({\n constraintName,\n value,\n onConstraintChange,\n disabled,\n error,\n onRemoveConstraint,\n}: ConstraintRendererProps<string> & { disabled?: boolean }) => {\n const { getConstraintDefinition } = useConstraints();\n const constraintDef = getConstraintDefinition(constraintName);\n\n if (!constraintDef) {\n return null;\n }\n\n return (\n <InputErrorWrapper\n errorCode={error?.code}\n errorDescription={error?.message}\n showError={!!error}\n >\n <div>\n <Label className=\"mb-2\" htmlFor={constraintDef.name}>\n {constraintDef.name}\n </Label>\n <div className=\"flex items-center gap-2\">\n <Input\n id={constraintDef.name}\n type=\"text\"\n value={value}\n onChange={(e) => onConstraintChange(e.target.value)}\n disabled={disabled}\n placeholder=\"Regular expression pattern\"\n className={cn({ \"border-destructive\": error })}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onRemoveConstraint()}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n {constraintDef.description && (\n <div className=\"mt-2 text-sm text-gray-500\">\n {constraintDef.description}\n </div>\n )}\n </div>\n </InputErrorWrapper>\n );\n};\n\n// Format constraint renderer with predefined format options\nconst FormatConstraintRenderer = ({\n constraintName,\n value,\n onConstraintChange,\n disabled,\n error,\n onRemoveConstraint,\n}: ConstraintRendererProps<string> & { disabled?: boolean }) => {\n const { getConstraintDefinition } = useConstraints();\n const constraintDef = getConstraintDefinition(constraintName);\n\n const formatOptions = [\n { value: \"email\", label: \"Email\" },\n { value: \"uri\", label: \"URI\" },\n { value: \"url\", label: \"URL\" },\n { value: \"date\", label: \"Date\" },\n { value: \"date-time\", label: \"Date-Time\" },\n { value: \"uuid\", label: \"UUID\" },\n { value: \"hostname\", label: \"Hostname\" },\n { value: \"ipv4\", label: \"IPv4\" },\n { value: \"ipv6\", label: \"IPv6\" },\n { value: \"phone\", label: \"Phone\" },\n ];\n\n if (!constraintDef) {\n return null;\n }\n\n return (\n <InputErrorWrapper\n errorCode={error?.code}\n errorDescription={error?.message}\n showError={!!error}\n >\n <div>\n <Label className=\"mb-2\" htmlFor={constraintDef.name}>\n {constraintDef.name}\n </Label>\n <div className=\"flex items-center gap-2\">\n <Select\n value={value}\n onValueChange={(newValue) => onConstraintChange(newValue)}\n disabled={disabled}\n >\n <SelectTrigger\n id={constraintDef.name}\n className={cn(\"flex-1\", { \"border-destructive\": error })}\n >\n <SelectValue placeholder=\"Select format\" />\n </SelectTrigger>\n <SelectContent>\n {formatOptions.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onRemoveConstraint()}\n >\n <X className=\"size-4\" />\n </Button>\n </div>\n {constraintDef.description && (\n <div className=\"mt-2 text-sm text-gray-500\">\n {constraintDef.description}\n </div>\n )}\n </div>\n </InputErrorWrapper>\n );\n};\n\n// Export the renderers\nexport const StringMinLengthRenderer = StringNumberConstraintRenderer;\nexport const StringMaxLengthRenderer = StringNumberConstraintRenderer;\nexport const StringPatternRenderer = PatternConstraintRenderer;\nexport const StringFormatRenderer = FormatConstraintRenderer;\n\nconst plugin: BaseJSONSchemaPlugin = {\n id: \"string-constraints\",\n hooks: {\n registerConstraints() {\n return [\n {\n name: \"minLength\",\n label: \"Min Length\",\n appliesTo: [\"string\"],\n schema: {\n type: \"integer\",\n title: \"Minimum Length Constraint\",\n description: \"The minimum length of the string\",\n examples: [1, 5, 10],\n minimum: 0,\n },\n description: \"Constrains a string to a minimum length\",\n defaultValue: 0,\n },\n {\n name: \"maxLength\",\n label: \"Max Length\",\n appliesTo: [\"string\"],\n schema: {\n type: \"integer\",\n title: \"Maximum Length Constraint\",\n description: \"The maximum length of the string\",\n examples: [50, 100, 255],\n minimum: 0,\n },\n description: \"Constrains a string to a maximum length\",\n defaultValue: 100,\n },\n {\n name: \"pattern\",\n label: \"Pattern\",\n appliesTo: [\"string\"],\n schema: {\n type: \"string\",\n title: \"Pattern Constraint\",\n description: \"Regular expression pattern the string must match\",\n examples: [\"^[a-zA-Z0-9]+$\", \"\\\\d{3}-\\\\d{2}-\\\\d{4}\"],\n },\n description: \"Regular expression that the string must match\",\n defaultValue: \"\",\n },\n {\n name: \"format\",\n label: \"Format\",\n appliesTo: [\"string\"],\n schema: {\n type: \"string\",\n title: \"Format Constraint\",\n description: \"Predefined format the string must follow\",\n enum: [\n \"email\",\n \"uri\",\n \"url\",\n \"date\",\n \"date-time\",\n \"uuid\",\n \"hostname\",\n \"ipv4\",\n \"ipv6\",\n \"phone\",\n ],\n },\n description: \"Predefined format validation for the string\",\n defaultValue: \"email\",\n },\n ];\n },\n registerRenderers() {\n return {\n minLength: StringMinLengthRenderer,\n maxLength: StringMaxLengthRenderer,\n pattern: StringPatternRenderer,\n format: StringFormatRenderer,\n };\n },\n },\n};\n\nexport default plugin;\n"],"names":["StringNumberConstraintRenderer","constraintName","value","onConstraintChange","disabled","error","onRemoveConstraint","getConstraintDefinition","useConstraints","constraintDef","jsx","InputErrorWrapper","Label","jsxs","Input","e","cn","Button","X","PatternConstraintRenderer","FormatConstraintRenderer","formatOptions","Select","newValue","SelectTrigger","SelectValue","SelectContent","option","SelectItem","StringMinLengthRenderer","StringMaxLengthRenderer","StringPatternRenderer","StringFormatRenderer","plugin"],"mappings":"+XAoBMA,EAAiC,CAAC,CACtC,eAAAC,EACA,MAAAC,EACA,mBAAAC,EACA,SAAAC,EACA,MAAAC,EACA,mBAAAC,CACF,IAAgE,CACxD,KAAA,CAAE,wBAAAC,CAAwB,EAAIC,iBAAe,EAC7CC,EAAgBF,EAAwBN,CAAc,EAE5D,OAAKQ,EAKHC,EAAA,IAACC,EAAA,kBAAA,CACC,UAAWN,GAAO,KAClB,iBAAkBA,GAAO,QACzB,UAAW,CAAC,CAACA,EAEb,gBAAC,MACC,CAAA,SAAA,CAAAK,EAAAA,IAACE,SAAM,UAAU,OAAO,QAASH,EAAc,KAC5C,WAAc,IACjB,CAAA,EACAI,EAAAA,KAAC,MAAI,CAAA,UAAU,0BACb,SAAA,CAAAH,EAAA,IAACI,EAAA,MAAA,CACC,GAAIL,EAAc,KAClB,KAAK,SACL,MAAAP,EACA,SAAWa,GAAMZ,EAAmB,OAAOY,EAAE,OAAO,KAAK,CAAC,EAC1D,SAAAX,EACA,IAAK,EACL,UAAWY,EAAA,GAAG,CAAE,qBAAsBX,CAAO,CAAA,CAAA,CAC/C,EACAK,EAAA,IAACO,EAAA,OAAA,CACC,KAAK,SACL,QAAQ,QACR,KAAK,OACL,QAAS,IAAMX,EAAmB,EAElC,SAAAI,EAAAA,IAACQ,EAAAA,QAAE,CAAA,UAAU,QAAS,CAAA,CAAA,CAAA,CACxB,EACF,EACCT,EAAc,aACbC,EAAA,IAAC,OAAI,UAAU,6BACZ,WAAc,WACjB,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,EAtCO,IAwCX,EAGMS,EAA4B,CAAC,CACjC,eAAAlB,EACA,MAAAC,EACA,mBAAAC,EACA,SAAAC,EACA,MAAAC,EACA,mBAAAC,CACF,IAAgE,CACxD,KAAA,CAAE,wBAAAC,CAAwB,EAAIC,iBAAe,EAC7CC,EAAgBF,EAAwBN,CAAc,EAE5D,OAAKQ,EAKHC,EAAA,IAACC,EAAA,kBAAA,CACC,UAAWN,GAAO,KAClB,iBAAkBA,GAAO,QACzB,UAAW,CAAC,CAACA,EAEb,gBAAC,MACC,CAAA,SAAA,CAAAK,EAAAA,IAACE,SAAM,UAAU,OAAO,QAASH,EAAc,KAC5C,WAAc,IACjB,CAAA,EACAI,EAAAA,KAAC,MAAI,CAAA,UAAU,0BACb,SAAA,CAAAH,EAAA,IAACI,EAAA,MAAA,CACC,GAAIL,EAAc,KAClB,KAAK,OACL,MAAAP,EACA,SAAWa,GAAMZ,EAAmBY,EAAE,OAAO,KAAK,EAClD,SAAAX,EACA,YAAY,6BACZ,UAAWY,EAAA,GAAG,CAAE,qBAAsBX,CAAO,CAAA,CAAA,CAC/C,EACAK,EAAA,IAACO,EAAA,OAAA,CACC,KAAK,SACL,QAAQ,QACR,KAAK,OACL,QAAS,IAAMX,EAAmB,EAElC,SAAAI,EAAAA,IAACQ,EAAAA,QAAE,CAAA,UAAU,QAAS,CAAA,CAAA,CAAA,CACxB,EACF,EACCT,EAAc,aACbC,EAAA,IAAC,OAAI,UAAU,6BACZ,WAAc,WACjB,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,EAtCO,IAwCX,EAGMU,EAA2B,CAAC,CAChC,eAAAnB,EACA,MAAAC,EACA,mBAAAC,EACA,SAAAC,EACA,MAAAC,EACA,mBAAAC,CACF,IAAgE,CACxD,KAAA,CAAE,wBAAAC,CAAwB,EAAIC,iBAAe,EAC7CC,EAAgBF,EAAwBN,CAAc,EAEtDoB,EAAgB,CACpB,CAAE,MAAO,QAAS,MAAO,OAAQ,EACjC,CAAE,MAAO,MAAO,MAAO,KAAM,EAC7B,CAAE,MAAO,MAAO,MAAO,KAAM,EAC7B,CAAE,MAAO,OAAQ,MAAO,MAAO,EAC/B,CAAE,MAAO,YAAa,MAAO,WAAY,EACzC,CAAE,MAAO,OAAQ,MAAO,MAAO,EAC/B,CAAE,MAAO,WAAY,MAAO,UAAW,EACvC,CAAE,MAAO,OAAQ,MAAO,MAAO,EAC/B,CAAE,MAAO,OAAQ,MAAO,MAAO,EAC/B,CAAE,MAAO,QAAS,MAAO,OAAQ,CACnC,EAEA,OAAKZ,EAKHC,EAAA,IAACC,EAAA,kBAAA,CACC,UAAWN,GAAO,KAClB,iBAAkBA,GAAO,QACzB,UAAW,CAAC,CAACA,EAEb,gBAAC,MACC,CAAA,SAAA,CAAAK,EAAAA,IAACE,SAAM,UAAU,OAAO,QAASH,EAAc,KAC5C,WAAc,IACjB,CAAA,EACAI,EAAAA,KAAC,MAAI,CAAA,UAAU,0BACb,SAAA,CAAAA,EAAA,KAACS,EAAA,OAAA,CACC,MAAApB,EACA,cAAgBqB,GAAapB,EAAmBoB,CAAQ,EACxD,SAAAnB,EAEA,SAAA,CAAAM,EAAA,IAACc,EAAA,cAAA,CACC,GAAIf,EAAc,KAClB,UAAWO,EAAAA,GAAG,SAAU,CAAE,qBAAsBX,EAAO,EAEvD,SAAAK,EAAAA,IAACe,EAAAA,YAAY,CAAA,YAAY,eAAgB,CAAA,CAAA,CAC3C,QACCC,EAAAA,cACE,CAAA,SAAAL,EAAc,IAAKM,GACjBjB,EAAAA,IAAAkB,EAAA,WAAA,CAA8B,MAAOD,EAAO,MAC1C,SAAOA,EAAA,OADOA,EAAO,KAExB,CACD,CACH,CAAA,CAAA,CAAA,CACF,EACAjB,EAAA,IAACO,EAAA,OAAA,CACC,KAAK,SACL,QAAQ,QACR,KAAK,OACL,QAAS,IAAMX,EAAmB,EAElC,SAAAI,EAAAA,IAACQ,EAAAA,QAAE,CAAA,UAAU,QAAS,CAAA,CAAA,CAAA,CACxB,EACF,EACCT,EAAc,aACbC,EAAA,IAAC,OAAI,UAAU,6BACZ,WAAc,WACjB,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,EAhDO,IAkDX,EAGamB,EAA0B7B,EAC1B8B,EAA0B9B,EAC1B+B,EAAwBZ,EACxBa,EAAuBZ,EAE9Ba,EAA+B,CACnC,GAAI,qBACJ,MAAO,CACL,qBAAsB,CACb,MAAA,CACL,CACE,KAAM,YACN,MAAO,aACP,UAAW,CAAC,QAAQ,EACpB,OAAQ,CACN,KAAM,UACN,MAAO,4BACP,YAAa,mCACb,SAAU,CAAC,EAAG,EAAG,EAAE,EACnB,QAAS,CACX,EACA,YAAa,0CACb,aAAc,CAChB,EACA,CACE,KAAM,YACN,MAAO,aACP,UAAW,CAAC,QAAQ,EACpB,OAAQ,CACN,KAAM,UACN,MAAO,4BACP,YAAa,mCACb,SAAU,CAAC,GAAI,IAAK,GAAG,EACvB,QAAS,CACX,EACA,YAAa,0CACb,aAAc,GAChB,EACA,CACE,KAAM,UACN,MAAO,UACP,UAAW,CAAC,QAAQ,EACpB,OAAQ,CACN,KAAM,SACN,MAAO,qBACP,YAAa,mDACb,SAAU,CAAC,iBAAkB,sBAAsB,CACrD,EACA,YAAa,gDACb,aAAc,EAChB,EACA,CACE,KAAM,SACN,MAAO,SACP,UAAW,CAAC,QAAQ,EACpB,OAAQ,CACN,KAAM,SACN,MAAO,oBACP,YAAa,2CACb,KAAM,CACJ,QACA,MACA,MACA,OACA,YACA,OACA,WACA,OACA,OACA,OAAA,CAEJ,EACA,YAAa,8CACb,aAAc,OAAA,CAElB,CACF,EACA,mBAAoB,CACX,MAAA,CACL,UAAWJ,EACX,UAAWC,EACX,QAASC,EACT,OAAQC,CACV,CAAA,CACF,CAEJ"}
@@ -1,6 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const H=require("react"),f=require("./index.cjs59.js"),C=require("./index.cjs58.js"),M=require("./index.cjs60.js"),m=require("./index.cjs70.js"),B=require("./index.cjs61.js"),V=require("./index.cjs67.js"),z=require("./index.cjs69.js"),K=require("./index.cjs72.js"),R=require("./index.cjs78.js"),p=require("./index.cjs57.js"),U=require("./index.cjs68.js"),Y=require("./index.cjs77.js"),Z=require("./index.cjs76.js"),J=require("./index.cjs34.js"),s=require("react/jsx-runtime");function Q(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const r=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,r.get?r:{enumerable:!0,get:()=>e[o]})}}return t.default=e,Object.freeze(t)}const a=Q(H);var P="Dialog",[S,X]=M.createContextScope(P),[ee,u]=S(P),_=e=>{const{__scopeDialog:t,children:o,open:r,defaultOpen:i,onOpenChange:n,modal:l=!0}=e,c=a.useRef(null),g=a.useRef(null),[v=!1,x]=B.useControllableState({prop:r,defaultProp:i,onChange:n});return s.jsx(ee,{scope:t,triggerRef:c,contentRef:g,contentId:m.useId(),titleId:m.useId(),descriptionId:m.useId(),open:v,onOpenChange:x,onOpenToggle:a.useCallback(()=>x(L=>!L),[x]),modal:l,children:o})};_.displayName=P;var w="DialogTrigger",y=a.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,i=u(w,o),n=C.useComposedRefs(t,i.triggerRef);return s.jsx(p.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":i.open,"aria-controls":i.contentId,"data-state":A(i.open),...r,ref:n,onClick:f.composeEventHandlers(e.onClick,i.onOpenToggle)})});y.displayName=w;var E="DialogPortal",[te,F]=S(E,{forceMount:void 0}),O=e=>{const{__scopeDialog:t,forceMount:o,children:r,container:i}=e,n=u(E,t);return s.jsx(te,{scope:t,forceMount:o,children:a.Children.map(r,l=>s.jsx(R.Presence,{present:o||n.open,children:s.jsx(K.Portal,{asChild:!0,container:i,children:l})}))})};O.displayName=E;var D="DialogOverlay",h=a.forwardRef((e,t)=>{const o=F(D,e.__scopeDialog),{forceMount:r=o.forceMount,...i}=e,n=u(D,e.__scopeDialog);return n.modal?s.jsx(R.Presence,{present:r||n.open,children:s.jsx(oe,{...i,ref:t})}):null});h.displayName=D;var oe=a.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,i=u(D,o);return s.jsx(Y.default,{as:J.Slot,allowPinchZoom:!0,shards:[i.contentRef],children:s.jsx(p.Primitive.div,{"data-state":A(i.open),...r,ref:t,style:{pointerEvents:"auto",...r.style}})})}),d="DialogContent",N=a.forwardRef((e,t)=>{const o=F(d,e.__scopeDialog),{forceMount:r=o.forceMount,...i}=e,n=u(d,e.__scopeDialog);return s.jsx(R.Presence,{present:r||n.open,children:n.modal?s.jsx(ne,{...i,ref:t}):s.jsx(re,{...i,ref:t})})});N.displayName=d;var ne=a.forwardRef((e,t)=>{const o=u(d,e.__scopeDialog),r=a.useRef(null),i=C.useComposedRefs(t,o.contentRef,r);return a.useEffect(()=>{const n=r.current;if(n)return Z.hideOthers(n)},[]),s.jsx(q,{...e,ref:i,trapFocus:o.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:f.composeEventHandlers(e.onCloseAutoFocus,n=>{n.preventDefault(),o.triggerRef.current?.focus()}),onPointerDownOutside:f.composeEventHandlers(e.onPointerDownOutside,n=>{const l=n.detail.originalEvent,c=l.button===0&&l.ctrlKey===!0;(l.button===2||c)&&n.preventDefault()}),onFocusOutside:f.composeEventHandlers(e.onFocusOutside,n=>n.preventDefault())})}),re=a.forwardRef((e,t)=>{const o=u(d,e.__scopeDialog),r=a.useRef(!1),i=a.useRef(!1);return s.jsx(q,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:n=>{e.onCloseAutoFocus?.(n),n.defaultPrevented||(r.current||o.triggerRef.current?.focus(),n.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:n=>{e.onInteractOutside?.(n),n.defaultPrevented||(r.current=!0,n.detail.originalEvent.type==="pointerdown"&&(i.current=!0));const l=n.target;o.triggerRef.current?.contains(l)&&n.preventDefault(),n.detail.originalEvent.type==="focusin"&&i.current&&n.preventDefault()}})}),q=a.forwardRef((e,t)=>{const{__scopeDialog:o,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:n,...l}=e,c=u(d,o),g=a.useRef(null),v=C.useComposedRefs(t,g);return U.useFocusGuards(),s.jsxs(s.Fragment,{children:[s.jsx(z.FocusScope,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:n,children:s.jsx(V.DismissableLayer,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":A(c.open),...l,ref:v,onDismiss:()=>c.onOpenChange(!1)})}),s.jsxs(s.Fragment,{children:[s.jsx(se,{titleId:c.titleId}),s.jsx(ce,{contentRef:g,descriptionId:c.descriptionId})]})]})}),b="DialogTitle",I=a.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,i=u(b,o);return s.jsx(p.Primitive.h2,{id:i.titleId,...r,ref:t})});I.displayName=b;var $="DialogDescription",T=a.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,i=u($,o);return s.jsx(p.Primitive.p,{id:i.descriptionId,...r,ref:t})});T.displayName=$;var W="DialogClose",j=a.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,i=u(W,o);return s.jsx(p.Primitive.button,{type:"button",...r,ref:t,onClick:f.composeEventHandlers(e.onClick,()=>i.onOpenChange(!1))})});j.displayName=W;function A(e){return e?"open":"closed"}var k="DialogTitleWarning",[ie,G]=M.createContext(k,{contentName:d,titleName:b,docsSlug:"dialog"}),se=({titleId:e})=>{const t=G(k),o=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
2
-
3
- If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
4
-
5
- For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return a.useEffect(()=>{e&&(document.getElementById(e)||console.error(o))},[o,e]),null},ae="DialogDescriptionWarning",ce=({contentRef:e,descriptionId:t})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${G(ae).contentName}}.`;return a.useEffect(()=>{const i=e.current?.getAttribute("aria-describedby");t&&i&&(document.getElementById(t)||console.warn(r))},[r,e,t]),null},le=_,ue=y,de=O,ge=h,fe=N,pe=I,De=T,ve=j;exports.Close=ve;exports.Content=fe;exports.Description=De;exports.Dialog=_;exports.DialogClose=j;exports.DialogContent=N;exports.DialogDescription=T;exports.DialogOverlay=h;exports.DialogPortal=O;exports.DialogTitle=I;exports.DialogTrigger=y;exports.Overlay=ge;exports.Portal=de;exports.Root=le;exports.Title=pe;exports.Trigger=ue;exports.WarningProvider=ie;exports.createDialogScope=X;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),l=require("react-dom"),f=require("./index.cjs34.js"),d=require("react/jsx-runtime");function n(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const i in e)if(i!=="default"){const r=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,r.get?r:{enumerable:!0,get:()=>e[i]})}}return t.default=e,Object.freeze(t)}const p=n(u),m=n(l);var v=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","span","svg","ul"],b=v.reduce((e,t)=>{const i=p.forwardRef((r,o)=>{const{asChild:c,...s}=r,a=c?f.Slot:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),d.jsx(a,{...s,ref:o})});return i.displayName=`Primitive.${t}`,{...e,[t]:i}},{});function y(e,t){e&&m.flushSync(()=>e.dispatchEvent(t))}exports.Primitive=b;exports.dispatchDiscreteCustomEvent=y;
6
2
  //# sourceMappingURL=index.cjs55.js.map