@sanity/personalization-plugin

3.0.53.0.6
dist/fieldExperiments.js.map
dist/fieldExperiments.js.mapDeleted
−1
Index: package/dist/fieldExperiments.js.map
===================================================================
--- package/dist/fieldExperiments.js.map
+++ package/dist/fieldExperiments.js.map
@@ -1,1 +0,0 @@
-{"version":3,"file":"fieldExperiments.js","names":["equal","createContext","useContext","useMemo","ObjectInputProps","useClient","useWorkspace","suspend","ExperimentContextProps","FieldPluginConfig","CONFIG_DEFAULT","fields","apiVersion","experimentNameOverride","variantNameOverride","variantId","variantArrayName","experimentId","ExperimentContext","experiments","useExperimentContext","ExperimentProps","experimentFieldPluginConfig","Required","ExperimentProvider","props","$","_c","t0","client","workspace","t1","Array","isArray","t2","context","t3","renderDefault","t4","Button","Inline","Stack","uuid","useCallback","useFormValue","ArrayInputProps","VariantType","useExperimentContext","ArrayInput","props","$","_c","experimentId","onItemAppend","t0","t1","variantId","variantName","fieldPath","path","slice","experimentValue","experiments","t2","variant","item","_key","id","_type","handleClick","T0","T1","t3","t4","t5","t6","filteredVariants","find","option","variants","values","value","Value","usedVariants","map","variant_0","renderDefault","arrayFunctions","_temp","variant_1","label","includes","t7","t8","CloseIcon","useCallback","useMemo","GiSoapExperiment","defineDocumentFieldAction","DocumentFieldActionItem","DocumentFieldActionProps","FormPatch","ObjectFieldProps","PatchEvent","set","unset","PatchStuff","onChange","patch","inputId","useAddExperimentAction","props","$","_c","active","experimentNameOverride","t0","handleAddAction","t1","t2","title","type","icon","onAction","renderAsButton","useRemoveExperimentAction","experimentId","variantNameOverride","activeId","experiment","variants","handleClearAction","createActions","removeAction","name","useAction","addAction","ExperimentField","inputProps","value","actionProps","actions","oldActions","t3","memoizedActions","t4","withActionProps","t5","renderDefault","Select","SanitySelect","ChangeEvent","FormPatch","PatchEvent","Path","StringInputProps","SelectOption","props","$","_c","value","onChange","elementProps","listOptions","handleChange","t0","Symbol","for","t1","t2","event","t3","t4","map","_temp","t5","optionValue","title","Card","Text","ChangeEvent","useCallback","useMemo","FormPatch","getPublishedId","PatchEvent","set","StringInputProps","unset","useDocumentOperation","useFormValue","ExperimentType","useExperimentContext","Select","SelectOption","title","value","formatlistOptions","experiments","map","experiment","label","id","ExperimentInput","props","$","_c","t0","Symbol","for","t1","path","variantNameOverride","slice","additionalChangePath","subValues","t2","patch","schemaType","name","t3","event","onChange","inputValue","currentTarget","patchEvent","join","execute","handleChange","length","t4","t5","t6","experimentNameOverride","ObjectItem","ObjectItemProps","set","ExperimentItem","props","active","value","inputProps","onChange","renderDefault","Button","Inline","Stack","ObjectInputProps","set","useFormValue","VariantInput","props","$","_c","t0","t1","path","experimentPath","slice","defaultValue","t2","onChange","handleClick","t3","renderDefault","t4","t5","useEffect","useState","isImage","isReference","ObjectSchemaType","PreviewProps","ReferenceSchemaType","useClient","VariantPreviewProps","useExperimentContext","VariantPreview","props","$","_c","subtitle","setSubtitle","undefined","title","setTitle","media","setMedia","t0","Symbol","for","apiVersion","client","experiments","experiment","variant","value","selectedExperiment","t1","t2","experimentItem","id","find","variants","variantItem","selectedVariant","schemaType","label","getSubtitle","doc","getDocument","_ref","type","valueField","fields","_temp","referenceField","referenceType","to","field_0","field","name","_type","selectFields","Record","previewFields","preview","select","Object","keys","forEach","key","valueKey","split","reduce","_temp2","previewContent","prepare","t3","t4","t5","t6","previewProps","renderDefault","acc","index","isDocumentSchemaType","ObjectField","Path","SchemaType","ObjectFieldWithPath","flattenSchemaType","schemaType","console","error","extractInnerFields","fields","path","maxDepth","length","result","field","push","name","type","jsonType","arrayTypes","of","arrayType","ArrayOfObjectsInputProps","defineField","definePlugin","defineType","FieldDefinition","isObjectInputProps","ArrayInput","CONFIG_DEFAULT","ExperimentProvider","ExperimentField","ExperimentInput","ExperimentItem","VariantInput","VariantPreview","FieldPluginConfig","flattenSchemaType","createExperimentType","field","experimentNameOverride","variantNameOverride","variantId","variantArrayName","experimentId","typeName","name","usedName","String","toUpperCase","slice","variantName","type","components","props","item","fields","hidden","initialValue","input","parent","active","of","preview","select","base","experiment","prepare","title","experimentTitle","media","image","photo","subtitle","createVariantType","readOnly","variant","value","fieldSchema","Required","Omit","map","fieldLevelExperiments","config","pluginConfig","fieldSchemaConfig","schema","types","form","isRootInput","id","renderDefault","flatFields","schemaType","hasExperiment","some","startsWith","providerProps","experimentFieldPluginConfig"],"sources":["../src/components/ExperimentContext.tsx","../src/components/Array.tsx","../src/components/ExperimentField.tsx","../src/components/Select.tsx","../src/components/ExperimentInput.tsx","../src/components/ExperimentItem.tsx","../src/components/VariantInput.tsx","../src/components/VariantPreview.tsx","../src/utils/flattenSchemaType.ts","../src/fieldExperiments.tsx"],"sourcesContent":["import equal from 'fast-deep-equal'\nimport {createContext, useContext, useMemo} from 'react'\nimport {type ObjectInputProps, useClient, useWorkspace} from 'sanity'\nimport {suspend} from 'suspend-react'\n\nimport type {ExperimentContextProps, FieldPluginConfig} from '../types'\n\n// This provider makes the plugin config available to all components in the document form\n// But with experiments resolved\n\nexport const CONFIG_DEFAULT = {\n  fields: [],\n  apiVersion: '2024-11-07',\n  experimentNameOverride: 'experiment',\n  variantNameOverride: 'variant',\n  variantId: 'variantId',\n  variantArrayName: 'variants',\n  experimentId: 'experimentId',\n}\n\nconst ExperimentContext = createContext<ExperimentContextProps>({\n  ...CONFIG_DEFAULT,\n  experiments: [],\n})\n\nexport function useExperimentContext() {\n  return useContext(ExperimentContext)\n}\n\ntype ExperimentProps = ObjectInputProps & {\n  experimentFieldPluginConfig: Required<FieldPluginConfig>\n}\n\nexport function ExperimentProvider(props: ExperimentProps) {\n  const {experimentFieldPluginConfig} = props\n\n  const client = useClient({apiVersion: experimentFieldPluginConfig.apiVersion})\n  const workspace = useWorkspace()\n\n  // Fetch or return experiments\n  const experiments = Array.isArray(experimentFieldPluginConfig.experiments)\n    ? experimentFieldPluginConfig.experiments\n    : suspend(\n        async () => {\n          if (typeof experimentFieldPluginConfig.experiments === 'function') {\n            return experimentFieldPluginConfig.experiments(client)\n          }\n          return experimentFieldPluginConfig.experiments\n        },\n        [workspace],\n        {equal},\n      )\n\n  const context = useMemo(\n    () => ({...experimentFieldPluginConfig, experiments}),\n    [experimentFieldPluginConfig, experiments],\n  )\n\n  return (\n    <ExperimentContext.Provider value={context}>\n      {props.renderDefault(props)}\n    </ExperimentContext.Provider>\n  )\n}\n","import {Button, Inline, Stack} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback} from 'react'\nimport {useFormValue} from 'sanity'\n\nimport type {ArrayInputProps, VariantType} from '../types'\nimport {useExperimentContext} from './ExperimentContext'\n\nexport const ArrayInput = (props: ArrayInputProps) => {\n  const fieldPath = props.path.slice(0, -1)\n  const {onItemAppend, variantName, variantId, experimentId} = props\n  const experimentValue = useFormValue([...fieldPath, experimentId])\n\n  const {experiments} = useExperimentContext()\n\n  const handleClick = useCallback(\n    async (variant: VariantType) => {\n      const item = {\n        _key: uuid(),\n        [variantId]: variant.id,\n        [experimentId]: experimentValue,\n        _type: variantName,\n      }\n\n      // Patch the document\n      onItemAppend(item)\n    },\n    [variantId, experimentId, experimentValue, variantName, onItemAppend],\n  )\n\n  const filteredVariants =\n    experiments.find((option) => {\n      return option.id === experimentValue\n    })?.variants || []\n\n  type Value = {\n    value?: unknown\n    [key: string]: unknown\n    variantId: string\n    _key: string\n    _type: string\n  }\n\n  // there is probably some better was of getting the type of this?\n  const values = (props.value as Value[]) || []\n\n  const usedVariants = values?.map((variant) => variant[variantId])\n\n  return (\n    <Stack gap={3}>\n      {props.renderDefault({...props, arrayFunctions: () => null})}\n\n      <Inline gap={1}>\n        {filteredVariants.map((variant) => {\n          return (\n            <Button\n              key={`${experimentValue}-${variant.id}`}\n              text={`Add ${variant.label}`}\n              mode=\"ghost\"\n              disabled={usedVariants?.includes(variant.id)}\n              onClick={() => handleClick(variant)}\n            />\n          )\n        })}\n      </Inline>\n    </Stack>\n  )\n}\n","import {CloseIcon} from '@sanity/icons/Close'\nimport {useCallback, useMemo} from 'react'\nimport {GiSoapExperiment} from 'react-icons/gi'\nimport {\n  defineDocumentFieldAction,\n  type DocumentFieldActionItem,\n  type DocumentFieldActionProps,\n  type FormPatch,\n  type ObjectFieldProps,\n  type PatchEvent,\n  set,\n  unset,\n} from 'sanity'\ntype PatchStuff = {onChange: (patch: FormPatch | FormPatch[] | PatchEvent) => void; inputId: string}\n\nconst useAddExperimentAction = (\n  props: DocumentFieldActionProps &\n    PatchStuff & {experimentNameOverride: string; experimentId: string; active: boolean},\n): DocumentFieldActionItem => {\n  const {onChange, active, experimentNameOverride} = props\n\n  const handleAddAction = useCallback(() => {\n    onChange([set(!active, ['active'])])\n  }, [onChange, active])\n\n  return {\n    title: `Add ${experimentNameOverride}`,\n    type: 'action',\n    icon: GiSoapExperiment,\n    onAction: handleAddAction,\n    renderAsButton: true,\n  }\n}\n\nconst useRemoveExperimentAction = (\n  props: DocumentFieldActionProps &\n    PatchStuff & {\n      experimentNameOverride: string\n      experimentId: string\n      active: boolean\n      variantNameOverride: string\n    },\n): DocumentFieldActionItem => {\n  const {onChange, active, experimentId, experimentNameOverride, variantNameOverride} = props\n  const handleClearAction = useCallback(() => {\n    const activeId = ['active']\n    const experiment = [experimentId]\n    const variants = [`${variantNameOverride}s`]\n    onChange([set(!active, activeId), unset(experiment), unset(variants)])\n  }, [onChange, active, experimentId, variantNameOverride])\n\n  return {\n    title: `Remove ${experimentNameOverride}`,\n    type: 'action',\n    icon: CloseIcon,\n    onAction: handleClearAction,\n    renderAsButton: true,\n  }\n}\n\nconst createActions = ({\n  onChange,\n  inputId,\n  active,\n  experimentNameOverride,\n  experimentId,\n  variantNameOverride,\n}: PatchStuff & {\n  active?: boolean\n  experimentNameOverride: string\n  experimentId: string\n  variantNameOverride: string\n}) => {\n  const removeAction = defineDocumentFieldAction({\n    name: `Remove ${experimentNameOverride}`,\n    useAction: (props) =>\n      useRemoveExperimentAction({\n        ...props,\n        active: true,\n        onChange,\n        inputId,\n        experimentNameOverride,\n        experimentId,\n        variantNameOverride,\n      }),\n  })\n  const addAction = defineDocumentFieldAction({\n    name: `Add ${experimentNameOverride}`,\n    useAction: (props) =>\n      useAddExperimentAction({\n        ...props,\n        active: false,\n        onChange,\n        inputId,\n        experimentNameOverride,\n        experimentId,\n      }),\n  })\n  return active ? removeAction : addAction\n}\n\nexport const ExperimentField = (\n  props: ObjectFieldProps & {\n    experimentNameOverride: string\n    experimentId: string\n    variantNameOverride: string\n  },\n) => {\n  const {onChange} = props.inputProps\n  const {inputId, experimentNameOverride, experimentId, variantNameOverride} = props\n  const active = props.value?.['active'] as boolean | undefined\n\n  const actionProps = useMemo(\n    () => ({\n      onChange,\n      inputId,\n      active,\n      experimentNameOverride,\n      experimentId,\n      variantNameOverride,\n    }),\n    [onChange, inputId, active, experimentNameOverride, experimentId, variantNameOverride],\n  )\n\n  const memoizedActions = useMemo(() => {\n    const oldActions = props.actions || []\n    return [createActions(actionProps), ...oldActions]\n  }, [actionProps, props.actions])\n\n  const withActionProps = useMemo(\n    () => ({\n      ...props,\n      actions: memoizedActions,\n    }),\n    [props, memoizedActions],\n  )\n  return props.renderDefault(withActionProps)\n}\n","import {Select as SanitySelect} from '@sanity/ui'\nimport type {ChangeEvent} from 'react'\nimport type {FormPatch, PatchEvent, Path, StringInputProps} from 'sanity'\n\nimport type {SelectOption} from './ExperimentInput'\n\nexport const Select = (\n  props: StringInputProps & {\n    listOptions: SelectOption[]\n    handleChange: (\n      event: ChangeEvent<HTMLSelectElement>,\n      onChange: (patch: FormPatch | FormPatch[] | PatchEvent) => void,\n    ) => void\n    aditionalChangePath?: Path\n    clearSubValueOnChange?: boolean\n  },\n) => {\n  const {\n    value, // Current field value\n    onChange, // Method to handle patch events,\n    elementProps,\n    listOptions,\n    handleChange,\n  } = props\n\n  return (\n    <SanitySelect\n      {...elementProps}\n      fontSize={2}\n      padding={3}\n      gap={[3, 3, 4]}\n      value={value || ''} // Current field value\n      onChange={(event) => handleChange(event, onChange)} // A function to call when the input value changes\n    >\n      <option value={''}>{'Select an option...'}</option>\n      {listOptions.map(({value: optionValue, title}) => (\n        <option key={optionValue} value={optionValue}>\n          {title}\n        </option>\n      ))}\n    </SanitySelect>\n  )\n}\n","import {Card, Text} from '@sanity/ui'\nimport {type ChangeEvent, useCallback, useMemo} from 'react'\nimport {\n  type FormPatch,\n  getPublishedId,\n  type PatchEvent,\n  set,\n  type StringInputProps,\n  unset,\n  useDocumentOperation,\n  useFormValue,\n} from 'sanity'\n\nimport type {ExperimentType} from '..'\nimport {useExperimentContext} from './ExperimentContext'\nimport {Select} from './Select'\n\nexport type SelectOption = {title: string; value: string}\nconst formatlistOptions = (experiments: ExperimentType[]): SelectOption[] =>\n  experiments.map((experiment) => ({\n    title: experiment.label,\n    value: experiment.id,\n  }))\n\nexport const ExperimentInput = (\n  props: StringInputProps & {variantNameOverride: string; experimentNameOverride: string},\n) => {\n  const {experiments} = useExperimentContext()\n\n  const id = useFormValue(['_id']) as string\n  const additionalChangePath = useMemo(\n    () => [...props.path.slice(0, -1), `${props.variantNameOverride}s`],\n    [props.variantNameOverride, props.path],\n  )\n  const subValues = useFormValue(additionalChangePath)\n\n  const {patch} = useDocumentOperation(getPublishedId(id), props.schemaType.name)\n\n  const handleChange = useCallback(\n    (\n      event: ChangeEvent<HTMLSelectElement>,\n      onChange: (patchchange: FormPatch | FormPatch[] | PatchEvent) => void,\n    ) => {\n      const inputValue = event.currentTarget.value\n\n      if (inputValue) {\n        onChange(set(inputValue))\n      } else {\n        onChange(unset())\n      }\n\n      if (subValues) {\n        const patchEvent = {\n          unset: [additionalChangePath.join('.')],\n        }\n        patch.execute([patchEvent])\n      }\n    },\n    [patch, subValues, additionalChangePath],\n  )\n\n  if (!experiments.length)\n    return (\n      <Card padding={[3, 3, 4]} radius={2} shadow={1} tone=\"caution\">\n        <Text align=\"center\" size={[2, 2, 3]}>\n          There are no defined {props.experimentNameOverride}s\n        </Text>\n      </Card>\n    )\n\n  return (\n    <Select {...props} listOptions={formatlistOptions(experiments)} handleChange={handleChange} />\n  )\n}\n","import {type ObjectItem, type ObjectItemProps, set} from 'sanity'\n\nexport const ExperimentItem = (props: ObjectItemProps) => {\n  const {active} = props.value as ObjectItem & {active: boolean}\n  if (!active) {\n    props.inputProps.onChange(set(true, ['active']))\n  }\n\n  return props.renderDefault(props)\n}\n","import {Button, Inline, Stack} from '@sanity/ui'\nimport {type ObjectInputProps, set, useFormValue} from 'sanity'\n\nexport const VariantInput = (props: ObjectInputProps) => {\n  const experimentPath = props.path.slice(0, -2)\n  const defaultValue = useFormValue([...experimentPath, 'default'])\n  const handleClick = () => {\n    props.onChange(set(defaultValue, ['value']))\n  }\n  return (\n    <Stack gap={3}>\n      {props.renderDefault(props)}\n\n      <Inline gap={1}>\n        <Button text=\"Copy default\" mode=\"ghost\" onClick={() => handleClick()} />\n      </Inline>\n    </Stack>\n  )\n}\n","import {useEffect, useState} from 'react'\nimport {\n  isImage,\n  isReference,\n  type ObjectSchemaType,\n  type PreviewProps,\n  type ReferenceSchemaType,\n  useClient,\n} from 'sanity'\n\nimport type {VariantPreviewProps} from '../types'\nimport {useExperimentContext} from './ExperimentContext'\n\nexport const VariantPreview = (props: PreviewProps) => {\n  const [subtitle, setSubtitle] = useState<string | undefined>(undefined)\n  const [title, setTitle] = useState<string | undefined>(undefined)\n  const [media, setMedia] = useState<any>(undefined)\n  const client = useClient({apiVersion: '2025-01-01'})\n  const {experiments} = useExperimentContext()\n\n  const {experiment, variant, value} = props as VariantPreviewProps\n\n  const selectedExperiment = experiments.find((experimentItem) => {\n    return experimentItem.id === experiment\n  })\n\n  const selectedVariant = selectedExperiment?.variants.find((variantItem) => {\n    return variantItem.id === variant\n  })\n\n  useEffect(() => {\n    const getSubtitle = async () => {\n      setTitle(`${selectedExperiment?.label} - ${selectedVariant?.label}`)\n      if (typeof value === 'string') {\n        return setSubtitle(value)\n      }\n      if (isReference(value)) {\n        const doc = await client.getDocument(value._ref)\n        const type = props.schemaType as ObjectSchemaType\n        const valueField = type.fields.find((field) => field.name === 'value') as ObjectSchemaType\n        const referenceField = valueField?.type as ReferenceSchemaType\n        const referenceType = referenceField.to.find((field) => field.type?.name === doc?._type)\n\n        const selectFields = {} as Record<string, unknown>\n        const previewFields = referenceType?.preview?.select || {}\n        Object.keys(previewFields).forEach((key) => {\n          const valueKey = referenceType?.preview?.select?.[key]\n          selectFields[key] =\n            valueKey && doc\n              ? valueKey?.split('.').reduce((acc, index) => acc[index], doc)\n              : undefined\n        })\n\n        const previewContent = referenceType?.preview?.prepare?.(selectFields)\n        setMedia(previewContent?.media || selectFields['media'])\n        return setSubtitle(previewContent?.title || (selectFields['title'] as string))\n      }\n      if (isImage(value)) {\n        setMedia(value)\n      }\n      return ''\n    }\n    void getSubtitle()\n  }, [value, client, selectedExperiment?.label, selectedVariant?.label, props.schemaType])\n\n  const previewProps = {\n    ...props,\n    title: title,\n    subtitle: subtitle,\n    media: media,\n  }\n\n  return props.renderDefault(previewProps)\n}\n","import {isDocumentSchemaType, type ObjectField, type Path, type SchemaType} from 'sanity'\n\nimport type {ObjectFieldWithPath} from '../types'\n\n/**\n * Flattens a document's schema type into a flat array of fields and includes their path\n */\nexport function flattenSchemaType(schemaType: SchemaType): ObjectFieldWithPath[] {\n  if (!isDocumentSchemaType(schemaType)) {\n    console.error(`Schema type is not a document`)\n    return []\n  }\n\n  return extractInnerFields(schemaType.fields, [], 5)\n}\n\nfunction extractInnerFields(\n  fields: ObjectField[],\n  path: Path,\n  maxDepth: number,\n): ObjectFieldWithPath[] {\n  if (path.length >= maxDepth) {\n    return []\n  }\n\n  const result: ObjectFieldWithPath[] = []\n\n  for (const field of fields) {\n    result.push({path: [...path, field.name], ...field})\n\n    if (field.type.jsonType === 'object') {\n      result.push(...extractInnerFields(field.type.fields, [...path, field.name], maxDepth))\n    } else if (field.type.jsonType === 'array') {\n      // Handle array types by checking each possible type in the array\n      const arrayTypes = field.type.of || []\n      for (const arrayType of arrayTypes) {\n        if ('fields' in arrayType) {\n          result.push(...extractInnerFields(arrayType.fields, [...path, field.name], maxDepth))\n        }\n      }\n    }\n  }\n\n  return result\n}\n","import {\n  type ArrayOfObjectsInputProps,\n  defineField,\n  definePlugin,\n  defineType,\n  type FieldDefinition,\n  isObjectInputProps,\n} from 'sanity'\n\nimport {ArrayInput} from './components/Array'\nimport {CONFIG_DEFAULT, ExperimentProvider} from './components/ExperimentContext'\nimport {ExperimentField} from './components/ExperimentField'\nimport {ExperimentInput} from './components/ExperimentInput'\nimport {ExperimentItem} from './components/ExperimentItem'\nimport {VariantInput} from './components/VariantInput'\nimport {VariantPreview} from './components/VariantPreview'\nimport type {FieldPluginConfig} from './types'\nimport {flattenSchemaType} from './utils/flattenSchemaType'\n\nconst createExperimentType = ({\n  field,\n  experimentNameOverride,\n  variantNameOverride,\n  variantId,\n  variantArrayName,\n  experimentId,\n}: {\n  field: string | FieldDefinition\n  experimentNameOverride: string\n  variantNameOverride: string\n  variantId: string\n  variantArrayName: string\n  experimentId: string\n}) => {\n  const typeName = typeof field === `string` ? field : field.name\n  const usedName = String(typeName[0]).toUpperCase() + typeName.slice(1)\n  const variantName = `${variantNameOverride}${usedName}`\n\n  return defineType({\n    name: `${experimentNameOverride}${usedName}`,\n    type: 'object',\n    components: {\n      field: (props) => (\n        <ExperimentField\n          {...props}\n          experimentId={experimentId}\n          experimentNameOverride={experimentNameOverride}\n          variantNameOverride={variantNameOverride}\n        />\n      ),\n      item: ExperimentItem,\n    },\n    fields: [\n      typeof field === `string`\n        ? // Define a simple field if all we have is the name as a string\n          defineField({\n            name: 'default',\n            type: field,\n          })\n        : // Pass in the configured options, but overwrite the name\n          {\n            ...field,\n            name: 'default',\n          },\n      defineField({\n        name: 'active',\n        type: 'boolean',\n        hidden: true,\n        initialValue: false,\n      }),\n      defineField({\n        name: experimentId,\n        type: 'string',\n        components: {\n          input: (props) => (\n            <ExperimentInput\n              {...props}\n              experimentNameOverride={experimentNameOverride}\n              variantNameOverride={variantNameOverride}\n            />\n          ),\n        },\n        hidden: ({parent}) => {\n          return !parent?.active\n        },\n      }),\n      defineField({\n        name: variantArrayName,\n        type: 'array',\n        hidden: ({parent}) => {\n          return !parent?.[experimentId]\n        },\n        components: {\n          input: (props: ArrayOfObjectsInputProps) => (\n            <ArrayInput\n              {...props}\n              variantName={variantName}\n              variantId={variantId}\n              experimentId={experimentId}\n            />\n          ),\n        },\n        of: [\n          defineField({\n            name: variantName,\n            type: variantName,\n          }),\n        ],\n      }),\n    ],\n    preview: {\n      select: {\n        base: 'default',\n        experiment: experimentId,\n      },\n      prepare: ({base, experiment}) => {\n        const title = base?.title || base?.name || typeof base === 'string' ? base : ''\n        const experimentTitle = experiment ? `Experiment: ${experiment}` : ''\n        const media = base?.image || base?.photo || base?.media || ''\n        return {\n          title: title || experimentTitle,\n          subtitle: title ? experimentTitle : '',\n          media,\n        }\n      },\n    },\n  })\n}\n\nconst createVariantType = ({\n  field,\n  variantNameOverride,\n  variantId,\n  experimentId,\n}: {\n  field: string | FieldDefinition\n  variantNameOverride: string\n  variantId: string\n  experimentId: string\n}) => {\n  const typeName = typeof field === `string` ? field : field.name\n  const usedName = String(typeName[0]).toUpperCase() + typeName.slice(1)\n  return defineType({\n    name: `${variantNameOverride}${usedName}`,\n    title: `${variantNameOverride} array ${usedName}`,\n    type: 'object',\n    components: {\n      preview: VariantPreview,\n      input: VariantInput,\n    },\n    fields: [\n      {\n        type: 'string',\n        name: variantId,\n        readOnly: true,\n      },\n      {\n        type: 'string',\n        name: experimentId,\n        hidden: true,\n      },\n      typeof field === `string`\n        ? // Define a simple field if all we have is the name as a string\n          defineField({\n            name: 'value',\n            type: field,\n            // hidden: ({parent}) => !parent?.[`${objectNameOverride}Id`],\n          })\n        : // Pass in the configured options, but overwrite the name\n          {\n            ...field,\n            name: 'value',\n            // hidden: ({parent}) => !parent?.[`${objectNameOverride}Id`],\n          },\n    ],\n    preview: {\n      select: {\n        variant: variantId,\n        experiment: experimentId,\n        value: 'value',\n      },\n    },\n  })\n}\n\nconst fieldSchema = ({\n  fields,\n  experimentNameOverride,\n  variantNameOverride,\n  variantId,\n  variantArrayName,\n  experimentId,\n}: Required<Omit<FieldPluginConfig, 'apiVersion' | 'experiments'>>) => {\n  return [\n    ...fields.map((field) =>\n      createVariantType({field, variantNameOverride, variantId, experimentId}),\n    ),\n    ...fields.map((field) =>\n      createExperimentType({\n        field,\n        experimentNameOverride,\n        variantNameOverride,\n        variantId,\n        variantArrayName,\n        experimentId,\n      }),\n    ),\n  ]\n}\n\nexport const fieldLevelExperiments = definePlugin<FieldPluginConfig>((config) => {\n  const pluginConfig = {...CONFIG_DEFAULT, ...config}\n  const {fields, experimentNameOverride, variantNameOverride} = pluginConfig\n\n  const experimentId = `${experimentNameOverride}Id`\n  const variantArrayName = `${variantNameOverride}s`\n  const variantId = `${variantNameOverride}Id`\n\n  const fieldSchemaConfig = fieldSchema({\n    fields,\n    experimentNameOverride,\n    variantNameOverride,\n    variantId,\n    variantArrayName,\n    experimentId,\n  })\n  return {\n    name: 'sanity-personalistaion-plugin-field-level-experiments',\n    schema: {\n      types: fieldSchemaConfig,\n    },\n    form: {\n      components: {\n        input: (props) => {\n          const isRootInput = props.id === 'root' && isObjectInputProps(props)\n\n          if (!isRootInput) {\n            return props.renderDefault(props)\n          }\n\n          const flatFields = flattenSchemaType(props.schemaType)\n          const hasExperiment = flatFields.some(\n            (field) =>\n              field.type.name.startsWith(experimentNameOverride) ||\n              field.name.startsWith(experimentNameOverride),\n          )\n\n          if (!hasExperiment) {\n            return props.renderDefault(props)\n          }\n\n          const providerProps = {\n            ...props,\n            experimentFieldPluginConfig: {\n              ...pluginConfig,\n              variantId,\n              variantArrayName,\n              experimentId,\n            },\n          }\n          return ExperimentProvider(providerProps)\n        },\n      },\n    },\n  }\n})\n"],"mappings":";;;;;;;;;;AAUA,MAAaU,iBAAiB;CAC5BC,QAAQ,CAAA;CACRC,YAAY;CACZC,wBAAwB;CACxBC,qBAAqB;CACrBC,WAAW;CACXC,kBAAkB;CAClBC,cAAc;AAChB,GAEMC,oBAAoBjB,cAAsC;CAC9D,GAAGS;CACHS,aAAa,CAAA;AACf,CAAC;AAED,SAAOC,uBAAA;CAAA,OACElB,WAAWgB,iBAAiB;AAAC;AAOtC,SAAOM,mBAAAC,OAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GACL,EAAAL,gCAAsCG,OAAKG;CAAA,AAAAF,EAAA,OAAAJ,4BAAAV,aAEkCgB,KAAAF,EAAA,MAApDE,KAAA,EAAAhB,YAAaU,4BAA2BV,WAAW,GAACc,EAAA,KAAAJ,4BAAAV,YAAAc,EAAA,KAAAE;CAA7E,IAAAC,SAAexB,UAAUuB,EAAoD,GAC7EE,YAAkBxB,aAAa,GAACyB;CAAA,AAAAL,EAAA,OAAAG,UAAAH,EAAA,OAAAJ,+BAAAI,EAAA,OAAAI,aAGZC,KAAAC,MAAKC,QAASX,4BAA2BH,WAWzD,IAVAG,4BAA2BH,cAC3BZ,QACE,YACM,OAAOe,4BAA2BH,eAAiB,aAC9CG,4BAA2BH,YAAaU,MAAM,IAEhDP,4BAA2BH,aAEpC,CAACW,SAAS,GACV,EAAA9B,MAAM,CACR,GAAC0B,EAAA,KAAAG,QAAAH,EAAA,KAAAJ,6BAAAI,EAAA,KAAAI,WAAAJ,EAAA,KAAAK,MAAAA,KAAAL,EAAA;CAXL,IAAAP,cAAoBY,IAWfG;CAAA,AAAAR,EAAA,OAAAJ,+BAAAI,EAAA,OAAAP,eAGIe,KAAA;EAAA,GAAIZ;EAA2BH;CAAa,GAACO,EAAA,KAAAJ,6BAAAI,EAAA,KAAAP,aAAAO,EAAA,KAAAQ,MAAAA,KAAAR,EAAA;CADtD,IAAAS,UACSD,IAERE;CAAA,AAAAV,EAAA,OAAAD,QAI8BW,KAAAV,EAAA,OAA1BU,KAAAX,MAAKY,cAAeZ,KAAK,GAACC,EAAA,KAAAD,OAAAC,EAAA,MAAAU;CAAA,IAAAE;CACA,OADAZ,EAAA,QAAAS,WAAAT,EAAA,QAAAU,MAD7BE,KAAA,oBAAA,kBAAA,UAAA;EAAmCH,OAAAA;YAChCC;CACH,CAAA,GAA6BV,EAAA,MAAAS,SAAAT,EAAA,MAAAU,IAAAV,EAAA,MAAAY,MAAAA,KAAAZ,EAAA,KAF7BY;AAE6B;ACrDjC,MAAaU,cAAaC,UAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAAAC,cAAAC,cAAAC,IAAAC,IAAAC,WAAAC;CAAA,IAAAP,EAAA,OAAAD,OAAA;EACxB,IAAAS,YAAkBT,MAAKU,KAAKC,MAAO,GAAG,EAAE;EAEyBV,CADjE,CAAAG,cAAAI,aAAAD,WAAAJ,gBAA6DH,QACrCL,KAAAA,cAAaW,KAAA,CAAA,GAAIG,WAAWN,YAAY,GAACF,EAAA,KAAAD,OAAAC,EAAA,KAAAE,cAAAF,EAAA,KAAAG,cAAAH,EAAA,KAAAI,IAAAJ,EAAA,KAAAK,IAAAL,EAAA,KAAAM,WAAAN,EAAA,KAAAO;CAAA,OAAAA,AAAAL,eAAAF,EAAA,IAAAG,eAAAH,EAAA,IAAAI,KAAAJ,EAAA,IAAAK,KAAAL,EAAA,IAAAM,YAAAN,EAAA,IAAAO,cAAAP,EAAA;CAAjE,IAAAW,kBAAwBjB,GAAaW,EAA4B,GAEjE,EAAAO,gBAAsBf,qBAAqB,GAACgB;CAAA,AAAAb,EAAA,OAAAE,gBAAAF,EAAA,OAAAW,mBAAAX,EAAA,OAAAG,gBAAAH,EAAA,QAAAM,aAAAN,EAAA,QAAAO,eAG1CM,KAAA,OAAAC,YAAA;EACE,IAAAC,OAAa;GAAAC,MACLxB,KAAK;IACVc,YAAYQ,QAAOG;IACnBf,eAAeS;GAAeO,OACxBX;EACT;EAGAJ,aAAaY,IAAI;CAAC,GACnBf,EAAA,KAAAE,cAAAF,EAAA,KAAAW,iBAAAX,EAAA,KAAAG,cAAAH,EAAA,MAAAM,WAAAN,EAAA,MAAAO,aAAAP,EAAA,MAAAa,MAAAA,KAAAb,EAAA;CAXH,IAAAmB,cAAoBN,IAanBO,IAAAC,IAAAC,IAAAC,IAAAC,IAAAC;CAAA,IAAAzB,EAAA,QAAAW,mBAAAX,EAAA,QAAAY,eAAAZ,EAAA,QAAAmB,eAAAnB,EAAA,QAAAD,SAAAC,EAAA,QAAAM,WAAA;EAED,IAAAoB,mBACEd,YAAWe,MAAMC,WACRA,OAAMX,OAAQN,eACZ,CAAC,EAAAkB,YAFZ,CAAA,GAeFI,gBAFgBlC,MAAKgC,SAAN,CAAA,EAAA,EAEYG,KAAMC,cAAarB,UAAQR,UAAU;EAiBxDN,AAdLqB,KAAA9B,OAAWiC,KAAA,GAACxB,EAAA,QAAAD,QACiD0B,KAAAzB,EAAA,OAA3DyB,KAAA1B,MAAKqC,cAAe;GAAA,GAAIrC;GAAKsC,gBAAkBC;EAAU,CAAC,GAACtC,EAAA,MAAAD,OAAAC,EAAA,MAAAyB,KAE3DL,KAAA9B,QAAYgC,KAAA,GACVC,KAAAG,iBAAgBQ,KAAKK,cAElB,oBAAC,QAAD;GAEQ,MAAA,OAAOzB,UAAO0B;GACf,MAAA;GACK,UAAAP,cAAYQ,SAAW3B,UAAOG,EAAG;GAClC,eAAME,YAAYL,SAAO;EAAC,GAJ9B,GAAGH,gBAAe,GAAIG,UAAOG,IAIC,CAGxC,GAACjB,EAAA,MAAAW,iBAAAX,EAAA,MAAAY,aAAAZ,EAAA,MAAAmB,aAAAnB,EAAA,MAAAD,OAAAC,EAAA,MAAAM,WAAAN,EAAA,MAAAoB,IAAApB,EAAA,MAAAqB,IAAArB,EAAA,MAAAsB,IAAAtB,EAAA,MAAAuB,IAAAvB,EAAA,MAAAwB,IAAAxB,EAAA,MAAAyB;CAAA,OAAAA,AAAAL,KAAApB,EAAA,KAAAqB,KAAArB,EAAA,KAAAsB,KAAAtB,EAAA,KAAAuB,KAAAvB,EAAA,KAAAwB,KAAAxB,EAAA,KAAAyB,KAAAzB,EAAA;CAAA,IAAA0C;CAAA,AAAA1C,EAAA,QAAAoB,MAAApB,EAAA,QAAAsB,MAAAtB,EAAA,QAAAuB,MAXJmB,KAAA,oBAAC,IAAD;EAAa,KAAApB;YACVC;CADI,CAAA,GAYEvB,EAAA,MAAAoB,IAAApB,EAAA,MAAAsB,IAAAtB,EAAA,MAAAuB,IAAAvB,EAAA,MAAA0C,MAAAA,KAAA1C,EAAA;CAAA,IAAA2C;CACH,OADG3C,EAAA,QAAAqB,MAAArB,EAAA,QAAAwB,MAAAxB,EAAA,QAAAyB,MAAAzB,EAAA,QAAA0C,MAfXC,KAAA,qBAAC,IAAD;EAAY,KAAAnB;YAAZ,CACGC,IAEDiB,EAHI;KAgBE1C,EAAA,MAAAqB,IAAArB,EAAA,MAAAwB,IAAAxB,EAAA,MAAAyB,IAAAzB,EAAA,MAAA0C,IAAA1C,EAAA,MAAA2C,MAAAA,KAAA3C,EAAA,KAhBR2C;AAgBQ;AAzDc,SAAAL,UAAA;CAAA,OA0CkC;AAAI;ACnChE,MAAMsB,0BAAyBC,UAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAI7B,EAAAN,UAAAO,QAAAC,2BAAmDJ,OAAKK;CAAA,AAAAJ,EAAA,OAAAE,UAAAF,EAAA,OAAAL,YAEpBS,WAAA;EAClCT,SAAS,CAACH,IAAI,CAACU,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;CAAC,GACrCF,EAAA,KAAAE,QAAAF,EAAA,KAAAL,UAAAK,EAAA,KAAAI,MAAAA,KAAAJ,EAAA;CAFD,IAAAK,kBAAwBD,IAKfE,KAAA,OAAOH,0BAAwBI;CAKvC,OALuCP,EAAA,OAAAK,mBAAAL,EAAA,OAAAM,MADjCC,KAAA;EAAAC,OACEF;EAA+BG,MAChC;EAAQC,MACRzB;EAAgB0B,UACZN;EAAeO,gBACT;CAClB,GAACZ,EAAA,KAAAK,iBAAAL,EAAA,KAAAM,IAAAN,EAAA,KAAAO,MAAAA,KAAAP,EAAA,IANMO;AAMN,GAGGM,6BAA4Bd,UAAA;CAAA,IAAAC,IAAAC,EAAA,CAAA,GAShC,EAAAN,UAAAO,QAAAY,cAAAX,wBAAAY,wBAAsFhB,OAAKK;CAAA,AAAAJ,EAAA,OAAAE,UAAAF,EAAA,OAAAc,gBAAAd,EAAA,OAAAL,YAAAK,EAAA,OAAAe,uBACrDX,WAAA;EACpC,IAAAY,WAAiB,CAAC,QAAQ,GAC1BC,aAAmB,CAACH,YAAY,GAChCI,WAAiB,CAAC,GAAGH,oBAAmB,EAAG;EAC3CpB,SAAS;GAACH,IAAI,CAACU,QAAQc,QAAQ;GAAGvB,MAAMwB,UAAU;GAAGxB,MAAMyB,QAAQ;EAAC,CAAC;CAAC,GACvElB,EAAA,KAAAE,QAAAF,EAAA,KAAAc,cAAAd,EAAA,KAAAL,UAAAK,EAAA,KAAAe,qBAAAf,EAAA,KAAAI,MAAAA,KAAAJ,EAAA;CALD,IAAAmB,oBAA0Bf,IAQjBE,KAAA,UAAUH,0BAAwBI;CAK1C,OAL0CP,EAAA,OAAAmB,qBAAAnB,EAAA,OAAAM,MADpCC,KAAA;EAAAC,OACEF;EAAkCG,MACnC;EAAQC,MACR5B;EAAS6B,UACLQ;EAAiBP,gBACX;CAClB,GAACZ,EAAA,KAAAmB,mBAAAnB,EAAA,KAAAM,IAAAN,EAAA,KAAAO,MAAAA,KAAAP,EAAA,IANMO;AAMN,GAGGa,iBAAiB,EACrBzB,UACAE,SACAK,QACAC,wBACAW,cACAC,0BAMI;CACJ,IAAMM,eAAenC,0BAA0B;EAC7CoC,MAAM,UAAUnB;EAChBoB,YAAYxB,UACVc,0BAA0B;GACxB,GAAGd;GACHG,QAAQ;GACRP;GACAE;GACAM;GACAW;GACAC;EACF,CAAC;CACL,CAAC,GACKS,YAAYtC,0BAA0B;EAC1CoC,MAAM,OAAOnB;EACboB,YAAYxB,UACVD,uBAAuB;GACrB,GAAGC;GACHG,QAAQ;GACRP;GACAE;GACAM;GACAW;EACF,CAAC;CACL,CAAC;CACD,OAAOZ,SAASmB,eAAeG;AACjC,GAEaC,mBAAkB1B,UAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAO7B,EAAAN,aAAmBI,MAAK2B,YACxB,EAAA7B,SAAAM,wBAAAW,cAAAC,wBAA6EhB,OAC7EG,SAAeH,MAAK4B,OAAkBzB,QAAuBE;CAAA,AAAAJ,EAAA,OAAAE,UAAAF,EAAA,OAAAc,gBAAAd,EAAA,OAAAG,0BAAAH,EAAA,OAAAH,WAAAG,EAAA,OAAAL,YAAAK,EAAA,OAAAe,uBAGpDX,KAAA;EAAAT;EAAAE;EAAAK;EAAAC;EAAAW;EAAAC;CAOP,GAACf,EAAA,KAAAE,QAAAF,EAAA,KAAAc,cAAAd,EAAA,KAAAG,wBAAAH,EAAA,KAAAH,SAAAG,EAAA,KAAAL,UAAAK,EAAA,KAAAe,qBAAAf,EAAA,KAAAI,MAAAA,KAAAJ,EAAA;CARH,IAAA4B,cACSxB,IASRE;CAAA,AAAAN,EAAA,OAAAD,MAAA8B,UAGuCvB,KAAAN,EAAA,MAAnBM,KAAAP,MAAK8B,WAAL,CAAA,GAAmB7B,EAAA,KAAAD,MAAA8B,SAAA7B,EAAA,KAAAM;CAAtC,IAAAwB,aAAmBxB,IAAmBC;CAAA,AAAAP,EAAA,OAAA4B,cACJrB,KAAAP,EAAA,OAA1BO,KAAAa,cAAcQ,WAAW,GAAC5B,EAAA,KAAA4B,aAAA5B,EAAA,MAAAO;CAAA,IAAAwB;CAAA,AAAA/B,EAAA,QAAA8B,cAAA9B,EAAA,QAAAO,MAA3BwB,KAAA,CAACxB,IAA0B,GAAKuB,UAAU,GAAC9B,EAAA,MAAA8B,YAAA9B,EAAA,MAAAO,IAAAP,EAAA,MAAA+B,MAAAA,KAAA/B,EAAA;CAFpD,IAAAgC,kBAEED,IAC8BE;CAAA,AAAAjC,EAAA,QAAAgC,mBAAAhC,EAAA,QAAAD,SAGvBkC,KAAA;EAAA,GACFlC;EAAK8B,SACCG;CACX,GAAChC,EAAA,MAAAgC,iBAAAhC,EAAA,MAAAD,OAAAC,EAAA,MAAAiC,MAAAA,KAAAjC,EAAA;CAJH,IAAAkC,kBACSD,IAKRE;CAC0C,OAD1CnC,EAAA,QAAAD,MAAAqC,iBAAApC,EAAA,QAAAkC,mBACMC,KAAApC,MAAKqC,cAAeF,eAAe,GAAClC,EAAA,MAAAD,MAAAqC,eAAApC,EAAA,MAAAkC,iBAAAlC,EAAA,MAAAmC,MAAAA,KAAAnC,EAAA,KAApCmC;AAAoC,GClIhCE,YAASQ,UAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAWpB,EAAAC,OAAAC,UAAAC,cAAAC,aAAAC,iBAMIP,OAAKQ;CAAA,AAAAP,EAAA,OAAAQ,OAAAC,IAAA,2BAAA,KAOAF,KAAA;EAAC;EAAG;EAAG;CAAC,GAACP,EAAA,KAAAO,MAAAA,KAAAP,EAAA;CACP,IAAAU,KAAAR,SAAA,IAAWS;CAAA,AAAAX,EAAA,OAAAM,gBAAAN,EAAA,OAAAG,YACRQ,MAAAC,UAAWN,aAAaM,OAAOT,QAAQ,GAACH,EAAA,KAAAM,cAAAN,EAAA,KAAAG,UAAAH,EAAA,KAAAW,MAAAA,KAAAX,EAAA;CAAA,IAAAa;CAAA,AAAAb,EAAA,OAAAQ,OAAAC,IAAA,2BAAA,KAElDI,KAAA,oBAAA,UAAA;EAAe,OAAA;YAAK;CAA+B,CAAA,GAAAb,EAAA,KAAAa,MAAAA,KAAAb,EAAA;CAAA,IAAAc;CAAA,AAAAd,EAAA,OAAAK,cAKjDS,KAAAd,EAAA,MAJDc,KAAAT,YAAWU,IAAKC,OAIhB,GAAChB,EAAA,KAAAK,aAAAL,EAAA,KAAAc;CAAA,IAAAG;CACW,OADXjB,EAAA,OAAAI,gBAAAJ,EAAA,OAAAU,MAAAV,EAAA,OAAAW,MAAAX,EAAA,QAAAc,MAbJG,KAAA,qBAAC,QAAD;EAAa,GACPb;EACM,UAAA;EACD,SAAA;EACJ,KAAAG;EACE,OAAAG;EACG,UAAAC;YANZ,CAQEE,IACCC,EATU;KAcEd,EAAA,KAAAI,cAAAJ,EAAA,KAAAU,IAAAV,EAAA,KAAAW,IAAAX,EAAA,MAAAc,IAAAd,EAAA,MAAAiB,MAAAA,KAAAjB,EAAA,KAdfiB;AAce;AAlCG,SAAAD,QAAAT,IAAA;CA6BE,IAAA,EAAAL,OAAAgB,aAAAC,UAAAZ;CAA2B,OAC3C,oBAAA,UAAA;EAAiCW,OAAAA;YAC9BC;CACM,GAFID,WAEJ;AAAA;ACpBjB,MAAMqB,qBAAqBC,gBACzBA,YAAYC,KAAKC,gBAAgB;CAC/BL,OAAOK,WAAWC;CAClBL,OAAOI,WAAWE;AACpB,EAAE,GAESC,mBAAkBC,UAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAG7B,EAAAR,gBAAsBN,qBAAqB,GAACe;CAAA,AAAAF,EAAA,OAAAG,OAAAC,IAAA,2BAAA,KAEpBF,KAAA,CAAC,KAAK,GAACF,EAAA,KAAAE,MAAAA,KAAAF,EAAA;CAA/B,IAAAH,KAAWZ,aAAaiB,EAAO,GAAWG;CAAA,AAAAL,EAAA,OAAAD,MAAAO,QAAAN,EAAA,OAAAD,MAAAQ,uBAElCF,KAAA,CAAA,GAAIN,MAAKO,KAAKE,MAAO,GAAG,EAAE,GAAG,GAAGT,MAAKQ,oBAAoB,EAAG,GAACP,EAAA,KAAAD,MAAAO,MAAAN,EAAA,KAAAD,MAAAQ,qBAAAP,EAAA,KAAAK,MAAAA,KAAAL,EAAA;CADrE,IAAAS,uBACQJ,IAGRK,YAAkBzB,aAAawB,oBAAoB,GAACE;CAAA,AAAAX,EAAA,OAAAH,KAEGc,KAAAX,EAAA,MAAlBW,KAAAhC,eAAekB,EAAE,GAACG,EAAA,KAAAH,IAAAG,EAAA,KAAAW;CAAvD,IAAA,EAAAC,UAAgB5B,qBAAqB2B,IAAoBZ,MAAKc,WAAWC,IAAK,GAACC;CAAA,AAAAf,EAAA,OAAAS,wBAAAT,EAAA,OAAAY,SAAAZ,EAAA,OAAAU,aAG7EK,MAAAC,OAAAC,aAAA;EAIE,IAAAC,aAAmBF,MAAKG,cAAc5B;EAQtC,IALE0B,SADEC,aACOrC,IAAIqC,UAAU,IAEdnC,MAAM,CAAC,GAGd2B,WAAS;GACX,IAAAU,aAAmB,EAAArC,OACV,CAAC0B,qBAAoBY,KAAM,GAAG,CAAC,EACxC;GACAT,MAAKU,QAAS,CAACF,UAAU,CAAC;EAAC;CAC5B,GACFpB,EAAA,KAAAS,sBAAAT,EAAA,KAAAY,OAAAZ,EAAA,KAAAU,WAAAV,EAAA,KAAAe,MAAAA,KAAAf,EAAA;CAnBH,IAAAuB,eAAqBR;CAuBrB,IAAI,CAACtB,YAAW+B,QAAO;EAAA,IAAAC;EAAA,AAAAzB,EAAA,QAAAG,OAAAC,IAAA,2BAAA,KAEJqB,KAAA;GAAC;GAAG;GAAG;EAAC,GAACzB,EAAA,MAAAyB,MAAAA,KAAAzB,EAAA;EAAA,IAAA0B;EAAA,AAAA1B,EAAA,QAAAG,OAAAC,IAAA,2BAAA,KACKsB,KAAA;GAAC;GAAG;GAAG;EAAC,GAAC1B,EAAA,MAAA0B,MAAAA,KAAA1B,EAAA;EAAA,IAAA2B;EAG/B,OAH+B3B,EAAA,QAAAD,MAAA6B,yBAG/BD,KAAA3B,EAAA,OAJP2B,KAAA,oBAAC,MAAD;GAAe,SAAAF;GAAmB,QAAA;GAAW,QAAA;GAAQ,MAAA;aACnD,qBAAC,MAAD;IAAY,OAAA;IAAe,MAAAC;cAA3B;KAAsC;KACd3B,MAAK6B;KAAwB;IADhD;;EADF,CAAA,GAIE5B,EAAA,MAAAD,MAAA6B,wBAAA5B,EAAA,MAAA2B,KAJPA;CAIO;CACR,IAAAF;CAAA,AAAAzB,EAAA,QAAAP,cAG6DgC,KAAAzB,EAAA,OAA9ByB,KAAAjC,kBAAkBC,WAAW,GAACO,EAAA,MAAAP,aAAAO,EAAA,MAAAyB;CAAA,IAAAC;CAAgC,OAAhC1B,EAAA,QAAAuB,gBAAAvB,EAAA,QAAAD,SAAAC,EAAA,QAAAyB,MAA9DC,KAAA,oBAAC,UAAD;EAAO,GAAK3B;EAAoB,aAAA0B;EAA8CF;CAAY,CAAA,GAAIvB,EAAA,MAAAuB,cAAAvB,EAAA,MAAAD,OAAAC,EAAA,MAAAyB,IAAAzB,EAAA,MAAA0B,MAAAA,KAAA1B,EAAA,KAA9F0B;AAA8F,GCrErFM,kBAAkBC,UAA2B;CACxD,IAAM,EAACC,WAAUD,MAAME;CAKvB,OAJKD,UACHD,MAAMG,WAAWC,SAASN,IAAI,IAAM,CAAC,QAAQ,CAAC,CAAC,GAG1CE,MAAMK,cAAcL,KAAK;AAClC,GCNaY,gBAAeC,UAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAAAC,IAAAC;CAAA,IAAAH,EAAA,OAAAD,MAAAK,MAAA;EAC1B,IAAAC,iBAAuBN,MAAKK,KAAKE,MAAO,GAAG,EAAE;EACmBN,AAA3CH,KAAAA,cAAaM,KAAA,CAAA,GAAIE,gBAAgB,SAAS,GAACL,EAAA,KAAAD,MAAAK,MAAAJ,EAAA,KAAAE,IAAAF,EAAA,KAAAG;CAAA,OAAAA,AAAAD,KAAAF,EAAA,IAAAG,KAAAH,EAAA;CAAhE,IAAAO,eAAqBV,GAAaM,EAA8B,GAACK;CAAA,AAAAR,EAAA,OAAAO,gBAAAP,EAAA,OAAAD,SAC7CS,WAAA;EAClBT,MAAKU,SAAUb,IAAIW,cAAc,CAAC,OAAO,CAAC,CAAC;CAAC,GAC7CP,EAAA,KAAAO,cAAAP,EAAA,KAAAD,OAAAC,EAAA,KAAAQ,MAAAA,KAAAR,EAAA;CAFD,IAAAU,cAAoBF,IAEnBG;CAAA,AAAAX,EAAA,OAAAD,QAG8BY,KAAAX,EAAA,MAA1BW,KAAAZ,MAAKa,cAAeb,KAAK,GAACC,EAAA,KAAAD,OAAAC,EAAA,KAAAW;CAAA,IAAAE;CAAA,AAAAb,EAAA,OAAAU,cAIlBG,KAAAb,EAAA,MAFTa,KAAA,oBAAC,QAAD;EAAa,KAAA;YACX,oBAAC,QAAD;GAAa,MAAA;GAAoB,MAAA;GAAiB,eAAMH,YAAY;EAAC,CAAA;CADhE,CAAA,GAEEV,EAAA,KAAAU,aAAAV,EAAA,KAAAa;CAAA,IAAAC;CACH,OADGd,EAAA,QAAAW,MAAAX,EAAA,QAAAa,MALXC,KAAA,qBAAC,OAAD;EAAY,KAAA;YAAZ,CACGH,IAEDE,EAHI;KAMEb,EAAA,MAAAW,IAAAX,EAAA,MAAAa,IAAAb,EAAA,MAAAc,MAAAA,KAAAd,EAAA,KANRc;AAMQ,GCHCW,kBAAiBC,UAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,GAC5B,CAAAC,UAAAC,eAAgCd,SAA6Be,KAAAA,CAAS,GACtE,CAAAC,OAAAC,YAA0BjB,SAA6Be,KAAAA,CAAS,GAChE,CAAAG,OAAAC,YAA0BnB,SAAce,KAAAA,CAAS,GAACK;CAAA,AAAAT,EAAA,OAAAU,OAAAC,IAAA,2BAAA,KACzBF,KAAA,EAAAG,YAAa,aAAY,GAACZ,EAAA,KAAAS,MAAAA,KAAAT,EAAA;CAAnD,IAAAa,SAAelB,UAAUc,EAA0B,GACnD,EAAAK,gBAAsBjB,qBAAqB,GAE3C,EAAAkB,YAAAC,SAAAC,UAAqClB,OAA4BmB,oBAAAC;CAAA,IAAAnB,EAAA,OAAAe,cAAAf,EAAA,OAAAc,eAAAd,EAAA,OAAAgB,SAAA;EAAA,IAAAI;EAQ/DpB,AAR+DA,EAAA,OAAAe,aAIhEK,KAAApB,EAAA,MAF2CoB,MAAAC,mBACnCA,eAAcC,OAAQP,YAC9Bf,EAAA,KAAAe,YAAAf,EAAA,KAAAoB,KAFDF,qBAA2BJ,YAAWS,KAAMH,EAE3C,GAEuBD,KAAAD,oBAAkBM,SAAeD,MAACE,gBACjDA,YAAWH,OAAQN,OAC3B,GAAChB,EAAA,KAAAe,YAAAf,EAAA,KAAAc,aAAAd,EAAA,KAAAgB,SAAAhB,EAAA,KAAAkB,oBAAAlB,EAAA,KAAAmB;CAAA,OAAAA,AAAAD,qBAAAlB,EAAA,IAAAmB,KAAAnB,EAAA;CAFF,IAAA0B,kBAAwBP,IAEtBC;CAAA,AAAApB,EAAA,OAAAa,UAAAb,EAAA,OAAAD,MAAA4B,cAAA3B,EAAA,QAAAkB,oBAAAU,SAAA5B,EAAA,QAAA0B,iBAAAE,SAAA5B,EAAA,QAAAiB,SAEQG,WAAA;EAgCHS,aA/Be;GAElB,IADAvB,SAAS,GAAGY,oBAAkBU,MAAO,KAAMF,iBAAeE,OAAS,GAC/D,OAAOX,SAAU,UAAQ,OACpBd,YAAYc,KAAK;GAE1B,IAAI1B,YAAY0B,KAAK,GAAC;IACpB,IAAAa,MAAY,MAAMjB,OAAMkB,YAAad,MAAKe,IAAK,GAI/CM,iBAHavC,MAAK4B,WACKQ,OAAOZ,KAAMa,KACbF,CAAU,EAAAD,KAAAA,CACGM,GAAGhB,MAAMiB,YAAWC,QAAKR,MAAWS,SAAKZ,KAAGa,KAAO,GAEvFC,eAAqB,CAAC,GACtBE,gBAAsBR,eAAaS,SAAiBC,UAA9B,CAAmC;IACzDC,OAAMC,KAAMJ,aAAa,CAAC,CAAAK,SAASC,QAAA;KACjC,IAAAC,WAAiBf,eAAaS,SAAiBC,SAAGI;KAClDR,aAAaQ,OACXC,YAAAvB,MACIuB,UAAQC,MAAQ,GAAU,CAAC,CAAAC,OAACC,QAA4B1B,GAChD,IAFZ1B,KAAAA;IADe,CAIlB;IAED,IAAAqD,iBAAuBnB,eAAaS,SAAkBW,UAAGd,YAAY;IACb,OAAxDpC,SAASiD,gBAAclD,SAAWqC,aAAYrC,KAAS,GAChDJ,YAAYsD,gBAAcpD,SAAYuC,aAAYvC,KAAoB;GAAC;GAI/E,OAFGf,QAAQ2B,KAAK,KACfT,SAASS,KAAK,GAET;EAAE,EAENY,CAAY;CAAC,GACnB7B,EAAA,KAAAa,QAAAb,EAAA,KAAAD,MAAA4B,YAAA3B,EAAA,MAAAkB,oBAAAU,OAAA5B,EAAA,MAAA0B,iBAAAE,OAAA5B,EAAA,MAAAiB,OAAAjB,EAAA,MAAAoB,MAAAA,KAAApB,EAAA;CAAkB,IAAA2D,KAAAzC,oBAAkBU,OAASgC,KAAAlC,iBAAeE,OAAOiC;CAjCpEzE,AAiCoEY,EAAA,QAAAa,UAAAb,EAAA,QAAAD,MAAA4B,cAAA3B,EAAA,QAAA2D,MAAA3D,EAAA,QAAA4D,MAAA5D,EAAA,QAAAiB,SAAjE4C,KAAA;EAAC5C;EAAOJ;EAAQ8C;EAA2BC;EAAwB7D,MAAK4B;CAAW,GAAC3B,EAAA,MAAAa,QAAAb,EAAA,MAAAD,MAAA4B,YAAA3B,EAAA,MAAA2D,IAAA3D,EAAA,MAAA4D,IAAA5D,EAAA,MAAAiB,OAAAjB,EAAA,MAAA6D,MAAAA,KAAA7D,EAAA,KAjCvFZ,UAAUgC,IAiCPyC,EAAoF;CAAC,IAAAC;CAAA,IAAA9D,EAAA,QAAAO,SAAAP,EAAA,QAAAD,SAAAC,EAAA,QAAAE,YAAAF,EAAA,QAAAK,OAAA;EAExF,IAAA0D,eAAqB;GAAA,GAChBhE;GAAKM;GAAAH;GAAAK;EAIV;EAEwCP,AAAjC8D,KAAA/D,MAAKiE,cAAeD,YAAY,GAAC/D,EAAA,MAAAO,OAAAP,EAAA,MAAAD,OAAAC,EAAA,MAAAE,UAAAF,EAAA,MAAAK,OAAAL,EAAA,MAAA8D;CAAA,OAAAA,KAAA9D,EAAA;CAAA,OAAjC8D;AAAiC;AA3DZ,SAAA1B,MAAAK,OAAA;CAAA,OA0ByBA,MAAKC,SAAU;AAAO;AA1B/C,SAAAc,OAAAS,KAAAC,OAAA;CAAA,OAoC8BD,IAAIC;AAAM;;;;AC1CtE,SAAgBM,kBAAkBC,YAA+C;CAM/E,OALKN,qBAAqBM,UAAU,IAK7BG,mBAAmBH,WAAWI,QAAQ,CAAA,GAAI,CAAC,KAJhDH,QAAQC,MAAM,+BAA+B,GACtC,CAAA;AAIX;AAEA,SAASC,mBACPC,QACAC,MACAC,UACuB;CACvB,IAAID,KAAKE,UAAUD,UACjB,OAAO,CAAA;CAGT,IAAME,SAAgC,CAAA;CAEtC,KAAK,IAAMC,SAASL,QAGlB,IAFAI,OAAOE,KAAK;EAACL,MAAM,CAAC,GAAGA,MAAMI,MAAME,IAAI;EAAG,GAAGF;CAAK,CAAC,GAE/CA,MAAMG,KAAKC,aAAa,UAC1BL,OAAOE,KAAK,GAAGP,mBAAmBM,MAAMG,KAAKR,QAAQ,CAAC,GAAGC,MAAMI,MAAME,IAAI,GAAGL,QAAQ,CAAC;MAChF,IAAIG,MAAMG,KAAKC,aAAa,SAAS;EAE1C,IAAMC,aAAaL,MAAMG,KAAKG,MAAM,CAAA;EACpC,KAAK,IAAMC,aAAaF,YACtB,AAAI,YAAYE,aACdR,OAAOE,KAAK,GAAGP,mBAAmBa,UAAUZ,QAAQ,CAAC,GAAGC,MAAMI,MAAME,IAAI,GAAGL,QAAQ,CAAC;CAG1F;CAGF,OAAOE;AACT;ACzBA,MAAMyB,wBAAwB,EAC5BC,OACAC,wBACAC,qBACAC,WACAC,kBACAC,mBAQI;CACJ,IAAMC,WAAW,OAAON,SAAU,WAAWA,QAAQA,MAAMO,MACrDC,WAAWC,OAAOH,SAAS,EAAE,CAAC,CAACI,YAAY,IAAIJ,SAASK,MAAM,CAAC,GAC/DC,cAAc,GAAGV,sBAAsBM;CAE7C,OAAOtB,WAAW;EAChBqB,MAAM,GAAGN,yBAAyBO;EAClCK,MAAM;EACNC,YAAY;GACVd,QAAQe,UACN,oBAAC,iBAAD;IACE,GAAIA;IACUV;IACUJ;IACHC;GAAoB,CAAA;GAG7Cc,MAAMtB;EACR;EACAuB,QAAQ;GACN,OAAOjB,SAAU,WAEbhB,YAAY;IACVuB,MAAM;IACNM,MAAMb;GACR,CAAC,IAED;IACE,GAAGA;IACHO,MAAM;GACR;GACJvB,YAAY;IACVuB,MAAM;IACNM,MAAM;IACNK,QAAQ;IACRC,cAAc;GAChB,CAAC;GACDnC,YAAY;IACVuB,MAAMF;IACNQ,MAAM;IACNC,YAAY,EACVM,QAAQL,UACN,oBAAC,iBAAD;KACE,GAAIA;KACoBd;KACHC;IAAoB,CAAA,EAG/C;IACAgB,SAAS,EAACG,aACD,CAACA,QAAQC;GAEpB,CAAC;GACDtC,YAAY;IACVuB,MAAMH;IACNS,MAAM;IACNK,SAAS,EAACG,aACD,CAACA,SAAShB;IAEnBS,YAAY,EACVM,QAAQL,UACN,oBAAC,YAAD;KACE,GAAIA;KACSH;KACFT;KACGE;IAAa,CAAA,EAGjC;IACAkB,IAAI,CACFvC,YAAY;KACVuB,MAAMK;KACNC,MAAMD;IACR,CAAC,CAAC;GAEN,CAAC;EAAC;EAEJY,SAAS;GACPC,QAAQ;IACNC,MAAM;IACNC,YAAYtB;GACd;GACAuB,UAAU,EAACF,MAAMC,iBAAgB;IAC/B,IAAME,QAAQH,MAAMG,SAASH,MAAMnB,QAAQ,OAAOmB,QAAS,WAAWA,OAAO,IACvEI,kBAAkBH,aAAa,eAAeA,eAAe,IAC7DI,QAAQL,MAAMM,SAASN,MAAMO,SAASP,MAAMK,SAAS;IAC3D,OAAO;KACLF,OAAOA,SAASC;KAChBI,UAAUL,QAAQC,kBAAkB;KACpCC;IACF;GACF;EACF;CACF,CAAC;AACH,GAEMI,qBAAqB,EACzBnC,OACAE,qBACAC,WACAE,mBAMI;CACJ,IAAMC,WAAW,OAAON,SAAU,WAAWA,QAAQA,MAAMO,MACrDC,WAAWC,OAAOH,SAAS,EAAE,CAAC,CAACI,YAAY,IAAIJ,SAASK,MAAM,CAAC;CACrE,OAAOzB,WAAW;EAChBqB,MAAM,GAAGL,sBAAsBM;EAC/BqB,OAAO,GAAG3B,oBAAmB,SAAUM;EACvCK,MAAM;EACNC,YAAY;GACVU,SAAS5B;GACTwB,OAAOzB;EACT;EACAsB,QAAQ;GACN;IACEJ,MAAM;IACNN,MAAMJ;IACNiC,UAAU;GACZ;GACA;IACEvB,MAAM;IACNN,MAAMF;IACNa,QAAQ;GACV;GACA,OAAOlB,SAAU,WAEbhB,YAAY;IACVuB,MAAM;IACNM,MAAMb;GAER,CAAC,IAED;IACE,GAAGA;IACHO,MAAM;GAER;EAAC;EAEPiB,SAAS,EACPC,QAAQ;GACNY,SAASlC;GACTwB,YAAYtB;GACZiC,OAAO;EACT,EACF;CACF,CAAC;AACH,GAEMC,eAAe,EACnBtB,QACAhB,wBACAC,qBACAC,WACAC,kBACAC,mBAEO,CACL,GAAGY,OAAOyB,KAAK1C,UACbmC,kBAAkB;CAACnC;CAAOE;CAAqBC;CAAWE;AAAY,CAAC,CACzE,GACA,GAAGY,OAAOyB,KAAK1C,UACbD,qBAAqB;CACnBC;CACAC;CACAC;CACAC;CACAC;CACAC;AACF,CAAC,CACH,CAAC,GAIQsC,wBAAwB1D,cAAiC2D,WAAW;CAC/E,IAAMC,eAAe;EAAC,GAAGvD;EAAgB,GAAGsD;CAAM,GAC5C,EAAC3B,QAAQhB,wBAAwBC,wBAAuB2C,cAExDxC,eAAe,GAAGJ,uBAAsB,KACxCG,mBAAmB,GAAGF,oBAAmB,IACzCC,YAAY,GAAGD,oBAAmB;CAUxC,OAAO;EACLK,MAAM;EACNwC,QAAQ,EACNC,OAXsBT,YAAY;GACpCtB;GACAhB;GACAC;GACAC;GACAC;GACAC;EACF,CAIWyC,EACT;EACAG,MAAM,EACJnC,YAAY,EACVM,QAAQL,UAGF,EAFgBA,MAAMoC,OAAO,UAAU/D,mBAAmB2B,KAAK,MAa/D,CAPejB,kBAAkBiB,MAAMuC,UACrBD,CAAU,CAACG,MAC9BxD,UACCA,MAAMa,KAAKN,KAAKkD,WAAWxD,sBAAsB,KACjDD,MAAMO,KAAKkD,WAAWxD,sBAAsB,CAG3CsD,IACIxC,MAAMqC,cAAcrC,KAAK,IAY3BxB,mBAAmBmE;GARxB,GAAG3C;GACH4C,6BAA6B;IAC3B,GAAGd;IACH1C;IACAC;IACAC;GACF;EAEwBqD,CAAa,EAE3C,EACF;CACF;AACF,CAAC"}
\ No newline at end of file