@makeswift/runtime 0.0.8 → 0.0.11

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 (36) hide show
  1. package/dist/builder.cjs.js +2 -0
  2. package/dist/builder.cjs.js.map +1 -1
  3. package/dist/builder.es.js +1 -1
  4. package/dist/components.cjs.js +1 -0
  5. package/dist/components.cjs.js.map +1 -1
  6. package/dist/components.es.js +1 -0
  7. package/dist/components.es.js.map +1 -1
  8. package/dist/control-serialization.cjs.js +11 -3
  9. package/dist/control-serialization.cjs.js.map +1 -1
  10. package/dist/control-serialization.es.js +10 -4
  11. package/dist/control-serialization.es.js.map +1 -1
  12. package/dist/index.cjs.js +34 -23
  13. package/dist/index.cjs.js.map +1 -1
  14. package/dist/index.es.js +34 -23
  15. package/dist/index.es.js.map +1 -1
  16. package/dist/next.cjs.js +1 -0
  17. package/dist/next.cjs.js.map +1 -1
  18. package/dist/next.es.js +1 -0
  19. package/dist/next.es.js.map +1 -1
  20. package/dist/react-builder-preview.es.js +1 -1
  21. package/dist/react.cjs.js +1 -0
  22. package/dist/react.cjs.js.map +1 -1
  23. package/dist/react.es.js +1 -0
  24. package/dist/react.es.js.map +1 -1
  25. package/dist/text-input.cjs.js.map +1 -1
  26. package/dist/text-input.es.js.map +1 -1
  27. package/dist/types/builder/serialization/control-serialization.d.ts +2 -0
  28. package/dist/types/builder/serialization/control-serialization.d.ts.map +1 -1
  29. package/dist/types/builder/serialization/controls/list.d.ts.map +1 -1
  30. package/dist/types/components/builtin/Button/Button.d.ts.map +1 -1
  31. package/dist/types/components/builtin/Text/Text.d.ts.map +1 -1
  32. package/dist/types/controls/shape.d.ts +0 -1
  33. package/dist/types/controls/shape.d.ts.map +1 -1
  34. package/dist/types/runtimes/react/controls/style.d.ts.map +1 -1
  35. package/dist/types/runtimes/react/index.d.ts.map +1 -1
  36. package/package.json +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"control-serialization.es.js","sources":["../src/builder/serialization/function-serialization.ts","../src/builder/serialization/controls/list.ts","../src/builder/serialization/control-serialization.ts"],"sourcesContent":["declare const SerializedFunctionTag: unique symbol\n\ntype AnyFunction = (...args: any) => any\n\nexport type SerializedFunction<T extends AnyFunction> = MessagePort & {\n readonly [SerializedFunctionTag]: T\n}\n\ntype SerializedFunctionReturnType<T extends AnyFunction> = Awaited<ReturnType<T>>\n\nexport type DeserializedFunction<T extends AnyFunction> = (\n ...args: Parameters<T>\n) => Promise<SerializedFunctionReturnType<T>>\n\nexport function isSerializedFunction(value: any): value is SerializedFunction<AnyFunction> {\n return value instanceof MessagePort\n}\n\ntype CallID = number\n\nexport function serializeFunction<T extends AnyFunction>(func: T): SerializedFunction<T> {\n type CallMessageEvent = MessageEvent<[CallID, Parameters<T>]>\n\n const messageChannel = new MessageChannel()\n\n messageChannel.port1.onmessage = ({ data: [callId, args] }: CallMessageEvent) => {\n Promise.resolve()\n .then(() => func.apply(null, args))\n .then(result => messageChannel.port1.postMessage([callId, result]))\n }\n\n return messageChannel.port2 as SerializedFunction<T>\n}\n\nexport function deserializeFunction<T extends AnyFunction>(\n serializedFunction: SerializedFunction<T>,\n): DeserializedFunction<T> {\n type Result = SerializedFunctionReturnType<T>\n type ResultMessageEvent = MessageEvent<[CallID, Result]>\n type ResolveCallPromise = (value: Result | PromiseLike<Result>) => void\n\n let nextCallId = 0\n const calls = new Map<CallID, ResolveCallPromise>()\n\n serializedFunction.onmessage = ({ data: [callId, result] }: ResultMessageEvent) => {\n calls.get(callId)?.(result)\n\n calls.delete(callId)\n }\n\n return function deserializedFunction(...args) {\n return new Promise(resolve => {\n const callId = nextCallId++\n\n calls.set(callId, resolve)\n\n serializedFunction.postMessage([callId, args])\n })\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('serializeFunction & deserializeFunction', () => {\n test('simple call', async () => {\n // Arrange\n const add = deserializeFunction(serializeFunction((a, b) => a + b))\n\n // Act\n const result = await add(2, 2)\n\n // Assert\n expect(result).toBe(4)\n })\n\n test('multiple synchronous calls', async () => {\n // Arrange\n const add = deserializeFunction(serializeFunction((a, b) => a + b))\n\n // Act\n const results = await Promise.all(Array.from({ length: 5 }, (_, i) => add(1, i)))\n\n // Assert\n expect(results).toEqual([1, 2, 3, 4, 5])\n })\n })\n\n describe.concurrent('isSerializedFunction', () => {\n test('trivial case', () => {\n // Arrange\n const add = serializeFunction((a, b) => a + b)\n\n // Act\n const result = isSerializedFunction(add)\n\n // Assert\n expect(result).toBe(true)\n })\n\n test('false positive', () => {\n // Arrange\n const add = (a: number, b: number) => a + b\n\n // Act\n const result = isSerializedFunction(add)\n\n // Assert\n expect(result).toBe(false)\n })\n })\n}\n","import { ListControlDefinition } from '../../../controls'\nimport { deserializeFunction, serializeFunction } from '../function-serialization'\nimport { Deserialize, Serialize } from './types'\n\nexport function serializeListControlDefinition(\n definition: ListControlDefinition,\n): [Serialize<ListControlDefinition>, Transferable[]] {\n const getItemLabel =\n definition.config.getItemLabel && serializeFunction(definition.config.getItemLabel)\n const transferables = []\n\n if (getItemLabel) transferables.push(getItemLabel)\n\n return [{ ...definition, config: { ...definition.config, getItemLabel } }, transferables]\n}\n\nexport function deserializeListControlDefinition(\n definition: Serialize<ListControlDefinition>,\n): Deserialize<Serialize<ListControlDefinition>> {\n const getItemLabel =\n definition.config.getItemLabel && deserializeFunction(definition.config.getItemLabel)\n\n return { ...definition, config: { ...definition.config, getItemLabel } }\n}\n","import { ListControlDefinition, ListControlType } from '../../controls'\nimport {\n CheckboxDescriptor as CheckboxControl,\n CheckboxValue as CheckboxControlValue,\n Data,\n Device,\n DateDescriptor as DateControl,\n DateValue as DateControlValue,\n Gap,\n GapXDescriptor as GapXControl,\n GapXValue as GapXControlValue,\n GapYDescriptor as GapYControl,\n GapYValue as GapYControlValue,\n ImageDescriptor as ImageControl,\n ImageValue as ImageControlValue,\n LinkDescriptor as LinkControl,\n LinkValue as LinkControlValue,\n ListDescriptor as ListControl,\n ListOptions as ListControlConfig,\n ListValue as ListControlValue,\n NumberDescriptor as NumberControl,\n NumberValue as NumberControlValue,\n ResponsiveColorDescriptor as ResponsiveColorControl,\n ResponsiveColorValue as ResponsiveColorControlValue,\n ResponsiveNumberDescriptor as ResponsiveNumberControl,\n ResponsiveNumberValue as ResponsiveNumberControlValue,\n ResponsiveIconRadioGroupDescriptor as ResponsiveIconRadioGroupControl,\n ResponsiveIconRadioGroupValue as ResponsiveIconRadioGroupControlValue,\n ResponsiveSelectDescriptor as ResponsiveSelectControl,\n ResponsiveSelectValue as ResponsiveSelectControlValue,\n ResponsiveLengthDescriptor as ResponsiveLengthControl,\n ResponsiveLengthValue as ResponsiveLengthControlValue,\n RichTextDescriptor as RichTextControl,\n RichTextValue as RichTextControlValue,\n ShapeDescriptor as ShapeControl,\n ShapeValue as ShapeControlValue,\n TextInputDescriptor as TextInputControl,\n TextInputValue as TextInputControlValue,\n TextStyleDescriptor as TextStyleControl,\n TextStyleValue as TextStyleControlValue,\n TypeaheadDescriptor as TypeaheadControl,\n TypeaheadOptions as TypeaheadControlConfig,\n TypeaheadValue as TypeaheadControlValue,\n PanelDescriptor as PanelControl,\n PanelDescriptorType as PanelControlType,\n PanelDescriptorValueType as PanelControlValueType,\n PropControllerDescriptor as Control,\n Props as Controls,\n} from '../../prop-controllers'\nimport {\n IconRadioGroupOption,\n LengthOption,\n SelectLabelOrientation,\n SelectOption,\n Length,\n} from '../../prop-controllers/descriptors'\nimport { deserializeListControlDefinition, serializeListControlDefinition } from './controls/list'\nimport { Deserialize, Serialize } from './controls/types'\nimport {\n DeserializedFunction,\n deserializeFunction,\n isSerializedFunction,\n SerializedFunction,\n serializeFunction,\n} from './function-serialization'\n\ntype SerializedShapeControlConfig<T extends Record<string, SerializedPanelControl>> = {\n type: T\n preset?: { [K in keyof T]?: SerializedPanelControlValueType<T[K]> }\n}\n\ntype SerializedShapeControl<\n _T extends Record<string, Data>,\n U extends Record<string, SerializedPanelControl>,\n> = {\n type: typeof Controls.Types.Shape\n options: SerializedShapeControlConfig<U>\n}\n\nfunction serializeShapeControl<\n T extends Record<string, Data>,\n U extends Record<string, PanelControl>,\n>(\n control: ShapeControl<T, U>,\n): [\n SerializedShapeControl<\n T,\n { [K in keyof U]: SerializedPanelControl<PanelControlValueType<U[K]>> }\n >,\n Transferable[],\n] {\n const { type } = control.options\n const transferables: Transferable[] = []\n const serializedType = {} as {\n [K in keyof U]: SerializedPanelControl<PanelControlValueType<U[K]>>\n }\n\n Object.entries(type).forEach(([key, control]) => {\n const [serializedControl, serializedControlTransferables] = serializeControl(control)\n\n serializedType[key as keyof typeof type] = serializedControl as SerializedPanelControl\n transferables.push(...serializedControlTransferables)\n })\n\n // @ts-expect-error: preset types are incompatible\n return [{ ...control, options: { ...control.options, type: serializedType } }, transferables]\n}\n\ntype DeserializedShapeControlConfig<T extends Record<string, DeserializedPanelControl>> = {\n type: T\n preset?: { [K in keyof T]?: DeserializedPanelControlValueType<T[K]> }\n}\n\ntype DeserializedShapeControl<\n _T extends Record<string, Data>,\n U extends Record<string, DeserializedPanelControl>,\n> = {\n type: typeof Controls.Types.Shape\n options: DeserializedShapeControlConfig<U>\n}\n\nfunction deserializeShapeControl<\n T extends Record<string, Data>,\n U extends Record<string, SerializedPanelControl>,\n>(\n control: SerializedShapeControl<T, U>,\n): DeserializedShapeControl<\n T,\n { [K in keyof U]: DeserializedPanelControl<SerializedPanelControlValueType<U[K]>> }\n> {\n const { type } = control.options\n const deserializedType = {} as {\n [K in keyof U]: DeserializedPanelControl<SerializedPanelControlValueType<U[K]>>\n }\n\n Object.entries(type).forEach(([key, control]) => {\n deserializedType[key as keyof typeof type] = deserializeControl(\n control,\n ) as DeserializedPanelControl\n })\n\n // @ts-expect-error: preset types are incompatible\n return { ...control, options: { ...control.options, type: deserializedType } }\n}\n\ntype SerializedListControlConfig<T extends Data> = {\n type: SerializedPanelControl<T>\n label?: string\n getItemLabel?: SerializedFunction<Exclude<ListControlConfig<T>['getItemLabel'], undefined>>\n preset?: ListControlValue<T>\n defaultValue?: ListControlValue<T>\n}\n\ntype SerializedListControl<T extends ListControlValue = ListControlValue> = {\n type: typeof Controls.Types.List\n options: SerializedListControlConfig<T extends ListControlValue<infer U> ? U : never>\n}\n\nfunction serializeListControl<T extends Data>(\n control: ListControl<ListControlValue<T>>,\n): [SerializedListControl<ListControlValue<T>>, Transferable[]] {\n const { type, getItemLabel } = control.options\n const transferables: Transferable[] = []\n\n const [serializedType, serializedTypeTransferables] = serializeControl(type)\n const serializedGetItemLabel = getItemLabel && serializeFunction(getItemLabel)\n\n transferables.push(...serializedTypeTransferables)\n if (serializedGetItemLabel != null) transferables.push(serializedGetItemLabel)\n\n return [\n {\n ...control,\n options: {\n ...control.options,\n type: serializedType as SerializedPanelControl,\n getItemLabel: serializedGetItemLabel,\n },\n },\n transferables,\n ]\n}\n\ntype DeserializedListControlConfig<T extends Data> = {\n type: DeserializedPanelControl<T>\n label?: string\n getItemLabel?: DeserializedFunction<Exclude<ListControlConfig<T>['getItemLabel'], undefined>>\n preset?: ListControlValue<T>\n defaultValue?: ListControlValue<T>\n}\n\ntype DeserializedListControl<T extends ListControlValue = ListControlValue> = {\n type: typeof Controls.Types.List\n options: DeserializedListControlConfig<T extends ListControlValue<infer U> ? U : never>\n}\n\nfunction deserializeListControl<T extends Data>(\n serializedControl: SerializedListControl<ListControlValue<T>>,\n): DeserializedListControl<ListControlValue<T>> {\n const { type, getItemLabel } = serializedControl.options\n\n const deserializedType = deserializeControl(type) as DeserializedPanelControl\n const deserializedGetItemLabel = getItemLabel && deserializeFunction(getItemLabel)\n\n return {\n ...serializedControl,\n options: {\n ...serializedControl.options,\n type: deserializedType,\n getItemLabel: deserializedGetItemLabel,\n },\n }\n}\n\ntype SerializedTypeaheadControlConfig<T extends Data> = {\n getItems: SerializedFunction<TypeaheadControlConfig<T>['getItems']>\n label?: string\n preset?: TypeaheadControlValue<T>\n defaultValue?: TypeaheadControlValue<T>\n}\n\ntype SerializedTypeaheadControl<T extends TypeaheadControlValue = TypeaheadControlValue> = {\n type: typeof Controls.Types.Typeahead\n options: SerializedTypeaheadControlConfig<T['value']>\n}\n\nfunction serializeTypeaheadControl<T extends Data>(\n control: TypeaheadControl<TypeaheadControlValue<T>>,\n): [SerializedTypeaheadControl<TypeaheadControlValue<T>>, Transferable[]] {\n const { getItems } = control.options\n\n const serializedGetItems = getItems && serializeFunction(getItems)\n\n return [\n { ...control, options: { ...control.options, getItems: serializedGetItems } },\n serializedGetItems == null ? [] : [serializedGetItems],\n ]\n}\n\ntype DeserializedTypeaheadControlConfig<T extends Data> = {\n getItems: DeserializedFunction<TypeaheadControlConfig<T>['getItems']>\n label?: string\n preset?: TypeaheadControlValue<T>\n defaultValue?: TypeaheadControlValue<T>\n}\n\ntype DeserializedTypeaheadControl<T extends TypeaheadControlValue = TypeaheadControlValue> = {\n type: typeof Controls.Types.Typeahead\n options: DeserializedTypeaheadControlConfig<T['value']>\n}\n\nfunction deserializeTypeaheadControl<T extends Data>(\n serializedControl: SerializedTypeaheadControl<TypeaheadControlValue<T>>,\n): DeserializedTypeaheadControl<TypeaheadControlValue<T>> {\n const { getItems } = serializedControl.options\n\n const deserializedGetItems = getItems && deserializeFunction(getItems)\n\n return {\n ...serializedControl,\n options: { ...serializedControl.options, getItems: deserializedGetItems },\n }\n}\n\ntype SerializedConfig<T> =\n | T\n | SerializedFunction<(props: Record<string, unknown>, deviceMode: Device) => T>\n\ntype DeserializedConfig<T> =\n | T\n | DeserializedFunction<(props: Record<string, unknown>, deviceMode: Device) => T>\n\ntype GapXControlConfig = {\n preset?: GapXControlValue\n label?: string\n defaultValue?: Gap\n min?: number\n max?: number\n step?: number\n hidden?: boolean\n}\n\ntype SerializedGapXControl<_T = GapXControlValue> = {\n type: typeof Controls.Types.GapX\n options: SerializedConfig<GapXControlConfig>\n}\n\nfunction serializeGapXControl(control: GapXControl): [SerializedGapXControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedGapXControl<_T = GapXControlValue> = {\n type: typeof Controls.Types.GapX\n options: DeserializedConfig<GapXControlConfig>\n}\n\nfunction deserializeGapXControl(serializedControl: SerializedGapXControl): DeserializedGapXControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype GapYControlConfig = {\n preset?: GapYControlValue\n label?: string\n defaultValue?: Gap\n min?: number\n max?: number\n step?: number\n hidden?: boolean\n}\n\ntype SerializedGapYControl<_T = GapYControlValue> = {\n type: typeof Controls.Types.GapY\n options: SerializedConfig<GapYControlConfig>\n}\n\nfunction serializeGapYControl(control: GapYControl): [SerializedGapYControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedGapYControl<_T = GapYControlValue> = {\n type: typeof Controls.Types.GapY\n options: DeserializedConfig<GapYControlConfig>\n}\n\nfunction deserializeGapYControl(serializedControl: SerializedGapYControl): DeserializedGapYControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype ResponsiveNumberControlConfig = {\n preset?: ResponsiveNumberControlValue\n label?: string\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n hidden?: boolean\n}\n\ntype SerializedResponsiveNumberControl<_T = ResponsiveNumberControlValue> = {\n type: typeof Controls.Types.ResponsiveNumber\n options: SerializedConfig<ResponsiveNumberControlConfig>\n}\n\nfunction serializeResponsiveNumberControl(\n control: ResponsiveNumberControl,\n): [SerializedResponsiveNumberControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedResponsiveNumberControl<_T = ResponsiveNumberControlValue> = {\n type: typeof Controls.Types.ResponsiveNumber\n options: DeserializedConfig<ResponsiveNumberControlConfig>\n}\n\nfunction deserializeResponsiveNumberControl(\n serializedControl: SerializedResponsiveNumberControl,\n): DeserializedResponsiveNumberControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype CheckboxControlConfig = {\n preset?: CheckboxControlValue\n label: string\n hidden?: boolean\n}\n\ntype SerializedCheckboxControl<_T = CheckboxControlValue> = {\n type: typeof Controls.Types.Checkbox\n options: SerializedConfig<CheckboxControlConfig>\n}\n\nfunction serializeCheckboxControl(\n control: CheckboxControl,\n): [SerializedCheckboxControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedCheckboxControl<_T = CheckboxControlValue> = {\n type: typeof Controls.Types.Checkbox\n options: DeserializedConfig<CheckboxControlConfig>\n}\n\nfunction deserializeCheckboxControl(\n serializedControl: SerializedCheckboxControl,\n): DeserializedCheckboxControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype ResponsiveColorControlConfig = { label?: string; placeholder?: string; hidden?: boolean }\n\ntype SerializedResponsiveColorControl<_T = ResponsiveColorControlValue> = {\n type: typeof Controls.Types.ResponsiveColor\n options: SerializedConfig<ResponsiveColorControlConfig>\n}\n\nfunction serializeResponsiveColorControl(\n control: ResponsiveColorControl,\n): [SerializedResponsiveColorControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedResponsiveColorControl<_T = ResponsiveColorControlValue> = {\n type: typeof Controls.Types.ResponsiveColor\n options: DeserializedConfig<ResponsiveColorControlConfig>\n}\n\nfunction deserializeResponsiveColorControl(\n serializedControl: SerializedResponsiveColorControl,\n): DeserializedResponsiveColorControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\ntype NumberControlConfig = {\n preset?: NumberControlValue\n label?: string\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n suffix?: string\n hidden?: boolean\n}\n\ntype SerializedNumberControl<_T = NumberControlValue> = {\n type: typeof Controls.Types.Number\n options: SerializedConfig<NumberControlConfig>\n}\n\nfunction serializeNumberControl(control: NumberControl): [SerializedNumberControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedNumberControl<_T = NumberControlValue> = {\n type: typeof Controls.Types.Number\n options: DeserializedConfig<NumberControlConfig>\n}\n\nfunction deserializeNumberControl(\n serializedControl: SerializedNumberControl,\n): DeserializedNumberControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\ntype ResponsiveIconRadioGroupControlConfig<T extends string = string, U extends T = T> = {\n label?: string\n options: IconRadioGroupOption<T>[]\n defaultValue?: U\n hidden?: boolean\n}\n\ntype SerializedResponsiveIconRadioGroupControl<_T = ResponsiveIconRadioGroupControlValue> = {\n type: typeof Controls.Types.ResponsiveIconRadioGroup\n options: SerializedConfig<ResponsiveIconRadioGroupControlConfig>\n}\n\nfunction serializeResponsiveIconRadioGroupControl(\n control: ResponsiveIconRadioGroupControl,\n): [SerializedResponsiveIconRadioGroupControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedResponsiveIconRadioGroupControl<_T = ResponsiveIconRadioGroupControlValue> = {\n type: typeof Controls.Types.ResponsiveIconRadioGroup\n options: DeserializedConfig<ResponsiveIconRadioGroupControlConfig>\n}\n\nfunction deserializeResponsiveIconRadioGroupControl(\n serializedControl: SerializedResponsiveIconRadioGroupControl,\n): DeserializedResponsiveIconRadioGroupControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype DateControlConfig = { preset?: DateControlValue }\n\ntype SerializedDateControl<_T = DateControlValue> = {\n type: typeof Controls.Types.Date\n options: SerializedConfig<DateControlConfig>\n}\n\nfunction serializeDateControl(control: DateControl): [SerializedDateControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedDateControl<_T = DateControlValue> = {\n type: typeof Controls.Types.Date\n options: DeserializedConfig<DateControlConfig>\n}\n\nfunction deserializeDateControl(serializedControl: SerializedDateControl): DeserializedDateControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype LinkControlConfig = {\n preset?: LinkControlValue\n label?: string\n defaultValue?: LinkControlValue\n options?: { value: LinkControlValue['type']; label: string }[]\n hidden?: boolean\n}\n\ntype SerializedLinkControl<_T = LinkControlValue> = {\n type: typeof Controls.Types.Link\n options: SerializedConfig<LinkControlConfig>\n}\n\nfunction serializeLinkControl(control: LinkControl): [SerializedLinkControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedLinkControl<_T = LinkControlValue> = {\n type: typeof Controls.Types.Link\n options: DeserializedConfig<LinkControlConfig>\n}\n\nfunction deserializeLinkControl(serializedControl: SerializedLinkControl): DeserializedLinkControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype TextInputControlConfig = { label?: string; placeholder?: string; hidden?: boolean }\n\ntype SerializedTextInputControl<_T = TextInputControlValue> = {\n type: typeof Controls.Types.TextInput\n options: SerializedConfig<TextInputControlConfig>\n}\n\nfunction serializeTextInputControl(\n control: TextInputControl,\n): [SerializedTextInputControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedTextInputControl<_T = TextInputControlValue> = {\n type: typeof Controls.Types.TextInput\n options: DeserializedConfig<TextInputControlConfig>\n}\n\nfunction deserializeTextInputControl(\n serializedControl: SerializedTextInputControl,\n): DeserializedTextInputControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype SerializedResponsiveSelectControl<_T = ResponsiveSelectControlValue> = {\n type: typeof Controls.Types.ResponsiveSelect\n options: SerializedConfig<ResponsiveSelectControlConfig>\n}\n\nfunction serializeResponsiveSelectControl(\n control: ResponsiveSelectControl,\n): [SerializedResponsiveSelectControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype ResponsiveSelectControlConfig<T extends string = string, U extends T = T> = {\n label?: string\n labelOrientation?: SelectLabelOrientation\n options: SelectOption<T>[]\n defaultValue?: U\n hidden?: boolean\n}\n\ntype DeserializedResponsiveSelectControl<_T = ResponsiveSelectControlValue> = {\n type: typeof Controls.Types.ResponsiveSelect\n options: DeserializedConfig<ResponsiveSelectControlConfig>\n}\n\nfunction deserializeResponsiveSelectControl(\n serializedControl: SerializedResponsiveSelectControl,\n): DeserializedResponsiveSelectControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype ResponsiveLengthControlConfig = {\n label?: string\n options?: LengthOption[]\n defaultValue?: Length\n hidden?: boolean\n}\n\ntype SerializedResponsiveLengthControl<_T = ResponsiveLengthControlValue> = {\n type: typeof Controls.Types.ResponsiveLength\n options: SerializedConfig<ResponsiveLengthControlConfig>\n}\n\nfunction serializeResponsiveLengthControl(\n control: ResponsiveLengthControl,\n): [SerializedResponsiveLengthControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedResponsiveLengthControl<_T = ResponsiveLengthControlValue> = {\n type: typeof Controls.Types.ResponsiveLength\n options: DeserializedConfig<ResponsiveLengthControlConfig>\n}\n\nfunction deserializeResponsiveLengthControl(\n serializedControl: SerializedResponsiveLengthControl,\n): DeserializedResponsiveLengthControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype SerializedTextStyleControl<_T = TextStyleControlValue> = {\n type: typeof Controls.Types.TextStyle\n options: SerializedConfig<TextStyleControlConfig>\n}\n\nfunction serializeTextStyleControl(\n control: TextStyleControl,\n): [SerializedTextStyleControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype TextStyleControlConfig = {\n preset?: TextStyleControlValue\n label?: string\n hidden?: boolean\n}\n\ntype DeserializedTextStyleControl<_T = TextStyleControlValue> = {\n type: typeof Controls.Types.TextStyle\n options: DeserializedConfig<TextStyleControlConfig>\n}\n\nfunction deserializeTextStyleControl(\n serializedControl: SerializedTextStyleControl,\n): DeserializedTextStyleControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype ImageControlConfig = { label?: string; hidden?: boolean }\n\ntype SerializedImageControl<_T = ImageControlValue> = {\n type: typeof Controls.Types.Image\n options: SerializedConfig<ImageControlConfig>\n}\n\nfunction serializeImageControl(control: ImageControl): [SerializedImageControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedImageControl<_T = ImageControlValue> = {\n type: typeof Controls.Types.Image\n options: DeserializedConfig<ImageControlConfig>\n}\n\nfunction deserializeImageControl(\n serializedControl: SerializedImageControl,\n): DeserializedImageControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype RichTextControlConfig = { preset?: RichTextControlValue }\n\ntype SerializedRichTextControl<_T = RichTextControlValue> = {\n type: typeof Controls.Types.RichText\n options: SerializedConfig<RichTextControlConfig>\n}\n\nfunction serializeRichTextControl(\n control: RichTextControl,\n): [SerializedRichTextControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedRichTextControl<_T = RichTextControlValue> = {\n type: typeof Controls.Types.RichText\n options: DeserializedConfig<RichTextControlConfig>\n}\n\nfunction deserializeRichTextControl(\n serializedControl: SerializedRichTextControl,\n): DeserializedRichTextControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\nexport type SerializedControl<T extends Data = Data> =\n | Exclude<\n Control<T>,\n | ListControl<T extends ListControlValue ? T : ListControlValue>\n | ShapeControl<T extends ShapeControlValue ? T : ShapeControlValue, any>\n | TypeaheadControl<T extends TypeaheadControlValue ? T : TypeaheadControlValue>\n | GapXControl<T>\n | GapYControl<T>\n | ResponsiveNumberControl<T>\n | CheckboxControl<T>\n | ResponsiveColorControl<T>\n | NumberControl<T>\n | ResponsiveIconRadioGroupControl<\n T extends ResponsiveIconRadioGroupControlValue ? T : ResponsiveIconRadioGroupControlValue\n >\n | ResponsiveSelectControl<\n T extends ResponsiveSelectControlValue ? T : ResponsiveSelectControlValue\n >\n | ResponsiveLengthControl<T>\n | DateControl<T>\n | LinkControl<T>\n | TextInputControl<T>\n | TextStyleControl<T>\n | ImageControl<T>\n | RichTextControl<T>\n | ListControlDefinition\n >\n | SerializedListControl<T extends ListControlValue ? T : ListControlValue>\n | SerializedShapeControl<T extends ShapeControlValue ? T : ShapeControlValue, any>\n | SerializedTypeaheadControl<T extends TypeaheadControlValue ? T : TypeaheadControlValue>\n | SerializedGapXControl<T>\n | SerializedGapYControl<T>\n | SerializedResponsiveNumberControl<T>\n | SerializedCheckboxControl<T>\n | SerializedResponsiveColorControl<T>\n | SerializedNumberControl<T>\n | SerializedResponsiveIconRadioGroupControl<T>\n | SerializedResponsiveSelectControl<T>\n | SerializedResponsiveLengthControl<T>\n | SerializedDateControl<T>\n | SerializedLinkControl<T>\n | SerializedTextInputControl<T>\n | SerializedTextStyleControl<T>\n | SerializedImageControl<T>\n | SerializedRichTextControl<T>\n | Serialize<ListControlDefinition>\n\ntype SerializedPanelControl<T extends Data = Data> = Extract<\n SerializedControl<T>,\n { type: PanelControlType }\n>\n\ntype SerializedPanelControlValueType<T extends SerializedPanelControl> =\n T extends SerializedPanelControl<infer U> ? U : never\n\nexport type DeserializedControl<T extends Data = Data> =\n | Exclude<\n Control<T>,\n | ListControl<T extends ListControlValue ? T : ListControlValue>\n | ShapeControl<T extends ShapeControlValue ? T : ShapeControlValue, any>\n | TypeaheadControl<T extends TypeaheadControlValue ? T : TypeaheadControlValue>\n | GapXControl<T>\n | GapYControl<T>\n | ResponsiveNumberControl<T>\n | CheckboxControl<T>\n | ResponsiveColorControl<T>\n | NumberControl<T>\n | ResponsiveIconRadioGroupControl<\n T extends ResponsiveIconRadioGroupControlValue ? T : ResponsiveIconRadioGroupControlValue\n >\n | ResponsiveSelectControl<\n T extends ResponsiveSelectControlValue ? T : ResponsiveSelectControlValue\n >\n | ResponsiveLengthControl<T>\n | DateControl<T>\n | LinkControl<T>\n | TextInputControl<T>\n | TextStyleControl<T>\n | ImageControl<T>\n | RichTextControl<T>\n | ListControlDefinition\n >\n | DeserializedListControl<T extends ListControlValue ? T : ListControlValue>\n | DeserializedShapeControl<T extends ShapeControlValue ? T : ShapeControlValue, any>\n | DeserializedTypeaheadControl<T extends TypeaheadControlValue ? T : TypeaheadControlValue>\n | DeserializedGapXControl<T>\n | DeserializedGapYControl<T>\n | DeserializedResponsiveNumberControl<T>\n | DeserializedCheckboxControl<T>\n | DeserializedResponsiveColorControl<T>\n | DeserializedNumberControl<T>\n | DeserializedResponsiveIconRadioGroupControl<T>\n | DeserializedResponsiveSelectControl<T>\n | DeserializedResponsiveLengthControl<T>\n | DeserializedDateControl<T>\n | DeserializedLinkControl<T>\n | DeserializedTextInputControl<T>\n | DeserializedTextStyleControl<T>\n | DeserializedImageControl<T>\n | DeserializedRichTextControl<T>\n | Deserialize<Serialize<ListControlDefinition>>\n\nexport type DeserializedPanelControl<T extends Data = Data> = Extract<\n DeserializedControl<T>,\n { type: PanelControlType }\n>\n\ntype DeserializedPanelControlValueType<T extends DeserializedPanelControl> =\n T extends DeserializedPanelControl<infer U> ? U : never\n\nfunction serializeControl<T extends Data>(\n control: Control<T>,\n): [SerializedControl<T>, Transferable[]] {\n switch (control.type) {\n case Controls.Types.Checkbox:\n return serializeCheckboxControl(control)\n\n case Controls.Types.List:\n return serializeListControl(control)\n\n case Controls.Types.Shape:\n return serializeShapeControl(control)\n\n case Controls.Types.Typeahead:\n return serializeTypeaheadControl(control)\n\n case Controls.Types.GapX:\n return serializeGapXControl(control)\n\n case Controls.Types.GapY:\n return serializeGapYControl(control)\n\n case Controls.Types.ResponsiveColor:\n return serializeResponsiveColorControl(control)\n\n case Controls.Types.ResponsiveNumber:\n return serializeResponsiveNumberControl(control)\n\n case Controls.Types.Number:\n return serializeNumberControl(control)\n\n case Controls.Types.ResponsiveIconRadioGroup:\n return serializeResponsiveIconRadioGroupControl(control)\n\n case Controls.Types.ResponsiveSelect:\n return serializeResponsiveSelectControl(control)\n\n case Controls.Types.ResponsiveLength:\n return serializeResponsiveLengthControl(control)\n\n case Controls.Types.Date:\n return serializeDateControl(control)\n\n case Controls.Types.Link:\n return serializeLinkControl(control)\n\n case Controls.Types.TextInput:\n return serializeTextInputControl(control)\n\n case Controls.Types.TextStyle:\n return serializeTextStyleControl(control)\n\n case Controls.Types.Image:\n return serializeImageControl(control)\n\n case Controls.Types.RichText:\n return serializeRichTextControl(control)\n\n case ListControlType:\n return serializeListControlDefinition(control)\n\n default:\n return [control, []]\n }\n}\n\nfunction deserializeControl<T extends Data>(\n serializedControl: SerializedControl<T>,\n): DeserializedControl<T> {\n switch (serializedControl.type) {\n case Controls.Types.Checkbox:\n return deserializeCheckboxControl(serializedControl)\n\n case Controls.Types.List:\n return deserializeListControl(serializedControl)\n\n case Controls.Types.Shape:\n return deserializeShapeControl(serializedControl)\n\n case Controls.Types.Typeahead:\n return deserializeTypeaheadControl(serializedControl)\n\n case Controls.Types.GapX:\n return deserializeGapXControl(serializedControl)\n\n case Controls.Types.GapY:\n return deserializeGapYControl(serializedControl)\n\n case Controls.Types.ResponsiveColor:\n return deserializeResponsiveColorControl(serializedControl)\n\n case Controls.Types.ResponsiveNumber:\n return deserializeResponsiveNumberControl(serializedControl)\n\n case Controls.Types.Number:\n return deserializeNumberControl(serializedControl)\n\n case Controls.Types.ResponsiveIconRadioGroup:\n return deserializeResponsiveIconRadioGroupControl(serializedControl)\n\n case Controls.Types.ResponsiveSelect:\n return deserializeResponsiveSelectControl(serializedControl)\n\n case Controls.Types.ResponsiveLength:\n return deserializeResponsiveLengthControl(serializedControl)\n\n case Controls.Types.Date:\n return deserializeDateControl(serializedControl)\n\n case Controls.Types.Link:\n return deserializeLinkControl(serializedControl)\n\n case Controls.Types.TextInput:\n return deserializeTextInputControl(serializedControl)\n\n case Controls.Types.TextStyle:\n return deserializeTextStyleControl(serializedControl)\n\n case Controls.Types.Image:\n return deserializeImageControl(serializedControl)\n\n case Controls.Types.RichText:\n return deserializeRichTextControl(serializedControl)\n\n case ListControlType:\n return deserializeListControlDefinition(serializedControl)\n\n default:\n return serializedControl\n }\n}\n\nexport function serializeControls(\n controls: Record<string, Control>,\n): [Record<string, SerializedControl>, Transferable[]] {\n return Object.entries(controls).reduce(\n ([accControls, accTransferables], [key, control]) => {\n const [serializedControl, transferables] = serializeControl(control)\n\n return [{ ...accControls, [key]: serializedControl }, [...accTransferables, ...transferables]]\n },\n [{}, []] as [Record<string, SerializedControl>, Transferable[]],\n )\n}\n\nexport function deserializeControls(\n serializedControls: Record<string, SerializedControl>,\n): Record<string, DeserializedControl> {\n return Object.entries(serializedControls).reduce(\n (deserializedControls, [key, serializedControl]) => {\n return { ...deserializedControls, [key]: deserializeControl(serializedControl) }\n },\n {} as Record<string, DeserializedControl>,\n )\n}\n"],"names":["Controls.Types"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAcO,8BAA8B,OAAsD;AACzF,SAAO,iBAAiB;AAC1B;AAIO,2BAAkD,MAAgC;AAGjF,QAAA,iBAAiB,IAAI;AAE3B,iBAAe,MAAM,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,YAA8B;AAC/E,YAAQ,QACL,EAAA,KAAK,MAAM,KAAK,MAAM,MAAM,IAAI,CAAC,EACjC,KAAK,CAAA,WAAU,eAAe,MAAM,YAAY,CAAC,QAAQ,MAAM,CAAC,CAAC;AAAA,EAAA;AAGtE,SAAO,eAAe;AACxB;AAEO,6BACL,oBACyB;AAKzB,MAAI,aAAa;AACX,QAAA,4BAAY;AAElB,qBAAmB,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,cAAkC;;AAC3E,gBAAA,IAAI,MAAM,MAAV,mBAAc;AAEpB,UAAM,OAAO,MAAM;AAAA,EAAA;AAGrB,SAAO,iCAAiC,MAAM;AACrC,WAAA,IAAI,QAAQ,CAAW,YAAA;AAC5B,YAAM,SAAS;AAET,YAAA,IAAI,QAAQ,OAAO;AAEzB,yBAAmB,YAAY,CAAC,QAAQ,IAAI,CAAC;AAAA,IAAA,CAC9C;AAAA,EAAA;AAEL;ACvDO,wCACL,YACoD;AACpD,QAAM,eACJ,WAAW,OAAO,gBAAgB,kBAAkB,WAAW,OAAO,YAAY;AACpF,QAAM,gBAAgB,CAAA;AAElB,MAAA;AAAc,kBAAc,KAAK,YAAY;AAE1C,SAAA,CAAC,iCAAK,aAAL,EAAiB,QAAQ,iCAAK,WAAW,SAAhB,EAAwB,aAAA,OAAkB,aAAa;AAC1F;AAEO,0CACL,YAC+C;AAC/C,QAAM,eACJ,WAAW,OAAO,gBAAgB,oBAAoB,WAAW,OAAO,YAAY;AAEtF,SAAO,iCAAK,aAAL,EAAiB,QAAQ,iCAAK,WAAW,SAAhB,EAAwB;AAC1D;ACwDA,+BAIE,SAOA;AACM,QAAA,EAAE,SAAS,QAAQ;AACzB,QAAM,gBAAgC,CAAA;AACtC,QAAM,iBAAiB,CAAA;AAIvB,SAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,cAAa;AAC/C,UAAM,CAAC,mBAAmB,kCAAkC,iBAAiB,QAAO;AAEpF,mBAAe,OAA4B;AAC7B,kBAAA,KAAK,GAAG,8BAA8B;AAAA,EAAA,CACrD;AAGM,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,iCAAK,QAAQ,UAAb,EAAsB,MAAM,kBAAiB,IAAG,aAAa;AAC9F;AAeA,iCAIE,SAIA;AACM,QAAA,EAAE,SAAS,QAAQ;AACzB,QAAM,mBAAmB,CAAA;AAIzB,SAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,cAAa;AAC9B,qBAAA,OAA4B,mBAC3C,QACF;AAAA,EAAA,CACD;AAGM,SAAA,iCAAK,UAAL,EAAc,SAAS,iCAAK,QAAQ,UAAb,EAAsB,MAAM;AAC5D;AAeA,8BACE,SAC8D;AACxD,QAAA,EAAE,MAAM,iBAAiB,QAAQ;AACvC,QAAM,gBAAgC,CAAA;AAEtC,QAAM,CAAC,gBAAgB,+BAA+B,iBAAiB,IAAI;AACrE,QAAA,yBAAyB,gBAAgB,kBAAkB,YAAY;AAE/D,gBAAA,KAAK,GAAG,2BAA2B;AACjD,MAAI,0BAA0B;AAAM,kBAAc,KAAK,sBAAsB;AAEtE,SAAA;AAAA,IACL,iCACK,UADL;AAAA,MAEE,SAAS,iCACJ,QAAQ,UADJ;AAAA,QAEP,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA;AAAA,EAAA;AAEJ;AAeA,gCACE,mBAC8C;AACxC,QAAA,EAAE,MAAM,iBAAiB,kBAAkB;AAE3C,QAAA,mBAAmB,mBAAmB,IAAI;AAC1C,QAAA,2BAA2B,gBAAgB,oBAAoB,YAAY;AAE1E,SAAA,iCACF,oBADE;AAAA,IAEL,SAAS,iCACJ,kBAAkB,UADd;AAAA,MAEP,MAAM;AAAA,MACN,cAAc;AAAA,IAChB;AAAA,EAAA;AAEJ;AAcA,mCACE,SACwE;AAClE,QAAA,EAAE,aAAa,QAAQ;AAEvB,QAAA,qBAAqB,YAAY,kBAAkB,QAAQ;AAE1D,SAAA;AAAA,IACL,iCAAK,UAAL,EAAc,SAAS,iCAAK,QAAQ,UAAb,EAAsB,UAAU,sBAAqB;AAAA,IAC5E,sBAAsB,OAAO,KAAK,CAAC,kBAAkB;AAAA,EAAA;AAEzD;AAcA,qCACE,mBACwD;AAClD,QAAA,EAAE,aAAa,kBAAkB;AAEjC,QAAA,uBAAuB,YAAY,oBAAoB,QAAQ;AAE9D,SAAA,iCACF,oBADE;AAAA,IAEL,SAAS,iCAAK,kBAAkB,UAAvB,EAAgC,UAAU,qBAAqB;AAAA,EAAA;AAE5E;AAyBA,8BAA8B,SAA+D;AAC3F,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,gCAAgC,mBAAmE;AACjG,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAiBA,8BAA8B,SAA+D;AAC3F,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,gCAAgC,mBAAmE;AACjG,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAiBA,0CACE,SACqD;AACrD,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,4CACE,mBACqC;AACrC,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAaA,kCACE,SAC6C;AAC7C,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,oCACE,mBAC6B;AAC7B,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AASA,yCACE,SACoD;AACpD,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,2CACE,mBACoC;AACpC,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAiBA,gCAAgC,SAAmE;AACjG,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,kCACE,mBAC2B;AAC3B,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAaA,kDACE,SAC6D;AAC7D,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,oDACE,mBAC6C;AAC7C,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AASA,8BAA8B,SAA+D;AAC3F,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,gCAAgC,mBAAmE;AACjG,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAeA,8BAA8B,SAA+D;AAC3F,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,gCAAgC,mBAAmE;AACjG,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AASA,mCACE,SAC8C;AAC9C,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,qCACE,mBAC8B;AAC9B,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAOA,0CACE,SACqD;AACrD,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAeA,4CACE,mBACqC;AACrC,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAcA,0CACE,SACqD;AACrD,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,4CACE,mBACqC;AACrC,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAOA,mCACE,SAC8C;AAC9C,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAaA,qCACE,mBAC8B;AAC9B,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AASA,+BAA+B,SAAiE;AAC9F,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,iCACE,mBAC0B;AAC1B,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AASA,kCACE,SAC6C;AAC7C,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,oCACE,mBAC6B;AAC7B,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAgHA,0BACE,SACwC;AACxC,UAAQ,QAAQ;AAAA,SACTA,MAAe;AAClB,aAAO,yBAAyB,OAAO;AAAA,SAEpCA,MAAe;AAClB,aAAO,qBAAqB,OAAO;AAAA,SAEhCA,MAAe;AAClB,aAAO,sBAAsB,OAAO;AAAA,SAEjCA,MAAe;AAClB,aAAO,0BAA0B,OAAO;AAAA,SAErCA,MAAe;AAClB,aAAO,qBAAqB,OAAO;AAAA,SAEhCA,MAAe;AAClB,aAAO,qBAAqB,OAAO;AAAA,SAEhCA,MAAe;AAClB,aAAO,gCAAgC,OAAO;AAAA,SAE3CA,MAAe;AAClB,aAAO,iCAAiC,OAAO;AAAA,SAE5CA,MAAe;AAClB,aAAO,uBAAuB,OAAO;AAAA,SAElCA,MAAe;AAClB,aAAO,yCAAyC,OAAO;AAAA,SAEpDA,MAAe;AAClB,aAAO,iCAAiC,OAAO;AAAA,SAE5CA,MAAe;AAClB,aAAO,iCAAiC,OAAO;AAAA,SAE5CA,MAAe;AAClB,aAAO,qBAAqB,OAAO;AAAA,SAEhCA,MAAe;AAClB,aAAO,qBAAqB,OAAO;AAAA,SAEhCA,MAAe;AAClB,aAAO,0BAA0B,OAAO;AAAA,SAErCA,MAAe;AAClB,aAAO,0BAA0B,OAAO;AAAA,SAErCA,MAAe;AAClB,aAAO,sBAAsB,OAAO;AAAA,SAEjCA,MAAe;AAClB,aAAO,yBAAyB,OAAO;AAAA,SAEpC;AACH,aAAO,+BAA+B,OAAO;AAAA;AAGtC,aAAA,CAAC,SAAS,CAAA,CAAE;AAAA;AAEzB;AAEA,4BACE,mBACwB;AACxB,UAAQ,kBAAkB;AAAA,SACnBA,MAAe;AAClB,aAAO,2BAA2B,iBAAiB;AAAA,SAEhDA,MAAe;AAClB,aAAO,uBAAuB,iBAAiB;AAAA,SAE5CA,MAAe;AAClB,aAAO,wBAAwB,iBAAiB;AAAA,SAE7CA,MAAe;AAClB,aAAO,4BAA4B,iBAAiB;AAAA,SAEjDA,MAAe;AAClB,aAAO,uBAAuB,iBAAiB;AAAA,SAE5CA,MAAe;AAClB,aAAO,uBAAuB,iBAAiB;AAAA,SAE5CA,MAAe;AAClB,aAAO,kCAAkC,iBAAiB;AAAA,SAEvDA,MAAe;AAClB,aAAO,mCAAmC,iBAAiB;AAAA,SAExDA,MAAe;AAClB,aAAO,yBAAyB,iBAAiB;AAAA,SAE9CA,MAAe;AAClB,aAAO,2CAA2C,iBAAiB;AAAA,SAEhEA,MAAe;AAClB,aAAO,mCAAmC,iBAAiB;AAAA,SAExDA,MAAe;AAClB,aAAO,mCAAmC,iBAAiB;AAAA,SAExDA,MAAe;AAClB,aAAO,uBAAuB,iBAAiB;AAAA,SAE5CA,MAAe;AAClB,aAAO,uBAAuB,iBAAiB;AAAA,SAE5CA,MAAe;AAClB,aAAO,4BAA4B,iBAAiB;AAAA,SAEjDA,MAAe;AAClB,aAAO,4BAA4B,iBAAiB;AAAA,SAEjDA,MAAe;AAClB,aAAO,wBAAwB,iBAAiB;AAAA,SAE7CA,MAAe;AAClB,aAAO,2BAA2B,iBAAiB;AAAA,SAEhD;AACH,aAAO,iCAAiC,iBAAiB;AAAA;AAGlD,aAAA;AAAA;AAEb;AAEO,2BACL,UACqD;AAC9C,SAAA,OAAO,QAAQ,QAAQ,EAAE,OAC9B,CAAC,CAAC,aAAa,mBAAmB,CAAC,KAAK,aAAa;AACnD,UAAM,CAAC,mBAAmB,iBAAiB,iBAAiB,OAAO;AAE5D,WAAA,CAAC,iCAAK,cAAL,GAAmB,MAAM,sBAAqB,CAAC,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAAA,EAAA,GAE/F,CAAC,CAAA,GAAI,CAAE,CAAA,CACT;AACF;AAEO,6BACL,oBACqC;AAC9B,SAAA,OAAO,QAAQ,kBAAkB,EAAE,OACxC,CAAC,sBAAsB,CAAC,KAAK,uBAAuB;AAClD,WAAO,iCAAK,uBAAL,GAA4B,MAAM,mBAAmB,iBAAiB;EAC/E,GACA,CACF,CAAA;AACF;;"}
1
+ {"version":3,"file":"control-serialization.es.js","sources":["../src/builder/serialization/function-serialization.ts","../src/builder/serialization/controls/list.ts","../src/builder/serialization/control-serialization.ts"],"sourcesContent":["declare const SerializedFunctionTag: unique symbol\n\ntype AnyFunction = (...args: any) => any\n\nexport type SerializedFunction<T extends AnyFunction> = MessagePort & {\n readonly [SerializedFunctionTag]: T\n}\n\ntype SerializedFunctionReturnType<T extends AnyFunction> = Awaited<ReturnType<T>>\n\nexport type DeserializedFunction<T extends AnyFunction> = (\n ...args: Parameters<T>\n) => Promise<SerializedFunctionReturnType<T>>\n\nexport function isSerializedFunction(value: any): value is SerializedFunction<AnyFunction> {\n return value instanceof MessagePort\n}\n\ntype CallID = number\n\nexport function serializeFunction<T extends AnyFunction>(func: T): SerializedFunction<T> {\n type CallMessageEvent = MessageEvent<[CallID, Parameters<T>]>\n\n const messageChannel = new MessageChannel()\n\n messageChannel.port1.onmessage = ({ data: [callId, args] }: CallMessageEvent) => {\n Promise.resolve()\n .then(() => func.apply(null, args))\n .then(result => messageChannel.port1.postMessage([callId, result]))\n }\n\n return messageChannel.port2 as SerializedFunction<T>\n}\n\nexport function deserializeFunction<T extends AnyFunction>(\n serializedFunction: SerializedFunction<T>,\n): DeserializedFunction<T> {\n type Result = SerializedFunctionReturnType<T>\n type ResultMessageEvent = MessageEvent<[CallID, Result]>\n type ResolveCallPromise = (value: Result | PromiseLike<Result>) => void\n\n let nextCallId = 0\n const calls = new Map<CallID, ResolveCallPromise>()\n\n serializedFunction.onmessage = ({ data: [callId, result] }: ResultMessageEvent) => {\n calls.get(callId)?.(result)\n\n calls.delete(callId)\n }\n\n return function deserializedFunction(...args) {\n return new Promise(resolve => {\n const callId = nextCallId++\n\n calls.set(callId, resolve)\n\n serializedFunction.postMessage([callId, args])\n })\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('serializeFunction & deserializeFunction', () => {\n test('simple call', async () => {\n // Arrange\n const add = deserializeFunction(serializeFunction((a, b) => a + b))\n\n // Act\n const result = await add(2, 2)\n\n // Assert\n expect(result).toBe(4)\n })\n\n test('multiple synchronous calls', async () => {\n // Arrange\n const add = deserializeFunction(serializeFunction((a, b) => a + b))\n\n // Act\n const results = await Promise.all(Array.from({ length: 5 }, (_, i) => add(1, i)))\n\n // Assert\n expect(results).toEqual([1, 2, 3, 4, 5])\n })\n })\n\n describe.concurrent('isSerializedFunction', () => {\n test('trivial case', () => {\n // Arrange\n const add = serializeFunction((a, b) => a + b)\n\n // Act\n const result = isSerializedFunction(add)\n\n // Assert\n expect(result).toBe(true)\n })\n\n test('false positive', () => {\n // Arrange\n const add = (a: number, b: number) => a + b\n\n // Act\n const result = isSerializedFunction(add)\n\n // Assert\n expect(result).toBe(false)\n })\n })\n}\n","import { ListControlDefinition } from '../../../controls'\nimport { deserializeControl, serializeControl } from '../control-serialization'\nimport { deserializeFunction, serializeFunction } from '../function-serialization'\nimport { Deserialize, Serialize } from './types'\n\nexport function serializeListControlDefinition(\n definition: ListControlDefinition,\n): [Serialize<ListControlDefinition>, Transferable[]] {\n const [type, transferables] = serializeControl(definition.config.type)\n const getItemLabel =\n definition.config.getItemLabel && serializeFunction(definition.config.getItemLabel)\n\n if (getItemLabel) transferables.push(getItemLabel)\n\n return [\n { ...definition, config: { ...definition.config, type, getItemLabel } },\n transferables,\n ] as [Serialize<ListControlDefinition>, Transferable[]]\n}\n\nexport function deserializeListControlDefinition(\n definition: Serialize<ListControlDefinition>,\n): Deserialize<Serialize<ListControlDefinition>> {\n const type = deserializeControl(definition.config.type)\n const getItemLabel =\n definition.config.getItemLabel && deserializeFunction(definition.config.getItemLabel)\n\n return {\n ...definition,\n config: { ...definition.config, type, getItemLabel },\n } as Deserialize<Serialize<ListControlDefinition>>\n}\n","import { ListControlDefinition, ListControlType } from '../../controls'\nimport {\n CheckboxDescriptor as CheckboxControl,\n CheckboxValue as CheckboxControlValue,\n Data,\n Device,\n DateDescriptor as DateControl,\n DateValue as DateControlValue,\n Gap,\n GapXDescriptor as GapXControl,\n GapXValue as GapXControlValue,\n GapYDescriptor as GapYControl,\n GapYValue as GapYControlValue,\n ImageDescriptor as ImageControl,\n ImageValue as ImageControlValue,\n LinkDescriptor as LinkControl,\n LinkValue as LinkControlValue,\n ListDescriptor as ListControl,\n ListOptions as ListControlConfig,\n ListValue as ListControlValue,\n NumberDescriptor as NumberControl,\n NumberValue as NumberControlValue,\n ResponsiveColorDescriptor as ResponsiveColorControl,\n ResponsiveColorValue as ResponsiveColorControlValue,\n ResponsiveNumberDescriptor as ResponsiveNumberControl,\n ResponsiveNumberValue as ResponsiveNumberControlValue,\n ResponsiveIconRadioGroupDescriptor as ResponsiveIconRadioGroupControl,\n ResponsiveIconRadioGroupValue as ResponsiveIconRadioGroupControlValue,\n ResponsiveSelectDescriptor as ResponsiveSelectControl,\n ResponsiveSelectValue as ResponsiveSelectControlValue,\n ResponsiveLengthDescriptor as ResponsiveLengthControl,\n ResponsiveLengthValue as ResponsiveLengthControlValue,\n RichTextDescriptor as RichTextControl,\n RichTextValue as RichTextControlValue,\n ShapeDescriptor as ShapeControl,\n ShapeValue as ShapeControlValue,\n TextInputDescriptor as TextInputControl,\n TextInputValue as TextInputControlValue,\n TextStyleDescriptor as TextStyleControl,\n TextStyleValue as TextStyleControlValue,\n TypeaheadDescriptor as TypeaheadControl,\n TypeaheadOptions as TypeaheadControlConfig,\n TypeaheadValue as TypeaheadControlValue,\n PanelDescriptor as PanelControl,\n PanelDescriptorType as PanelControlType,\n PanelDescriptorValueType as PanelControlValueType,\n PropControllerDescriptor as Control,\n Props as Controls,\n} from '../../prop-controllers'\nimport {\n IconRadioGroupOption,\n LengthOption,\n SelectLabelOrientation,\n SelectOption,\n Length,\n} from '../../prop-controllers/descriptors'\nimport { deserializeListControlDefinition, serializeListControlDefinition } from './controls/list'\nimport { Deserialize, Serialize } from './controls/types'\nimport {\n DeserializedFunction,\n deserializeFunction,\n isSerializedFunction,\n SerializedFunction,\n serializeFunction,\n} from './function-serialization'\n\ntype SerializedShapeControlConfig<T extends Record<string, SerializedPanelControl>> = {\n type: T\n preset?: { [K in keyof T]?: SerializedPanelControlValueType<T[K]> }\n}\n\ntype SerializedShapeControl<\n _T extends Record<string, Data>,\n U extends Record<string, SerializedPanelControl>,\n> = {\n type: typeof Controls.Types.Shape\n options: SerializedShapeControlConfig<U>\n}\n\nfunction serializeShapeControl<\n T extends Record<string, Data>,\n U extends Record<string, PanelControl>,\n>(\n control: ShapeControl<T, U>,\n): [\n SerializedShapeControl<\n T,\n { [K in keyof U]: SerializedPanelControl<PanelControlValueType<U[K]>> }\n >,\n Transferable[],\n] {\n const { type } = control.options\n const transferables: Transferable[] = []\n const serializedType = {} as {\n [K in keyof U]: SerializedPanelControl<PanelControlValueType<U[K]>>\n }\n\n Object.entries(type).forEach(([key, control]) => {\n const [serializedControl, serializedControlTransferables] = serializeControl(control)\n\n serializedType[key as keyof typeof type] = serializedControl as SerializedPanelControl\n transferables.push(...serializedControlTransferables)\n })\n\n // @ts-expect-error: preset types are incompatible\n return [{ ...control, options: { ...control.options, type: serializedType } }, transferables]\n}\n\ntype DeserializedShapeControlConfig<T extends Record<string, DeserializedPanelControl>> = {\n type: T\n preset?: { [K in keyof T]?: DeserializedPanelControlValueType<T[K]> }\n}\n\ntype DeserializedShapeControl<\n _T extends Record<string, Data>,\n U extends Record<string, DeserializedPanelControl>,\n> = {\n type: typeof Controls.Types.Shape\n options: DeserializedShapeControlConfig<U>\n}\n\nfunction deserializeShapeControl<\n T extends Record<string, Data>,\n U extends Record<string, SerializedPanelControl>,\n>(\n control: SerializedShapeControl<T, U>,\n): DeserializedShapeControl<\n T,\n { [K in keyof U]: DeserializedPanelControl<SerializedPanelControlValueType<U[K]>> }\n> {\n const { type } = control.options\n const deserializedType = {} as {\n [K in keyof U]: DeserializedPanelControl<SerializedPanelControlValueType<U[K]>>\n }\n\n Object.entries(type).forEach(([key, control]) => {\n deserializedType[key as keyof typeof type] = deserializeControl(\n control,\n ) as DeserializedPanelControl\n })\n\n // @ts-expect-error: preset types are incompatible\n return { ...control, options: { ...control.options, type: deserializedType } }\n}\n\ntype SerializedListControlConfig<T extends Data> = {\n type: SerializedPanelControl<T>\n label?: string\n getItemLabel?: SerializedFunction<Exclude<ListControlConfig<T>['getItemLabel'], undefined>>\n preset?: ListControlValue<T>\n defaultValue?: ListControlValue<T>\n}\n\ntype SerializedListControl<T extends ListControlValue = ListControlValue> = {\n type: typeof Controls.Types.List\n options: SerializedListControlConfig<T extends ListControlValue<infer U> ? U : never>\n}\n\nfunction serializeListControl<T extends Data>(\n control: ListControl<ListControlValue<T>>,\n): [SerializedListControl<ListControlValue<T>>, Transferable[]] {\n const { type, getItemLabel } = control.options\n const transferables: Transferable[] = []\n\n const [serializedType, serializedTypeTransferables] = serializeControl(type)\n const serializedGetItemLabel = getItemLabel && serializeFunction(getItemLabel)\n\n transferables.push(...serializedTypeTransferables)\n if (serializedGetItemLabel != null) transferables.push(serializedGetItemLabel)\n\n return [\n {\n ...control,\n options: {\n ...control.options,\n type: serializedType as SerializedPanelControl,\n getItemLabel: serializedGetItemLabel,\n },\n },\n transferables,\n ]\n}\n\ntype DeserializedListControlConfig<T extends Data> = {\n type: DeserializedPanelControl<T>\n label?: string\n getItemLabel?: DeserializedFunction<Exclude<ListControlConfig<T>['getItemLabel'], undefined>>\n preset?: ListControlValue<T>\n defaultValue?: ListControlValue<T>\n}\n\ntype DeserializedListControl<T extends ListControlValue = ListControlValue> = {\n type: typeof Controls.Types.List\n options: DeserializedListControlConfig<T extends ListControlValue<infer U> ? U : never>\n}\n\nfunction deserializeListControl<T extends Data>(\n serializedControl: SerializedListControl<ListControlValue<T>>,\n): DeserializedListControl<ListControlValue<T>> {\n const { type, getItemLabel } = serializedControl.options\n\n const deserializedType = deserializeControl(type) as DeserializedPanelControl\n const deserializedGetItemLabel = getItemLabel && deserializeFunction(getItemLabel)\n\n return {\n ...serializedControl,\n options: {\n ...serializedControl.options,\n type: deserializedType,\n getItemLabel: deserializedGetItemLabel,\n },\n }\n}\n\ntype SerializedTypeaheadControlConfig<T extends Data> = {\n getItems: SerializedFunction<TypeaheadControlConfig<T>['getItems']>\n label?: string\n preset?: TypeaheadControlValue<T>\n defaultValue?: TypeaheadControlValue<T>\n}\n\ntype SerializedTypeaheadControl<T extends TypeaheadControlValue = TypeaheadControlValue> = {\n type: typeof Controls.Types.Typeahead\n options: SerializedTypeaheadControlConfig<T['value']>\n}\n\nfunction serializeTypeaheadControl<T extends Data>(\n control: TypeaheadControl<TypeaheadControlValue<T>>,\n): [SerializedTypeaheadControl<TypeaheadControlValue<T>>, Transferable[]] {\n const { getItems } = control.options\n\n const serializedGetItems = getItems && serializeFunction(getItems)\n\n return [\n { ...control, options: { ...control.options, getItems: serializedGetItems } },\n serializedGetItems == null ? [] : [serializedGetItems],\n ]\n}\n\ntype DeserializedTypeaheadControlConfig<T extends Data> = {\n getItems: DeserializedFunction<TypeaheadControlConfig<T>['getItems']>\n label?: string\n preset?: TypeaheadControlValue<T>\n defaultValue?: TypeaheadControlValue<T>\n}\n\ntype DeserializedTypeaheadControl<T extends TypeaheadControlValue = TypeaheadControlValue> = {\n type: typeof Controls.Types.Typeahead\n options: DeserializedTypeaheadControlConfig<T['value']>\n}\n\nfunction deserializeTypeaheadControl<T extends Data>(\n serializedControl: SerializedTypeaheadControl<TypeaheadControlValue<T>>,\n): DeserializedTypeaheadControl<TypeaheadControlValue<T>> {\n const { getItems } = serializedControl.options\n\n const deserializedGetItems = getItems && deserializeFunction(getItems)\n\n return {\n ...serializedControl,\n options: { ...serializedControl.options, getItems: deserializedGetItems },\n }\n}\n\ntype SerializedConfig<T> =\n | T\n | SerializedFunction<(props: Record<string, unknown>, deviceMode: Device) => T>\n\ntype DeserializedConfig<T> =\n | T\n | DeserializedFunction<(props: Record<string, unknown>, deviceMode: Device) => T>\n\ntype GapXControlConfig = {\n preset?: GapXControlValue\n label?: string\n defaultValue?: Gap\n min?: number\n max?: number\n step?: number\n hidden?: boolean\n}\n\ntype SerializedGapXControl<_T = GapXControlValue> = {\n type: typeof Controls.Types.GapX\n options: SerializedConfig<GapXControlConfig>\n}\n\nfunction serializeGapXControl(control: GapXControl): [SerializedGapXControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedGapXControl<_T = GapXControlValue> = {\n type: typeof Controls.Types.GapX\n options: DeserializedConfig<GapXControlConfig>\n}\n\nfunction deserializeGapXControl(serializedControl: SerializedGapXControl): DeserializedGapXControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype GapYControlConfig = {\n preset?: GapYControlValue\n label?: string\n defaultValue?: Gap\n min?: number\n max?: number\n step?: number\n hidden?: boolean\n}\n\ntype SerializedGapYControl<_T = GapYControlValue> = {\n type: typeof Controls.Types.GapY\n options: SerializedConfig<GapYControlConfig>\n}\n\nfunction serializeGapYControl(control: GapYControl): [SerializedGapYControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedGapYControl<_T = GapYControlValue> = {\n type: typeof Controls.Types.GapY\n options: DeserializedConfig<GapYControlConfig>\n}\n\nfunction deserializeGapYControl(serializedControl: SerializedGapYControl): DeserializedGapYControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype ResponsiveNumberControlConfig = {\n preset?: ResponsiveNumberControlValue\n label?: string\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n hidden?: boolean\n}\n\ntype SerializedResponsiveNumberControl<_T = ResponsiveNumberControlValue> = {\n type: typeof Controls.Types.ResponsiveNumber\n options: SerializedConfig<ResponsiveNumberControlConfig>\n}\n\nfunction serializeResponsiveNumberControl(\n control: ResponsiveNumberControl,\n): [SerializedResponsiveNumberControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedResponsiveNumberControl<_T = ResponsiveNumberControlValue> = {\n type: typeof Controls.Types.ResponsiveNumber\n options: DeserializedConfig<ResponsiveNumberControlConfig>\n}\n\nfunction deserializeResponsiveNumberControl(\n serializedControl: SerializedResponsiveNumberControl,\n): DeserializedResponsiveNumberControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype CheckboxControlConfig = {\n preset?: CheckboxControlValue\n label: string\n hidden?: boolean\n}\n\ntype SerializedCheckboxControl<_T = CheckboxControlValue> = {\n type: typeof Controls.Types.Checkbox\n options: SerializedConfig<CheckboxControlConfig>\n}\n\nfunction serializeCheckboxControl(\n control: CheckboxControl,\n): [SerializedCheckboxControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedCheckboxControl<_T = CheckboxControlValue> = {\n type: typeof Controls.Types.Checkbox\n options: DeserializedConfig<CheckboxControlConfig>\n}\n\nfunction deserializeCheckboxControl(\n serializedControl: SerializedCheckboxControl,\n): DeserializedCheckboxControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype ResponsiveColorControlConfig = { label?: string; placeholder?: string; hidden?: boolean }\n\ntype SerializedResponsiveColorControl<_T = ResponsiveColorControlValue> = {\n type: typeof Controls.Types.ResponsiveColor\n options: SerializedConfig<ResponsiveColorControlConfig>\n}\n\nfunction serializeResponsiveColorControl(\n control: ResponsiveColorControl,\n): [SerializedResponsiveColorControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedResponsiveColorControl<_T = ResponsiveColorControlValue> = {\n type: typeof Controls.Types.ResponsiveColor\n options: DeserializedConfig<ResponsiveColorControlConfig>\n}\n\nfunction deserializeResponsiveColorControl(\n serializedControl: SerializedResponsiveColorControl,\n): DeserializedResponsiveColorControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\ntype NumberControlConfig = {\n preset?: NumberControlValue\n label?: string\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n suffix?: string\n hidden?: boolean\n}\n\ntype SerializedNumberControl<_T = NumberControlValue> = {\n type: typeof Controls.Types.Number\n options: SerializedConfig<NumberControlConfig>\n}\n\nfunction serializeNumberControl(control: NumberControl): [SerializedNumberControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedNumberControl<_T = NumberControlValue> = {\n type: typeof Controls.Types.Number\n options: DeserializedConfig<NumberControlConfig>\n}\n\nfunction deserializeNumberControl(\n serializedControl: SerializedNumberControl,\n): DeserializedNumberControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\ntype ResponsiveIconRadioGroupControlConfig<T extends string = string, U extends T = T> = {\n label?: string\n options: IconRadioGroupOption<T>[]\n defaultValue?: U\n hidden?: boolean\n}\n\ntype SerializedResponsiveIconRadioGroupControl<_T = ResponsiveIconRadioGroupControlValue> = {\n type: typeof Controls.Types.ResponsiveIconRadioGroup\n options: SerializedConfig<ResponsiveIconRadioGroupControlConfig>\n}\n\nfunction serializeResponsiveIconRadioGroupControl(\n control: ResponsiveIconRadioGroupControl,\n): [SerializedResponsiveIconRadioGroupControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedResponsiveIconRadioGroupControl<_T = ResponsiveIconRadioGroupControlValue> = {\n type: typeof Controls.Types.ResponsiveIconRadioGroup\n options: DeserializedConfig<ResponsiveIconRadioGroupControlConfig>\n}\n\nfunction deserializeResponsiveIconRadioGroupControl(\n serializedControl: SerializedResponsiveIconRadioGroupControl,\n): DeserializedResponsiveIconRadioGroupControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype DateControlConfig = { preset?: DateControlValue }\n\ntype SerializedDateControl<_T = DateControlValue> = {\n type: typeof Controls.Types.Date\n options: SerializedConfig<DateControlConfig>\n}\n\nfunction serializeDateControl(control: DateControl): [SerializedDateControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedDateControl<_T = DateControlValue> = {\n type: typeof Controls.Types.Date\n options: DeserializedConfig<DateControlConfig>\n}\n\nfunction deserializeDateControl(serializedControl: SerializedDateControl): DeserializedDateControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype LinkControlConfig = {\n preset?: LinkControlValue\n label?: string\n defaultValue?: LinkControlValue\n options?: { value: LinkControlValue['type']; label: string }[]\n hidden?: boolean\n}\n\ntype SerializedLinkControl<_T = LinkControlValue> = {\n type: typeof Controls.Types.Link\n options: SerializedConfig<LinkControlConfig>\n}\n\nfunction serializeLinkControl(control: LinkControl): [SerializedLinkControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedLinkControl<_T = LinkControlValue> = {\n type: typeof Controls.Types.Link\n options: DeserializedConfig<LinkControlConfig>\n}\n\nfunction deserializeLinkControl(serializedControl: SerializedLinkControl): DeserializedLinkControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype TextInputControlConfig = { label?: string; placeholder?: string; hidden?: boolean }\n\ntype SerializedTextInputControl<_T = TextInputControlValue> = {\n type: typeof Controls.Types.TextInput\n options: SerializedConfig<TextInputControlConfig>\n}\n\nfunction serializeTextInputControl(\n control: TextInputControl,\n): [SerializedTextInputControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedTextInputControl<_T = TextInputControlValue> = {\n type: typeof Controls.Types.TextInput\n options: DeserializedConfig<TextInputControlConfig>\n}\n\nfunction deserializeTextInputControl(\n serializedControl: SerializedTextInputControl,\n): DeserializedTextInputControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype SerializedResponsiveSelectControl<_T = ResponsiveSelectControlValue> = {\n type: typeof Controls.Types.ResponsiveSelect\n options: SerializedConfig<ResponsiveSelectControlConfig>\n}\n\nfunction serializeResponsiveSelectControl(\n control: ResponsiveSelectControl,\n): [SerializedResponsiveSelectControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype ResponsiveSelectControlConfig<T extends string = string, U extends T = T> = {\n label?: string\n labelOrientation?: SelectLabelOrientation\n options: SelectOption<T>[]\n defaultValue?: U\n hidden?: boolean\n}\n\ntype DeserializedResponsiveSelectControl<_T = ResponsiveSelectControlValue> = {\n type: typeof Controls.Types.ResponsiveSelect\n options: DeserializedConfig<ResponsiveSelectControlConfig>\n}\n\nfunction deserializeResponsiveSelectControl(\n serializedControl: SerializedResponsiveSelectControl,\n): DeserializedResponsiveSelectControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype ResponsiveLengthControlConfig = {\n label?: string\n options?: LengthOption[]\n defaultValue?: Length\n hidden?: boolean\n}\n\ntype SerializedResponsiveLengthControl<_T = ResponsiveLengthControlValue> = {\n type: typeof Controls.Types.ResponsiveLength\n options: SerializedConfig<ResponsiveLengthControlConfig>\n}\n\nfunction serializeResponsiveLengthControl(\n control: ResponsiveLengthControl,\n): [SerializedResponsiveLengthControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedResponsiveLengthControl<_T = ResponsiveLengthControlValue> = {\n type: typeof Controls.Types.ResponsiveLength\n options: DeserializedConfig<ResponsiveLengthControlConfig>\n}\n\nfunction deserializeResponsiveLengthControl(\n serializedControl: SerializedResponsiveLengthControl,\n): DeserializedResponsiveLengthControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype SerializedTextStyleControl<_T = TextStyleControlValue> = {\n type: typeof Controls.Types.TextStyle\n options: SerializedConfig<TextStyleControlConfig>\n}\n\nfunction serializeTextStyleControl(\n control: TextStyleControl,\n): [SerializedTextStyleControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype TextStyleControlConfig = {\n preset?: TextStyleControlValue\n label?: string\n hidden?: boolean\n}\n\ntype DeserializedTextStyleControl<_T = TextStyleControlValue> = {\n type: typeof Controls.Types.TextStyle\n options: DeserializedConfig<TextStyleControlConfig>\n}\n\nfunction deserializeTextStyleControl(\n serializedControl: SerializedTextStyleControl,\n): DeserializedTextStyleControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype ImageControlConfig = { label?: string; hidden?: boolean }\n\ntype SerializedImageControl<_T = ImageControlValue> = {\n type: typeof Controls.Types.Image\n options: SerializedConfig<ImageControlConfig>\n}\n\nfunction serializeImageControl(control: ImageControl): [SerializedImageControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedImageControl<_T = ImageControlValue> = {\n type: typeof Controls.Types.Image\n options: DeserializedConfig<ImageControlConfig>\n}\n\nfunction deserializeImageControl(\n serializedControl: SerializedImageControl,\n): DeserializedImageControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\ntype RichTextControlConfig = { preset?: RichTextControlValue }\n\ntype SerializedRichTextControl<_T = RichTextControlValue> = {\n type: typeof Controls.Types.RichText\n options: SerializedConfig<RichTextControlConfig>\n}\n\nfunction serializeRichTextControl(\n control: RichTextControl,\n): [SerializedRichTextControl, Transferable[]] {\n const { options } = control\n\n if (typeof options !== 'function') return [{ ...control, options }, []]\n\n const serializedOptions = serializeFunction(options)\n\n return [{ ...control, options: serializedOptions }, [serializedOptions]]\n}\n\ntype DeserializedRichTextControl<_T = RichTextControlValue> = {\n type: typeof Controls.Types.RichText\n options: DeserializedConfig<RichTextControlConfig>\n}\n\nfunction deserializeRichTextControl(\n serializedControl: SerializedRichTextControl,\n): DeserializedRichTextControl {\n const { options } = serializedControl\n\n if (!isSerializedFunction(options)) return { ...serializedControl, options }\n\n const deserializedOptions = deserializeFunction(options)\n\n return { ...serializedControl, options: deserializedOptions }\n}\n\nexport type SerializedControl<T extends Data = Data> =\n | Exclude<\n Control<T>,\n | ListControl<T extends ListControlValue ? T : ListControlValue>\n | ShapeControl<T extends ShapeControlValue ? T : ShapeControlValue, any>\n | TypeaheadControl<T extends TypeaheadControlValue ? T : TypeaheadControlValue>\n | GapXControl<T>\n | GapYControl<T>\n | ResponsiveNumberControl<T>\n | CheckboxControl<T>\n | ResponsiveColorControl<T>\n | NumberControl<T>\n | ResponsiveIconRadioGroupControl<\n T extends ResponsiveIconRadioGroupControlValue ? T : ResponsiveIconRadioGroupControlValue\n >\n | ResponsiveSelectControl<\n T extends ResponsiveSelectControlValue ? T : ResponsiveSelectControlValue\n >\n | ResponsiveLengthControl<T>\n | DateControl<T>\n | LinkControl<T>\n | TextInputControl<T>\n | TextStyleControl<T>\n | ImageControl<T>\n | RichTextControl<T>\n | ListControlDefinition\n >\n | SerializedListControl<T extends ListControlValue ? T : ListControlValue>\n | SerializedShapeControl<T extends ShapeControlValue ? T : ShapeControlValue, any>\n | SerializedTypeaheadControl<T extends TypeaheadControlValue ? T : TypeaheadControlValue>\n | SerializedGapXControl<T>\n | SerializedGapYControl<T>\n | SerializedResponsiveNumberControl<T>\n | SerializedCheckboxControl<T>\n | SerializedResponsiveColorControl<T>\n | SerializedNumberControl<T>\n | SerializedResponsiveIconRadioGroupControl<T>\n | SerializedResponsiveSelectControl<T>\n | SerializedResponsiveLengthControl<T>\n | SerializedDateControl<T>\n | SerializedLinkControl<T>\n | SerializedTextInputControl<T>\n | SerializedTextStyleControl<T>\n | SerializedImageControl<T>\n | SerializedRichTextControl<T>\n | Serialize<ListControlDefinition>\n\ntype SerializedPanelControl<T extends Data = Data> = Extract<\n SerializedControl<T>,\n { type: PanelControlType }\n>\n\ntype SerializedPanelControlValueType<T extends SerializedPanelControl> =\n T extends SerializedPanelControl<infer U> ? U : never\n\nexport type DeserializedControl<T extends Data = Data> =\n | Exclude<\n Control<T>,\n | ListControl<T extends ListControlValue ? T : ListControlValue>\n | ShapeControl<T extends ShapeControlValue ? T : ShapeControlValue, any>\n | TypeaheadControl<T extends TypeaheadControlValue ? T : TypeaheadControlValue>\n | GapXControl<T>\n | GapYControl<T>\n | ResponsiveNumberControl<T>\n | CheckboxControl<T>\n | ResponsiveColorControl<T>\n | NumberControl<T>\n | ResponsiveIconRadioGroupControl<\n T extends ResponsiveIconRadioGroupControlValue ? T : ResponsiveIconRadioGroupControlValue\n >\n | ResponsiveSelectControl<\n T extends ResponsiveSelectControlValue ? T : ResponsiveSelectControlValue\n >\n | ResponsiveLengthControl<T>\n | DateControl<T>\n | LinkControl<T>\n | TextInputControl<T>\n | TextStyleControl<T>\n | ImageControl<T>\n | RichTextControl<T>\n | ListControlDefinition\n >\n | DeserializedListControl<T extends ListControlValue ? T : ListControlValue>\n | DeserializedShapeControl<T extends ShapeControlValue ? T : ShapeControlValue, any>\n | DeserializedTypeaheadControl<T extends TypeaheadControlValue ? T : TypeaheadControlValue>\n | DeserializedGapXControl<T>\n | DeserializedGapYControl<T>\n | DeserializedResponsiveNumberControl<T>\n | DeserializedCheckboxControl<T>\n | DeserializedResponsiveColorControl<T>\n | DeserializedNumberControl<T>\n | DeserializedResponsiveIconRadioGroupControl<T>\n | DeserializedResponsiveSelectControl<T>\n | DeserializedResponsiveLengthControl<T>\n | DeserializedDateControl<T>\n | DeserializedLinkControl<T>\n | DeserializedTextInputControl<T>\n | DeserializedTextStyleControl<T>\n | DeserializedImageControl<T>\n | DeserializedRichTextControl<T>\n | Deserialize<Serialize<ListControlDefinition>>\n\nexport type DeserializedPanelControl<T extends Data = Data> = Extract<\n DeserializedControl<T>,\n { type: PanelControlType }\n>\n\ntype DeserializedPanelControlValueType<T extends DeserializedPanelControl> =\n T extends DeserializedPanelControl<infer U> ? U : never\n\nexport function serializeControl<T extends Data>(\n control: Control<T>,\n): [SerializedControl<T>, Transferable[]] {\n switch (control.type) {\n case Controls.Types.Checkbox:\n return serializeCheckboxControl(control)\n\n case Controls.Types.List:\n return serializeListControl(control)\n\n case Controls.Types.Shape:\n return serializeShapeControl(control)\n\n case Controls.Types.Typeahead:\n return serializeTypeaheadControl(control)\n\n case Controls.Types.GapX:\n return serializeGapXControl(control)\n\n case Controls.Types.GapY:\n return serializeGapYControl(control)\n\n case Controls.Types.ResponsiveColor:\n return serializeResponsiveColorControl(control)\n\n case Controls.Types.ResponsiveNumber:\n return serializeResponsiveNumberControl(control)\n\n case Controls.Types.Number:\n return serializeNumberControl(control)\n\n case Controls.Types.ResponsiveIconRadioGroup:\n return serializeResponsiveIconRadioGroupControl(control)\n\n case Controls.Types.ResponsiveSelect:\n return serializeResponsiveSelectControl(control)\n\n case Controls.Types.ResponsiveLength:\n return serializeResponsiveLengthControl(control)\n\n case Controls.Types.Date:\n return serializeDateControl(control)\n\n case Controls.Types.Link:\n return serializeLinkControl(control)\n\n case Controls.Types.TextInput:\n return serializeTextInputControl(control)\n\n case Controls.Types.TextStyle:\n return serializeTextStyleControl(control)\n\n case Controls.Types.Image:\n return serializeImageControl(control)\n\n case Controls.Types.RichText:\n return serializeRichTextControl(control)\n\n case ListControlType:\n return serializeListControlDefinition(control)\n\n default:\n return [control, []]\n }\n}\n\nexport function deserializeControl<T extends Data>(\n serializedControl: SerializedControl<T>,\n): DeserializedControl<T> {\n switch (serializedControl.type) {\n case Controls.Types.Checkbox:\n return deserializeCheckboxControl(serializedControl)\n\n case Controls.Types.List:\n return deserializeListControl(serializedControl)\n\n case Controls.Types.Shape:\n return deserializeShapeControl(serializedControl)\n\n case Controls.Types.Typeahead:\n return deserializeTypeaheadControl(serializedControl)\n\n case Controls.Types.GapX:\n return deserializeGapXControl(serializedControl)\n\n case Controls.Types.GapY:\n return deserializeGapYControl(serializedControl)\n\n case Controls.Types.ResponsiveColor:\n return deserializeResponsiveColorControl(serializedControl)\n\n case Controls.Types.ResponsiveNumber:\n return deserializeResponsiveNumberControl(serializedControl)\n\n case Controls.Types.Number:\n return deserializeNumberControl(serializedControl)\n\n case Controls.Types.ResponsiveIconRadioGroup:\n return deserializeResponsiveIconRadioGroupControl(serializedControl)\n\n case Controls.Types.ResponsiveSelect:\n return deserializeResponsiveSelectControl(serializedControl)\n\n case Controls.Types.ResponsiveLength:\n return deserializeResponsiveLengthControl(serializedControl)\n\n case Controls.Types.Date:\n return deserializeDateControl(serializedControl)\n\n case Controls.Types.Link:\n return deserializeLinkControl(serializedControl)\n\n case Controls.Types.TextInput:\n return deserializeTextInputControl(serializedControl)\n\n case Controls.Types.TextStyle:\n return deserializeTextStyleControl(serializedControl)\n\n case Controls.Types.Image:\n return deserializeImageControl(serializedControl)\n\n case Controls.Types.RichText:\n return deserializeRichTextControl(serializedControl)\n\n case ListControlType:\n return deserializeListControlDefinition(serializedControl)\n\n default:\n return serializedControl\n }\n}\n\nexport function serializeControls(\n controls: Record<string, Control>,\n): [Record<string, SerializedControl>, Transferable[]] {\n return Object.entries(controls).reduce(\n ([accControls, accTransferables], [key, control]) => {\n const [serializedControl, transferables] = serializeControl(control)\n\n return [{ ...accControls, [key]: serializedControl }, [...accTransferables, ...transferables]]\n },\n [{}, []] as [Record<string, SerializedControl>, Transferable[]],\n )\n}\n\nexport function deserializeControls(\n serializedControls: Record<string, SerializedControl>,\n): Record<string, DeserializedControl> {\n return Object.entries(serializedControls).reduce(\n (deserializedControls, [key, serializedControl]) => {\n return { ...deserializedControls, [key]: deserializeControl(serializedControl) }\n },\n {} as Record<string, DeserializedControl>,\n )\n}\n"],"names":["Controls.Types"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAcO,8BAA8B,OAAsD;AACzF,SAAO,iBAAiB;AAC1B;AAIO,2BAAkD,MAAgC;AAGjF,QAAA,iBAAiB,IAAI;AAE3B,iBAAe,MAAM,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,YAA8B;AAC/E,YAAQ,QACL,EAAA,KAAK,MAAM,KAAK,MAAM,MAAM,IAAI,CAAC,EACjC,KAAK,CAAA,WAAU,eAAe,MAAM,YAAY,CAAC,QAAQ,MAAM,CAAC,CAAC;AAAA,EAAA;AAGtE,SAAO,eAAe;AACxB;AAEO,6BACL,oBACyB;AAKzB,MAAI,aAAa;AACX,QAAA,4BAAY;AAElB,qBAAmB,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,cAAkC;;AAC3E,gBAAA,IAAI,MAAM,MAAV,mBAAc;AAEpB,UAAM,OAAO,MAAM;AAAA,EAAA;AAGrB,SAAO,iCAAiC,MAAM;AACrC,WAAA,IAAI,QAAQ,CAAW,YAAA;AAC5B,YAAM,SAAS;AAET,YAAA,IAAI,QAAQ,OAAO;AAEzB,yBAAmB,YAAY,CAAC,QAAQ,IAAI,CAAC;AAAA,IAAA,CAC9C;AAAA,EAAA;AAEL;ACtDO,wCACL,YACoD;AACpD,QAAM,CAAC,MAAM,iBAAiB,iBAAiB,WAAW,OAAO,IAAI;AACrE,QAAM,eACJ,WAAW,OAAO,gBAAgB,kBAAkB,WAAW,OAAO,YAAY;AAEhF,MAAA;AAAc,kBAAc,KAAK,YAAY;AAE1C,SAAA;AAAA,IACL,iCAAK,aAAL,EAAiB,QAAQ,iCAAK,WAAW,SAAhB,EAAwB,MAAM,gBAAe;AAAA,IACtE;AAAA,EAAA;AAEJ;AAEO,0CACL,YAC+C;AAC/C,QAAM,OAAO,mBAAmB,WAAW,OAAO,IAAI;AACtD,QAAM,eACJ,WAAW,OAAO,gBAAgB,oBAAoB,WAAW,OAAO,YAAY;AAE/E,SAAA,iCACF,aADE;AAAA,IAEL,QAAQ,iCAAK,WAAW,SAAhB,EAAwB,MAAM,aAAa;AAAA,EAAA;AAEvD;ACgDA,+BAIE,SAOA;AACM,QAAA,EAAE,SAAS,QAAQ;AACzB,QAAM,gBAAgC,CAAA;AACtC,QAAM,iBAAiB,CAAA;AAIvB,SAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,cAAa;AAC/C,UAAM,CAAC,mBAAmB,kCAAkC,iBAAiB,QAAO;AAEpF,mBAAe,OAA4B;AAC7B,kBAAA,KAAK,GAAG,8BAA8B;AAAA,EAAA,CACrD;AAGM,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,iCAAK,QAAQ,UAAb,EAAsB,MAAM,kBAAiB,IAAG,aAAa;AAC9F;AAeA,iCAIE,SAIA;AACM,QAAA,EAAE,SAAS,QAAQ;AACzB,QAAM,mBAAmB,CAAA;AAIzB,SAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,cAAa;AAC9B,qBAAA,OAA4B,mBAC3C,QACF;AAAA,EAAA,CACD;AAGM,SAAA,iCAAK,UAAL,EAAc,SAAS,iCAAK,QAAQ,UAAb,EAAsB,MAAM;AAC5D;AAeA,8BACE,SAC8D;AACxD,QAAA,EAAE,MAAM,iBAAiB,QAAQ;AACvC,QAAM,gBAAgC,CAAA;AAEtC,QAAM,CAAC,gBAAgB,+BAA+B,iBAAiB,IAAI;AACrE,QAAA,yBAAyB,gBAAgB,kBAAkB,YAAY;AAE/D,gBAAA,KAAK,GAAG,2BAA2B;AACjD,MAAI,0BAA0B;AAAM,kBAAc,KAAK,sBAAsB;AAEtE,SAAA;AAAA,IACL,iCACK,UADL;AAAA,MAEE,SAAS,iCACJ,QAAQ,UADJ;AAAA,QAEP,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,IACA;AAAA,EAAA;AAEJ;AAeA,gCACE,mBAC8C;AACxC,QAAA,EAAE,MAAM,iBAAiB,kBAAkB;AAE3C,QAAA,mBAAmB,mBAAmB,IAAI;AAC1C,QAAA,2BAA2B,gBAAgB,oBAAoB,YAAY;AAE1E,SAAA,iCACF,oBADE;AAAA,IAEL,SAAS,iCACJ,kBAAkB,UADd;AAAA,MAEP,MAAM;AAAA,MACN,cAAc;AAAA,IAChB;AAAA,EAAA;AAEJ;AAcA,mCACE,SACwE;AAClE,QAAA,EAAE,aAAa,QAAQ;AAEvB,QAAA,qBAAqB,YAAY,kBAAkB,QAAQ;AAE1D,SAAA;AAAA,IACL,iCAAK,UAAL,EAAc,SAAS,iCAAK,QAAQ,UAAb,EAAsB,UAAU,sBAAqB;AAAA,IAC5E,sBAAsB,OAAO,KAAK,CAAC,kBAAkB;AAAA,EAAA;AAEzD;AAcA,qCACE,mBACwD;AAClD,QAAA,EAAE,aAAa,kBAAkB;AAEjC,QAAA,uBAAuB,YAAY,oBAAoB,QAAQ;AAE9D,SAAA,iCACF,oBADE;AAAA,IAEL,SAAS,iCAAK,kBAAkB,UAAvB,EAAgC,UAAU,qBAAqB;AAAA,EAAA;AAE5E;AAyBA,8BAA8B,SAA+D;AAC3F,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,gCAAgC,mBAAmE;AACjG,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAiBA,8BAA8B,SAA+D;AAC3F,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,gCAAgC,mBAAmE;AACjG,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAiBA,0CACE,SACqD;AACrD,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,4CACE,mBACqC;AACrC,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAaA,kCACE,SAC6C;AAC7C,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,oCACE,mBAC6B;AAC7B,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AASA,yCACE,SACoD;AACpD,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,2CACE,mBACoC;AACpC,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAiBA,gCAAgC,SAAmE;AACjG,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,kCACE,mBAC2B;AAC3B,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAaA,kDACE,SAC6D;AAC7D,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,oDACE,mBAC6C;AAC7C,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AASA,8BAA8B,SAA+D;AAC3F,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,gCAAgC,mBAAmE;AACjG,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAeA,8BAA8B,SAA+D;AAC3F,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,gCAAgC,mBAAmE;AACjG,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AASA,mCACE,SAC8C;AAC9C,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,qCACE,mBAC8B;AAC9B,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAOA,0CACE,SACqD;AACrD,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAeA,4CACE,mBACqC;AACrC,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAcA,0CACE,SACqD;AACrD,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,4CACE,mBACqC;AACrC,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAOA,mCACE,SAC8C;AAC9C,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAaA,qCACE,mBAC8B;AAC9B,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AASA,+BAA+B,SAAiE;AAC9F,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,iCACE,mBAC0B;AAC1B,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AASA,kCACE,SAC6C;AAC7C,QAAM,EAAE,YAAY;AAEpB,MAAI,OAAO,YAAY;AAAY,WAAO,CAAC,iCAAK,UAAL,EAAc,QAAQ,IAAG,CAAE,CAAA;AAEhE,QAAA,oBAAoB,kBAAkB,OAAO;AAE5C,SAAA,CAAC,iCAAK,UAAL,EAAc,SAAS,sBAAqB,CAAC,iBAAiB,CAAC;AACzE;AAOA,oCACE,mBAC6B;AAC7B,QAAM,EAAE,YAAY;AAEhB,MAAA,CAAC,qBAAqB,OAAO;AAAU,WAAA,iCAAK,oBAAL,EAAwB;AAE7D,QAAA,sBAAsB,oBAAoB,OAAO;AAEhD,SAAA,iCAAK,oBAAL,EAAwB,SAAS,oBAAoB;AAC9D;AAgHO,0BACL,SACwC;AACxC,UAAQ,QAAQ;AAAA,SACTA,MAAe;AAClB,aAAO,yBAAyB,OAAO;AAAA,SAEpCA,MAAe;AAClB,aAAO,qBAAqB,OAAO;AAAA,SAEhCA,MAAe;AAClB,aAAO,sBAAsB,OAAO;AAAA,SAEjCA,MAAe;AAClB,aAAO,0BAA0B,OAAO;AAAA,SAErCA,MAAe;AAClB,aAAO,qBAAqB,OAAO;AAAA,SAEhCA,MAAe;AAClB,aAAO,qBAAqB,OAAO;AAAA,SAEhCA,MAAe;AAClB,aAAO,gCAAgC,OAAO;AAAA,SAE3CA,MAAe;AAClB,aAAO,iCAAiC,OAAO;AAAA,SAE5CA,MAAe;AAClB,aAAO,uBAAuB,OAAO;AAAA,SAElCA,MAAe;AAClB,aAAO,yCAAyC,OAAO;AAAA,SAEpDA,MAAe;AAClB,aAAO,iCAAiC,OAAO;AAAA,SAE5CA,MAAe;AAClB,aAAO,iCAAiC,OAAO;AAAA,SAE5CA,MAAe;AAClB,aAAO,qBAAqB,OAAO;AAAA,SAEhCA,MAAe;AAClB,aAAO,qBAAqB,OAAO;AAAA,SAEhCA,MAAe;AAClB,aAAO,0BAA0B,OAAO;AAAA,SAErCA,MAAe;AAClB,aAAO,0BAA0B,OAAO;AAAA,SAErCA,MAAe;AAClB,aAAO,sBAAsB,OAAO;AAAA,SAEjCA,MAAe;AAClB,aAAO,yBAAyB,OAAO;AAAA,SAEpC;AACH,aAAO,+BAA+B,OAAO;AAAA;AAGtC,aAAA,CAAC,SAAS,CAAA,CAAE;AAAA;AAEzB;AAEO,4BACL,mBACwB;AACxB,UAAQ,kBAAkB;AAAA,SACnBA,MAAe;AAClB,aAAO,2BAA2B,iBAAiB;AAAA,SAEhDA,MAAe;AAClB,aAAO,uBAAuB,iBAAiB;AAAA,SAE5CA,MAAe;AAClB,aAAO,wBAAwB,iBAAiB;AAAA,SAE7CA,MAAe;AAClB,aAAO,4BAA4B,iBAAiB;AAAA,SAEjDA,MAAe;AAClB,aAAO,uBAAuB,iBAAiB;AAAA,SAE5CA,MAAe;AAClB,aAAO,uBAAuB,iBAAiB;AAAA,SAE5CA,MAAe;AAClB,aAAO,kCAAkC,iBAAiB;AAAA,SAEvDA,MAAe;AAClB,aAAO,mCAAmC,iBAAiB;AAAA,SAExDA,MAAe;AAClB,aAAO,yBAAyB,iBAAiB;AAAA,SAE9CA,MAAe;AAClB,aAAO,2CAA2C,iBAAiB;AAAA,SAEhEA,MAAe;AAClB,aAAO,mCAAmC,iBAAiB;AAAA,SAExDA,MAAe;AAClB,aAAO,mCAAmC,iBAAiB;AAAA,SAExDA,MAAe;AAClB,aAAO,uBAAuB,iBAAiB;AAAA,SAE5CA,MAAe;AAClB,aAAO,uBAAuB,iBAAiB;AAAA,SAE5CA,MAAe;AAClB,aAAO,4BAA4B,iBAAiB;AAAA,SAEjDA,MAAe;AAClB,aAAO,4BAA4B,iBAAiB;AAAA,SAEjDA,MAAe;AAClB,aAAO,wBAAwB,iBAAiB;AAAA,SAE7CA,MAAe;AAClB,aAAO,2BAA2B,iBAAiB;AAAA,SAEhD;AACH,aAAO,iCAAiC,iBAAiB;AAAA;AAGlD,aAAA;AAAA;AAEb;AAEO,2BACL,UACqD;AAC9C,SAAA,OAAO,QAAQ,QAAQ,EAAE,OAC9B,CAAC,CAAC,aAAa,mBAAmB,CAAC,KAAK,aAAa;AACnD,UAAM,CAAC,mBAAmB,iBAAiB,iBAAiB,OAAO;AAE5D,WAAA,CAAC,iCAAK,cAAL,GAAmB,MAAM,sBAAqB,CAAC,GAAG,kBAAkB,GAAG,aAAa,CAAC;AAAA,EAAA,GAE/F,CAAC,CAAA,GAAI,CAAE,CAAA,CACT;AACF;AAEO,6BACL,oBACqC;AAC9B,SAAA,OAAO,QAAQ,kBAAkB,EAAE,OACxC,CAAC,sBAAsB,CAAC,KAAK,uBAAuB;AAClD,WAAO,iCAAK,uBAAL,GAA4B,MAAM,mBAAmB,iBAAiB;EAC/E,GACA,CACF,CAAA;AACF;;"}
package/dist/index.cjs.js CHANGED
@@ -62,6 +62,7 @@ var polished = require("polished");
62
62
  var ReactPlayer = require("react-player");
63
63
  var Hotkeys = require("slate-hotkeys");
64
64
  var ipsum = require("corporate-ipsum");
65
+ var isHotkey = require("is-hotkey");
65
66
  var slateReact = require("slate-react");
66
67
  var Lists = require("@convertkit/slate-lists");
67
68
  var textInput = require("./text-input.cjs.js");
@@ -2169,7 +2170,8 @@ const Button$1 = React.forwardRef(function Button2(_m, ref) {
2169
2170
  color,
2170
2171
  textStyle,
2171
2172
  width,
2172
- margin
2173
+ margin,
2174
+ className
2173
2175
  } = _n, restOfProps = __objRest(_n, [
2174
2176
  "id",
2175
2177
  "children",
@@ -2181,12 +2183,13 @@ const Button$1 = React.forwardRef(function Button2(_m, ref) {
2181
2183
  "color",
2182
2184
  "textStyle",
2183
2185
  "width",
2184
- "margin"
2186
+ "margin",
2187
+ "className"
2185
2188
  ]);
2186
2189
  return /* @__PURE__ */ jsxRuntime.jsx(StyledButton$1, __spreadProps(__spreadValues({}, restOfProps), {
2187
2190
  ref,
2188
2191
  id,
2189
- className: css.cx(css.css(responsiveWidth(width, "auto"))),
2192
+ className: css.cx(css.css(responsiveWidth(width, "auto")), className),
2190
2193
  color,
2191
2194
  link,
2192
2195
  margin,
@@ -7612,7 +7615,7 @@ const Text = React.forwardRef(function Text2({
7612
7615
  (_a = lastController.current) == null ? void 0 : _a.focus();
7613
7616
  }, []);
7614
7617
  const handleKeyDown = React.useCallback((event, _editor, next) => {
7615
- var _a, _b;
7618
+ var _a, _b, _c;
7616
7619
  if (Hotkeys__default["default"].isUndo(event)) {
7617
7620
  (_a = lastController.current) == null ? void 0 : _a.undo();
7618
7621
  return true;
@@ -7621,6 +7624,10 @@ const Text = React.forwardRef(function Text2({
7621
7624
  (_b = lastController.current) == null ? void 0 : _b.redo();
7622
7625
  return true;
7623
7626
  }
7627
+ if (isHotkey.isHotkey("escape")(event)) {
7628
+ (_c = lastController.current) == null ? void 0 : _c.blur();
7629
+ return true;
7630
+ }
7624
7631
  return next();
7625
7632
  }, []);
7626
7633
  const isInBuilder = useIsInBuilder();
@@ -7633,7 +7640,8 @@ const Text = React.forwardRef(function Text2({
7633
7640
  value,
7634
7641
  onChange: handleChange,
7635
7642
  onFocus: handleFocus,
7636
- onKeyDown: handleKeyDown
7643
+ onKeyDown: handleKeyDown,
7644
+ onBlur: (e) => e.preventDefault()
7637
7645
  });
7638
7646
  });
7639
7647
  function registerComponent$1(runtime) {
@@ -8203,7 +8211,8 @@ function useStyleControlCssObject(style$1, controlDefinition) {
8203
8211
  return `${borderRadius.value}${borderRadius.unit}`;
8204
8212
  }
8205
8213
  }
8206
- const useInsertionEffect = (_ea = React__namespace["useInsertionEffect"]) != null ? _ea : React__namespace.useLayoutEffect;
8214
+ const useInsertionEffectSpecifier = "useInsertionEffect";
8215
+ const useInsertionEffect = (_ea = React__namespace[useInsertionEffectSpecifier]) != null ? _ea : React__namespace.useLayoutEffect;
8207
8216
  function useFormattedStyle(styleControlData, controlDefinition) {
8208
8217
  const style2 = useStyleControlCssObject(styleControlData, controlDefinition);
8209
8218
  const serialized = serializeStyles([style2], css.cache.registered);
@@ -8269,7 +8278,7 @@ function ShapeControlValue({
8269
8278
  data,
8270
8279
  children
8271
8280
  }) {
8272
- return Object.entries(definition.config.type).reduce((renderFn, [key, controlDefinition]) => (shapeControlValue) => /* @__PURE__ */ jsxRuntime.jsx(ControlValue, {
8281
+ return Object.entries(definition.config.type).reduceRight((renderFn, [key, controlDefinition]) => (shapeControlValue) => /* @__PURE__ */ jsxRuntime.jsx(ControlValue, {
8273
8282
  definition: controlDefinition,
8274
8283
  data: data == null ? void 0 : data[key],
8275
8284
  children: (value) => renderFn(__spreadProps(__spreadValues({}, shapeControlValue), {
@@ -8415,11 +8424,9 @@ function PropsValue({
8415
8424
  function suppressWarningAndFindDomNode(instance) {
8416
8425
  const error = console.error;
8417
8426
  console.error = (...args) => {
8418
- const [msg, ...substitutions] = args;
8419
- const text = substitutions.reduce((text2, substitution) => text2.replace("%s", substitution), msg);
8420
- if (!text.includes("findDOMNode is deprecated in StrictMode.")) {
8421
- error.apply(console, args);
8422
- }
8427
+ if (typeof args[0] === "string" && args[0].includes("%s is deprecated in StrictMode."))
8428
+ return;
8429
+ return error.apply(console, args);
8423
8430
  };
8424
8431
  const foundDomNode = reactDom.findDOMNode(instance);
8425
8432
  console.error = error;
@@ -8579,11 +8586,10 @@ function useSuppressRefWarning(ownerName) {
8579
8586
  const patchedRef = React.useRef(false);
8580
8587
  if (patchedRef.current === false) {
8581
8588
  console.error = (...args) => {
8582
- const [msg, ...substitutions] = args;
8583
- const text = substitutions.reduce((text2, substitution) => text2.replace("%s", substitution), msg);
8584
- if (!text.includes("Function components cannot be given refs.") || !text.includes(`Check the render method of \`${ownerName}\`.`)) {
8585
- originalErrorRef.current(...args);
8589
+ if (typeof args[0] === "string" && args[0].includes("Function components cannot be given refs.") && args[0].includes(`Check the render method of \`${ownerName}\`.`)) {
8590
+ return;
8586
8591
  }
8592
+ return originalErrorRef.current(...args);
8587
8593
  };
8588
8594
  patchedRef.current = true;
8589
8595
  }
@@ -8613,6 +8619,7 @@ const ElementData = React.memo(React.forwardRef(function ElementData2({
8613
8619
  })
8614
8620
  });
8615
8621
  }));
8622
+ const DisableRegisterElement = React.createContext(false);
8616
8623
  const ElementReference = React.memo(React.forwardRef(function ElementReference2({
8617
8624
  elementReference
8618
8625
  }, ref) {
@@ -8649,9 +8656,12 @@ const ElementReference = React.memo(React.forwardRef(function ElementReference2(
8649
8656
  return elementReferenceDocument != null ? /* @__PURE__ */ jsxRuntime.jsx(Document, {
8650
8657
  document: elementReferenceDocument,
8651
8658
  ref
8652
- }) : /* @__PURE__ */ jsxRuntime.jsx(ElementData, {
8653
- elementData: globalElementData,
8654
- ref
8659
+ }) : /* @__PURE__ */ jsxRuntime.jsx(DisableRegisterElement.Provider, {
8660
+ value: true,
8661
+ children: /* @__PURE__ */ jsxRuntime.jsx(ElementData, {
8662
+ elementData: globalElementData,
8663
+ ref
8664
+ })
8655
8665
  });
8656
8666
  }));
8657
8667
  const Element$1 = React.memo(React.forwardRef(function Element2({
@@ -8661,17 +8671,18 @@ const Element$1 = React.memo(React.forwardRef(function Element2({
8661
8671
  const dispatch = useDispatch();
8662
8672
  const documentKey = useDocumentKey();
8663
8673
  const [handle, setHandle] = React.useState(null);
8674
+ const isRegisterElementDisabled = React.useContext(DisableRegisterElement);
8664
8675
  React.useImperativeHandle(ref, () => handle, [handle]);
8665
8676
  React.useEffect(() => {
8666
- if (documentKey == null)
8677
+ if (documentKey == null || isRegisterElementDisabled)
8667
8678
  return;
8668
8679
  return dispatch(actions.registerComponentHandleEffect(documentKey, elementKey, handle));
8669
- }, [dispatch, documentKey, elementKey, handle]);
8680
+ }, [dispatch, documentKey, elementKey, handle, isRegisterElementDisabled]);
8670
8681
  React.useEffect(() => {
8671
- if (documentKey == null)
8682
+ if (documentKey == null || isRegisterElementDisabled)
8672
8683
  return;
8673
8684
  return dispatch(actions.mountComponentEffect(documentKey, elementKey));
8674
- }, [dispatch, documentKey, elementKey]);
8685
+ }, [dispatch, documentKey, elementKey, isRegisterElementDisabled]);
8675
8686
  return reactPage.isElementReference(element) ? /* @__PURE__ */ jsxRuntime.jsx(ElementReference, {
8676
8687
  ref: setHandle,
8677
8688
  elementReference: element