{"version":3,"file":"index.esm.mjs","sources":["../src/enums.ts","../src/schemas/documents/form-entry.ts","../src/schemas/common.ts","../src/schemas/documents/form.ts","../src/schemas/objects/form-checkbox-group.ts","../src/schemas/objects/form-checkbox.ts","../src/components/select-field/select-field.tsx","../src/helpers.ts","../src/schemas/objects/form-field.ts","../src/schemas/objects/form-group.ts","../src/schemas/objects/form-radio-button-group.ts","../src/schemas/objects/form-radio-button.ts","../src/components/default-toggle/default-toggle.tsx","../src/schemas/objects/form-select.ts","../src/schemas/objects/form-textarea.ts","../src/schemas/objects/module/form-module.ts","../src/index.ts"],"sourcesContent":["import {z} from 'zod'\n\nexport const FormDocumentTypeEnum = z.enum(['formEntry', 'baseForm'])\nexport const FormFieldEnum = z.enum([\n  'formField',\n  'formSelect',\n  'formTextarea',\n  'formGroupedCheckbox',\n  'formCheckbox',\n  'formCheckboxGroup',\n  'formRadioButton',\n  'formRadioButtonGroup',\n  'formGroup',\n])\n","import {RiDatabaseLine} from 'react-icons/ri'\nimport {defineArrayMember, defineField, defineType} from 'sanity'\n\nimport {FormDocumentTypeEnum} from '../../enums'\n\nexport default defineType({\n  name: FormDocumentTypeEnum.enum.formEntry,\n  title: 'Form Entries',\n  type: 'document',\n  icon: RiDatabaseLine,\n  fields: [\n    defineField({\n      name: 'formTitle',\n      type: 'string',\n      title: 'Form Title',\n      readOnly: true,\n      hidden: true,\n    }),\n    defineField({\n      name: 'formRef',\n      type: 'reference',\n      to: [{type: FormDocumentTypeEnum.enum.baseForm}],\n      readOnly: true,\n    }),\n    defineField({\n      name: 'fields',\n      type: 'array',\n      of: [\n        defineArrayMember({\n          name: 'field',\n          title: 'Field',\n          type: 'object',\n          fields: [\n            defineField({\n              name: 'label',\n              title: 'Field Label',\n              type: 'string',\n            }),\n            defineField({\n              name: 'value',\n              title: 'Field Value',\n              type: 'string',\n            }),\n          ],\n          preview: {\n            select: {\n              title: 'label',\n              subtitle: 'value',\n            },\n            prepare({title, subtitle}) {\n              return {\n                title: title as string,\n                subtitle: subtitle as string,\n              }\n            },\n          },\n        }),\n      ],\n      title: 'Form Data',\n      readOnly: true,\n    }),\n  ],\n  preview: {\n    select: {\n      title: 'formTitle',\n    },\n    prepare({title}) {\n      return {\n        title: `Form Submission`,\n        subtitle: `${title}`,\n      }\n    },\n  },\n})\n","import {defineArrayMember, defineField} from 'sanity'\n\nimport {FormFieldEnum} from '../enums'\n\nexport const formCommon = [\n  defineField({\n    name: 'fieldLabel',\n    title: 'Field Label',\n    type: 'string',\n    description: 'Text label that describes this field',\n    validation: (Rule) => Rule.required(),\n  }),\n  defineField({\n    title: 'Required Field',\n    name: 'required',\n    type: 'boolean',\n    initialValue: false,\n\n    hidden: ({parent}) => {\n      const {formGroupedCheckbox, formRadioButton} = FormFieldEnum.enum\n      if (parent._type === formGroupedCheckbox || parent._type === formRadioButton) {\n        return true\n      }\n      return false\n    },\n  }),\n]\n\n/** Retrieve the custom form field types */\nexport function getFormFields() {\n  return FormFieldEnum.options\n    .filter((item) => {\n      const {formRadioButton, formGroupedCheckbox} = FormFieldEnum.enum\n      // Remove the checkboxes and radio buttons of the grouped modules\n      if (item === formRadioButton || item === formGroupedCheckbox) {\n        return false\n      }\n      return true\n    })\n    .map((field) => defineArrayMember({type: field}))\n}\n","import {RiPencilLine} from 'react-icons/ri'\nimport {defineArrayMember, defineField, defineType} from 'sanity'\nimport {z} from 'zod'\n\nimport {FormDocumentTypeEnum} from '../../enums'\nimport {getFormFields} from '../common'\n\nconst emailFieldSchema = z.array(z.string().email())\n\nexport default defineType({\n  name: FormDocumentTypeEnum.enum.baseForm,\n  title: 'Form',\n  type: 'document',\n  icon: RiPencilLine,\n  fields: [\n    defineField({\n      name: 'formTitle',\n      title: 'Form Title',\n      description: 'The title of the form',\n      type: 'string',\n      validation: (Rule) => Rule.required(),\n    }),\n    defineField({\n      name: 'description',\n      title: 'Form description',\n      description: 'A short description about this form',\n      type: 'text',\n    }),\n    defineField({\n      name: 'emailTo',\n      title: 'Email To',\n      description: 'The email address(s) to which this form will be sent to',\n      type: 'array',\n      of: [defineArrayMember({type: 'string'})],\n      options: {\n        layout: 'tags',\n      },\n      validation: (Rule) =>\n        Rule.custom((values) => {\n          if (!values) return 'Please enter at least one email address'\n\n          if (!emailFieldSchema.safeParse(values).success) {\n            return 'Please ensure all items are valid email addresses'\n          }\n\n          return true\n        }),\n    }),\n    defineField({\n      name: 'emailSubject',\n      title: 'Email Subject',\n      description: 'Custom email subject',\n      type: 'string',\n    }),\n    defineField({\n      name: 'customFormFields',\n      title: 'Form Fields',\n      description: 'Add custom form fields',\n      type: 'array',\n      of: [...getFormFields()],\n    }),\n  ],\n})\n","import {RiListCheck3} from 'react-icons/ri'\nimport {defineField, defineType} from 'sanity'\n\nimport {FormFieldEnum} from '../../enums'\n\nexport interface Checkbox {\n  _key: string\n  checkedDefault?: boolean\n  value: string\n}\n\nexport default defineType({\n  name: FormFieldEnum.enum.formCheckboxGroup,\n  title: 'Checkbox Group',\n  type: 'object',\n  icon: RiListCheck3,\n  fields: [\n    defineField({\n      name: 'label',\n      title: 'Label',\n      description: 'A label for the group',\n      type: 'string',\n    }),\n    defineField({\n      title: 'Require a checkbox to checked before submission',\n      name: 'required',\n      type: 'boolean',\n      initialValue: false,\n    }),\n    defineField({\n      title: 'Field Hint Message',\n      name: 'fieldHintMessage',\n      type: 'string',\n      description: 'A message to help user understand the field (optional)',\n    }),\n    defineField({\n      title: 'Field Error Message',\n      name: 'fieldErrorMessage',\n      type: 'string',\n      description: 'Default error message if validation fails e.g. This field is required',\n      hidden: ({parent}: {parent?: {required?: boolean}}) => !parent?.required,\n    }),\n    defineField({\n      name: 'fields',\n      type: 'array',\n      of: [{type: FormFieldEnum.enum.formCheckbox, name: FormFieldEnum.enum.formGroupedCheckbox}],\n      validation: (rule) =>\n        rule.custom((items: Checkbox[] | undefined) => {\n          if (!items || items.length === 0) {\n            return 'Needs to have at least one option'\n          }\n\n          // Defensive: ensure items is always an array\n          const arr = Array.isArray(items) ? items : []\n\n          // Verify that options values are unique\n          const fieldNames = new Set(\n            arr.map((item) => (item && typeof item === 'object' ? item.value : undefined)),\n          )\n          if ([...fieldNames].filter(Boolean).length < arr.length) {\n            return {\n              message: 'Multiple items have the same value',\n            }\n          }\n          return true\n        }),\n    }),\n  ],\n})\n","import {RiCheckboxLine} from 'react-icons/ri'\nimport {defineField, defineType} from 'sanity'\n\nimport {FormFieldEnum} from '../../enums'\nimport {formCommon} from '../common'\n\nexport default defineType({\n  name: FormFieldEnum.enum.formCheckbox,\n  title: 'Checkbox',\n  type: 'object',\n  icon: RiCheckboxLine,\n  fields: [\n    ...formCommon,\n    defineField({\n      title: 'Value',\n      name: 'value',\n      type: 'string',\n      description: 'The value this checkbox represents',\n      validation: (Rule) => Rule.required(),\n    }),\n    defineField({\n      title: 'Default Checked',\n      name: 'checkedDefault',\n      description: 'Set this to be the initially checked',\n      type: 'boolean',\n      initialValue: false,\n    }),\n    defineField({\n      title: 'Field Hint Message',\n      name: 'fieldHintMessage',\n      type: 'string',\n      description: 'A message to help user understand the field (optional)',\n      deprecated: {\n        reason: `The \"Field Hint Message\" field is deprecated and will be removed in a future release.`,\n      },\n      hidden: ({parent}: {parent?: {fieldHintMessage?: string}}) => !parent?.fieldHintMessage,\n    }),\n    defineField({\n      title: 'Field Error Message',\n      name: 'fieldErrorMessage',\n      type: 'string',\n      description: 'Default error message if validation fails e.g. This field is required',\n      hidden: ({parent}: {parent?: {_type?: string; required?: boolean}}) =>\n        parent?._type === FormFieldEnum.enum.formGroupedCheckbox || !parent?.required,\n    }),\n  ],\n  preview: {\n    select: {\n      title: 'fieldLabel',\n      defaultChecked: 'checkedDefault',\n    },\n    prepare({title, defaultChecked}) {\n      return {\n        title: title as string,\n        subtitle: defaultChecked ? 'This option is selected by default' : '',\n      }\n    },\n  },\n})\n","/**\n * Select field\n *\n * An alternative to Sanity's select field which has a blank option that cannot be removed.\n */\n\nimport {Card, Select, Stack} from '@sanity/ui'\nimport {type FormEvent, useCallback} from 'react'\nimport {set, type StringInputProps} from 'sanity'\n\ninterface SelectItemType {\n  title: string\n  value: string\n}\n\ninterface SelectOptions {\n  list: SelectItemType[]\n}\n\nexport const SelectField = (props: StringInputProps) => {\n  const {value, onChange, schemaType} = props\n  const options = schemaType.options as SelectOptions\n  const list = options?.list\n\n  const handleSelectChange = useCallback(\n    (event: FormEvent<HTMLSelectElement>) => {\n      const target = event.target as HTMLSelectElement\n      onChange(set(target.value))\n    },\n    [onChange],\n  )\n\n  return (\n    <Card>\n      <Stack>\n        <Select defaultValue={value} onChange={(e) => handleSelectChange(e)}>\n          {list?.map((listItem: SelectItemType, index: number) => {\n            return (\n              <option key={`${listItem.value}-${index}`} value={listItem.value}>\n                {listItem.title}\n              </option>\n            )\n          })}\n        </Select>\n      </Stack>\n    </Card>\n  )\n}\n","export const captialise = (string: string) => {\n  return string[0].toUpperCase() + string.slice(1)\n}\n","import {IconType} from 'react-icons'\nimport {\n  RiAtLine,\n  RiCalendarLine,\n  RiEyeOffLine,\n  RiNumber7,\n  RiPhoneLine,\n  RiText,\n  RiTimeLine,\n} from 'react-icons/ri'\nimport {TbWorldWww} from 'react-icons/tb'\nimport {defineField, defineType} from 'sanity'\n\nimport {SelectField} from '../../components/select-field'\nimport {FormFieldEnum} from '../../enums'\nimport {captialise} from '../../helpers'\nimport {formCommon} from '../common'\n\nconst fieldTypeOptions = [\n  {title: 'Text', value: 'text'},\n  {title: 'Email', value: 'email'},\n  {title: 'Telephone', value: 'tel'},\n  {title: 'Number', value: 'number'},\n  {title: 'URL', value: 'url'},\n  {title: 'Hidden', value: 'hidden'},\n  {title: 'Date', value: 'date'},\n  {title: 'Time', value: 'time'},\n]\n\n/** Alter the subtitle text label by the input type */\nconst labelSubtitleController = (type: string): string => {\n  switch (type) {\n    case 'url':\n      return type.toUpperCase()\n    case 'tel':\n      return 'Phone'\n    default:\n      return captialise(type)\n  }\n}\n\n/** Alter the icon by the input type */\nconst iconController = (type: string): IconType => {\n  switch (type) {\n    case 'email':\n      return RiAtLine\n    case 'tel':\n      return RiPhoneLine\n    case 'number':\n      return RiNumber7\n    case 'url':\n      return TbWorldWww\n    case 'date':\n      return RiCalendarLine\n    case 'time':\n      return RiTimeLine\n    case 'hidden':\n      return RiEyeOffLine\n    default:\n      return RiText\n  }\n}\n\nexport default defineType({\n  name: FormFieldEnum.enum.formField,\n  title: 'Form Input',\n  type: 'object',\n  icon: RiText,\n  fields: [\n    ...formCommon,\n    defineField({\n      name: 'fieldType',\n      title: 'Field Type',\n      description: 'Select a field type i.e. text, email, tel, number',\n      type: 'string',\n      components: {\n        input: SelectField,\n      },\n      options: {\n        list: fieldTypeOptions,\n      },\n      initialValue: 'text',\n      validation: (Rule) => Rule.required(),\n    }),\n\n    // Email field options\n    defineField({\n      title: `Add as 'reply-to' email`,\n      name: 'replyToEmail',\n      type: 'boolean',\n      hidden: ({parent}: {parent: {fieldType: string}}) => parent.fieldType !== 'email',\n    }),\n\n    // Number field options\n    defineField({\n      title: `Minimum Number`,\n      name: 'minNumber',\n      type: 'number',\n      hidden: ({parent}: {parent: {fieldType: string}}) => parent.fieldType !== 'number',\n      validation: (rule) =>\n        rule.min(1).custom((value, context) => {\n          const {maxNumber} = context.parent as {maxNumber?: number}\n          if (value !== undefined && maxNumber !== undefined && value > maxNumber) {\n            return 'Minimum must be less than or equal to Maximum'\n          }\n          return true\n        }),\n    }),\n    defineField({\n      title: `Maximum Number`,\n      name: 'maxNumber',\n      type: 'number',\n      hidden: ({parent}: {parent: {fieldType: string}}) => parent.fieldType !== 'number',\n      validation: (rule) =>\n        rule.custom((value, context) => {\n          const {minNumber} = context.parent as {minNumber?: number}\n          if (value !== undefined && minNumber !== undefined && value < minNumber) {\n            return 'Maximum must be greater than or equal to Minimum'\n          }\n          return true\n        }),\n    }),\n\n    // Hidden field options\n    defineField({\n      title: `Custom Value`,\n      name: 'hiddenFieldValue',\n      type: 'string',\n      hidden: ({parent}: {parent: {fieldType: string}}) => parent.fieldType !== 'hidden',\n    }),\n\n    defineField({\n      title: 'Field Placeholder',\n      name: 'fieldPlaceholder',\n      type: 'string',\n      description: 'Placeholder text (optional)',\n    }),\n    defineField({\n      title: 'Field Hint Message',\n      name: 'fieldHintMessage',\n      type: 'string',\n      description: 'A message to help user understand the field (optional)',\n    }),\n    defineField({\n      title: 'Field Error Message',\n      name: 'fieldErrorMessage',\n      type: 'string',\n      description: 'Default error message if validation fails e.g. This field is required',\n    }),\n  ],\n  preview: {\n    select: {\n      title: 'fieldLabel',\n      type: 'fieldType',\n    },\n    prepare({title, type}) {\n      const mediaIcon = iconController(type)\n      return {\n        title: `Input - ${title}`,\n        subtitle: `Type - ${labelSubtitleController(type)}`,\n        media: mediaIcon,\n      }\n    },\n  },\n})\n","import {RiBillLine} from 'react-icons/ri'\nimport {defineField, defineType} from 'sanity'\n\nimport {FormFieldEnum} from '../../enums'\nimport {getFormFields} from '../common'\n\n/** Remove the 'Form Group' option from the list fields you're able to insert */\nconst filteredFields = getFormFields().filter(function (field) {\n  return field.type !== FormFieldEnum.enum.formGroup\n})\n\nexport default defineType({\n  name: FormFieldEnum.enum.formGroup,\n  title: 'Group',\n  type: 'object',\n  icon: RiBillLine,\n  fields: [\n    defineField({\n      name: 'label',\n      title: 'Label',\n      description: 'A label for the group',\n      type: 'string',\n      validation: (Rule) => Rule.required(),\n    }),\n    defineField({\n      name: 'description',\n      title: 'Description',\n      description: 'A short description about this group of fields (optional)',\n      type: 'string',\n    }),\n    defineField({\n      name: 'fields',\n      type: 'array',\n      of: filteredFields,\n    }),\n  ],\n  preview: {\n    select: {\n      title: 'label',\n    },\n    prepare({title}: {title: string; subtitle?: string}) {\n      return {\n        title: title as string,\n        subtitle: 'A group of fields',\n      }\n    },\n  },\n})\n","import {RiListRadio} from 'react-icons/ri'\nimport {defineField, defineType, isKeyedObject} from 'sanity'\n\nimport {FormFieldEnum} from '../../enums'\n\nexport interface RadioButton {\n  _key: string\n  checkedDefault?: boolean\n  value: string\n}\n\nexport default defineType({\n  name: FormFieldEnum.enum.formRadioButtonGroup,\n  title: 'Radio Button Group',\n  type: 'object',\n  icon: RiListRadio,\n  fields: [\n    defineField({\n      name: 'label',\n      title: 'Label',\n      description: 'A label for the group',\n      type: 'string',\n    }),\n    defineField({\n      title: 'Require a radio button to be selected before submission',\n      name: 'required',\n      type: 'boolean',\n      initialValue: false,\n    }),\n    defineField({\n      title: 'Field Hint Message',\n      name: 'fieldHintMessage',\n      type: 'string',\n      description: 'A message to help user understand the field (optional)',\n    }),\n    defineField({\n      title: 'Field Error Message',\n      name: 'fieldErrorMessage',\n      type: 'string',\n      description: 'Default error message if validation fails e.g. This field is required',\n      hidden: ({parent}: {parent?: {required?: boolean}}) => !parent?.required,\n    }),\n    defineField({\n      name: 'fields',\n      type: 'array',\n      of: [{type: FormFieldEnum.enum.formRadioButton}],\n      validation: (rule) =>\n        rule.custom((items: RadioButton[] | undefined) => {\n          if (!items || items.length === 0) {\n            return 'Needs to have at least one option'\n          }\n\n          // Defensive: ensure items is always an array\n          const arr = Array.isArray(items) ? items : []\n          // Only one radio button can be default\n          const featuredItems = arr.filter(\n            (item) => item && typeof item === 'object' && item.checkedDefault === true,\n          )\n\n          if (featuredItems.length > 1) {\n            return {\n              paths: featuredItems.filter(isKeyedObject).map((item) => [{_key: item._key}]),\n              message: 'Only one option can be set as default',\n            }\n          }\n          // Verify that options values are unique\n          const fieldNames = new Set(\n            arr.map((item) => (item && typeof item === 'object' ? item.value : undefined)),\n          )\n          if ([...fieldNames].filter(Boolean).length < arr.length) {\n            return {\n              message: 'Multiple items have the same value',\n            }\n          }\n          return true\n        }),\n    }),\n  ],\n})\n","import {RiRadioButtonFill} from 'react-icons/ri'\nimport {defineField, defineType} from 'sanity'\n\nimport {FormFieldEnum} from '../../enums'\nimport {formCommon} from '../common'\n\nexport default defineType({\n  name: FormFieldEnum.enum.formRadioButton,\n  title: 'Radio Button',\n  type: 'object',\n  icon: RiRadioButtonFill,\n  fields: [\n    ...formCommon,\n    defineField({\n      title: 'Value',\n      name: 'value',\n      type: 'string',\n      description: 'The value this radio button represents',\n      validation: (Rule) => Rule.required(),\n    }),\n    defineField({\n      title: 'Default Checked',\n      name: 'checkedDefault',\n      description: 'Set this to be the initially checked',\n      type: 'boolean',\n      initialValue: false,\n    }),\n  ],\n  preview: {\n    select: {\n      title: 'fieldLabel',\n      defaultChecked: 'checkedDefault',\n    },\n    prepare({title, defaultChecked}) {\n      return {\n        title: title as string,\n        subtitle: defaultChecked ? 'This option is selected by default' : '',\n      }\n    },\n  },\n})\n","import {Box, Flex, Switch, Text, Tooltip} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {type ObjectItemProps, PatchEvent, set, useFormValue} from 'sanity'\nimport {useDocumentPane} from 'sanity/structure'\n\nimport {SelectOption} from '../../schemas/objects/form-select'\n\nexport function DefaultToggleItem(props: ObjectItemProps<SelectOption>) {\n  const {value, path} = props\n\n  // Item props don't have `onChange`, but we can get it from useDocumentPane()\n  // This hook is currently marked internal - be aware that this can break in\n  // future Studio updates\n  const {onChange} = useDocumentPane()\n\n  // Get the parent array to check if any other items are set as default\n  const parentPath = path.slice(0, -1)\n  const allItems = useFormValue(parentPath) as SelectOption[]\n\n  const handleClick = useCallback(() => {\n    const nextValue = !value?.optionDefault\n    const clickedFeaturedPath = [...path, 'optionDefault']\n    const otherFeaturedPaths = allItems.length\n      ? allItems\n          ?.filter((p) => p._key !== value?._key && p.optionDefault)\n          .map((p) => [...parentPath, {_key: p._key}, 'optionDefault'])\n      : []\n\n    // Because onChange came from useDocumentPane\n    // we need to wrap it in a PatchEvent\n    // and supply the path to the field\n    onChange(\n      PatchEvent.from([\n        // Update this field\n        set(nextValue, clickedFeaturedPath),\n        // Maybe update other fields\n        ...otherFeaturedPaths.map((otherPath) => set(false, otherPath)),\n      ]),\n    )\n  }, [value?.optionDefault, value?._key, path, allItems, onChange, parentPath])\n\n  return (\n    <Flex gap={3} paddingRight={2} align=\"center\">\n      <Box flex={1}>{props.renderDefault(props)}</Box>\n      <Tooltip\n        content={\n          <Box padding={2}>\n            <Text muted size={1}>\n              {`Set as default option`}\n            </Text>\n          </Box>\n        }\n        fallbackPlacements={['right', 'left']}\n        placement=\"top\"\n        portal\n      >\n        <Switch checked={value?.optionDefault} onClick={handleClick} />\n      </Tooltip>\n    </Flex>\n  )\n}\n","import {RiCheckLine, RiNavigationLine, RiStarFill} from 'react-icons/ri'\nimport {defineArrayMember, defineField, defineType, isKeyedObject} from 'sanity'\n\nimport {DefaultToggleItem} from '../../components/default-toggle'\nimport {FormFieldEnum} from '../../enums'\nimport {formCommon} from '../common'\n\nexport interface SelectOption {\n  _key: string\n  optionDefault?: boolean\n  optionValue?: string\n}\n\nexport default defineType({\n  name: FormFieldEnum.enum.formSelect,\n  title: 'Select',\n  type: 'object',\n  icon: RiNavigationLine,\n  fields: [\n    ...formCommon,\n    defineField({\n      name: 'options',\n      title: 'Options',\n      description:\n        'List of options for dropdown. NOTE: only one value can be set as default/initial value',\n      type: 'array',\n      of: [\n        defineArrayMember({\n          type: 'object',\n          name: 'option',\n          icon: RiCheckLine,\n          components: {item: DefaultToggleItem},\n          fields: [\n            defineField({\n              title: 'Label',\n              name: 'optionLabel',\n              type: 'string',\n              validation: (Rule) => Rule.required(),\n            }),\n            defineField({\n              title: 'Value',\n              name: 'optionValue',\n              type: 'string',\n              validation: (Rule) => Rule.required(),\n            }),\n            defineField({\n              title: 'Default value',\n              name: 'optionDefault',\n              description: 'Set this to be the initial value selected on dropdown',\n              type: 'boolean',\n              initialValue: false,\n            }),\n          ],\n          preview: {\n            select: {\n              title: 'optionLabel',\n              optionDefault: 'optionDefault',\n            },\n            prepare: ({title, optionDefault}) => {\n              const mediaIcon = optionDefault ? RiStarFill : RiCheckLine\n              return {\n                title: `${title ?? `-`}`,\n                media: mediaIcon,\n                subtitle: optionDefault ? 'This option is selected by default' : undefined,\n              }\n            },\n          },\n        }),\n      ],\n      validation: (rule) =>\n        rule.custom((items) => {\n          // Confirm only one items is set as default\n          const featuredItems = (items ?? []).filter((item) => (item as SelectOption).optionDefault)\n\n          if (featuredItems.length > 1) {\n            return {\n              paths: featuredItems.filter(isKeyedObject).map((item) => [{_key: item._key}]),\n              message: 'Only one option can be set as default',\n            }\n          }\n\n          // Verify that options values are unique\n          const fieldNames = new Set(\n            (items ?? []).map((item) => (item as SelectOption).optionValue) ?? [],\n          )\n          if ([...fieldNames].length < (items ?? []).length) {\n            return {\n              message: 'Multiple items have the same value',\n            }\n          }\n          return true\n        }),\n    }),\n  ],\n  preview: {\n    select: {\n      title: 'fieldLabel',\n      options: 'options',\n    },\n    prepare({title, options}) {\n      const selectOptions = options as {\n        optionValue: string\n        optionLabel: string\n      }[]\n      return {\n        title: `Select - ${title}`,\n        subtitle: selectOptions.map((o) => o.optionLabel).join(', '),\n      }\n    },\n  },\n})\n","import {RiTextWrap} from 'react-icons/ri'\nimport {defineField, defineType} from 'sanity'\n\nimport {FormFieldEnum} from '../../enums'\nimport {formCommon} from '../common'\n\nexport default defineType({\n  name: FormFieldEnum.enum.formTextarea,\n  title: 'Textarea',\n  type: 'object',\n  icon: RiTextWrap,\n  fields: [\n    ...formCommon,\n    defineField({\n      title: 'Text Maximum Length',\n      name: 'fieldMaxLength',\n      type: 'number',\n      description: 'Maximum number of characters users can add',\n    }),\n    defineField({\n      title: 'Field Placeholder',\n      name: 'fieldPlaceholder',\n      type: 'string',\n      description: 'Placeholder text (optional)',\n    }),\n    defineField({\n      title: 'Field Hint Message',\n      name: 'fieldHintMessage',\n      type: 'string',\n      description: 'A message to help user understand the field (optional)',\n    }),\n    defineField({\n      title: 'Field Error Message',\n      name: 'fieldErrorMessage',\n      type: 'string',\n      description: 'Default error message if validation fails e.g. This field is required',\n    }),\n  ],\n  preview: {\n    select: {\n      title: 'fieldLabel',\n    },\n    prepare({title}) {\n      return {\n        title: `Textarea - ${title}`,\n      }\n    },\n  },\n})\n","import {RiPencilLine} from 'react-icons/ri'\nimport {defineField, defineType} from 'sanity'\n\nimport {FormDocumentTypeEnum} from '../../../enums'\n\nexport default defineType({\n  name: 'formModule',\n  type: 'object',\n  icon: RiPencilLine,\n  fields: [\n    defineField({\n      name: 'form',\n      type: 'reference',\n      to: [{type: FormDocumentTypeEnum.enum.baseForm}],\n    }),\n  ],\n  preview: {\n    select: {\n      title: 'form.formTitle',\n    },\n    prepare: ({title}: {title?: string}) => {\n      return {\n        title: 'Form',\n        subtitle: title,\n      }\n    },\n  },\n})\n","import {definePlugin, FieldDefinition} from 'sanity'\nimport {z} from 'zod'\nimport {FormDocumentTypeEnum, FormFieldEnum} from './enums.js'\nimport formEntryDocument from './schemas/documents/form-entry.js'\nimport formDocument from './schemas/documents/form.js'\nimport formCheckboxGroup from './schemas/objects/form-checkbox-group.js'\nimport formCheckboxType from './schemas/objects/form-checkbox.js'\nimport formFieldType from './schemas/objects/form-field.js'\nimport formGroup from './schemas/objects/form-group.js'\nimport formRadioButtonGroup from './schemas/objects/form-radio-button-group.js'\nimport formRadioButton from './schemas/objects/form-radio-button.js'\nimport formSelectType from './schemas/objects/form-select.js'\nimport formTextareaType from './schemas/objects/form-textarea.js'\nimport formModule from './schemas/objects/module/form-module.js'\n\n/**\n * Usage in `sanity.config.ts` (or .js)\n *\n * ```ts\n * import {defineConfig} from 'sanity'\n * import {FormBuilderPlugin} from 'sanity-plugin-form-builder'\n *\n * export default defineConfig({\n *   // ...\n *   plugins: [FormBuilderPlugin({})],\n * })\n * ```\n */\n\nconst schemaNameMap = {\n  textarea: 'formTextareaType',\n  input: 'formFieldType',\n  select: 'formSelectType',\n  checkbox: 'formCheckboxType',\n  checkboxGroup: 'formCheckboxGroup',\n  radioButtonGroup: 'formRadioButtonGroup',\n}\n\n// Represents a Sanity schema type with fields\ninterface SanitySchemaType {\n  name: string\n  title?: string\n  type?: string\n  fields: FieldDefinition<\n    | 'string'\n    | 'number'\n    | 'boolean'\n    | 'object'\n    | 'array'\n    | 'block'\n    | 'date'\n    | 'datetime'\n    | 'document'\n    | 'file'\n    | 'geopoint'\n    | 'image'\n    | 'reference'\n    | 'slug'\n    | 'text'\n    | 'url'\n    | 'email',\n    undefined\n  >[]\n  [key: string]: unknown\n}\n\n// For field overrides\ninterface FieldOverride extends Partial<SanitySchemaType> {\n  disableFields?: string[]\n  addFields?: Array<FieldDefinition>\n}\n\n// Plugin options\nexport interface FormBuilderPluginOptions {\n  override?: Partial<Record<keyof typeof schemaNameMap, FieldOverride>>\n  schemas?: string[]\n  disableSchemas?: (keyof typeof schemaNameMap)[]\n}\n\n/** Override the fields */\nconst applyFieldOverrides = (\n  baseType: SanitySchemaType,\n  overrides?: FieldOverride,\n): SanitySchemaType => {\n  if (!overrides) return baseType\n  let fields = baseType.fields\n\n  // Remove fields if disableFields is specified\n  if (overrides.disableFields) {\n    fields = fields.filter((f) => !overrides.disableFields!.includes(f.name))\n  }\n\n  // Add fields if addFields is specified\n  if (overrides.addFields && Array.isArray(overrides.addFields)) {\n    fields = [...fields, ...overrides.addFields]\n  }\n\n  return {\n    ...baseType,\n    ...overrides,\n    fields,\n  }\n}\n\nexport const FormBuilderPlugin = definePlugin<FormBuilderPluginOptions>(\n  ({override, schemas, disableSchemas}) => {\n    // Field overrides\n    const selectField = applyFieldOverrides(formSelectType, override?.select)\n    const inputField = applyFieldOverrides(formFieldType, override?.input)\n    const textareaField = applyFieldOverrides(formTextareaType, override?.textarea)\n    const checkboxField = applyFieldOverrides(formCheckboxType, override?.checkbox)\n    const checkboxGroupField = applyFieldOverrides(formCheckboxGroup, override?.checkboxGroup)\n    const radioButtonGroupField = applyFieldOverrides(\n      formRadioButtonGroup,\n      override?.radioButtonGroup,\n    )\n\n    // Base schemas\n    const baseSchemas = {\n      formDocument,\n      formEntryDocument,\n      formModule,\n      formRadioButton,\n      formGroup,\n    }\n\n    // Add the form field schemas along with the base schemas\n    const schemaMap: {[key: string]: unknown} = {\n      ...baseSchemas,\n      formSelectType: selectField,\n      formFieldType: inputField,\n      formTextareaType: textareaField,\n      formCheckboxType: checkboxField,\n      formCheckboxGroup: checkboxGroupField,\n      formRadioButtonGroup: radioButtonGroupField,\n    }\n\n    let types: unknown[]\n    if (schemas) {\n      // Add schemas\n      types = schemas.map((name) => schemaMap[name]).filter(Boolean)\n    } else if (disableSchemas) {\n      // Map logical names in disableSchemas to schema keys using schemaNameMap\n      const disabledKeys = new Set(\n        disableSchemas.map((key) => schemaNameMap[key as keyof typeof schemaNameMap] || key),\n      )\n      types = Object.entries(schemaMap)\n        .filter(([name]) => !disabledKeys.has(name))\n        .map(([, schema]) => schema)\n    } else {\n      types = Object.values(schemaMap)\n    }\n\n    return {\n      name: 'sanity-plugin-form-builder',\n      schema: {\n        types,\n      },\n    }\n  },\n)\n\nexport type {\n  BaseForm,\n  FormEntry,\n  FormEntryField,\n  FormCustomField,\n  FormGroupField,\n  FormField,\n  FormFieldInputType,\n  FormTextarea,\n  FormSelect,\n  FormSelectOption,\n  FormCheckbox,\n  FormGroupedCheckbox,\n  FormCheckboxGroup,\n  FormRadioButton,\n  FormRadioButtonGroup,\n  FormGroup,\n  FormModule,\n  SanityReference,\n} from './types.js'\n\nexport const FormBuilderEnums = {\n  documents: FormDocumentTypeEnum.enum,\n  fields: FormFieldEnum.enum,\n}\n\nexport type FormBuilderEnumsType = {\n  documents: z.infer<typeof FormDocumentTypeEnum>\n  fields: z.infer<typeof FormFieldEnum>\n}\n"],"names":["formRadioButton"],"mappings":"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"}