@makeswift/runtime 0.10.11 → 0.10.13

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 (163) hide show
  1. package/dist/Box.cjs.js +2 -1
  2. package/dist/Box.cjs.js.map +1 -1
  3. package/dist/Box.es.js +3 -2
  4. package/dist/Box.es.js.map +1 -1
  5. package/dist/Button.cjs.js +2 -1
  6. package/dist/Button.cjs.js.map +1 -1
  7. package/dist/Button.es.js +3 -2
  8. package/dist/Button.es.js.map +1 -1
  9. package/dist/Carousel.cjs.js +2 -1
  10. package/dist/Carousel.cjs.js.map +1 -1
  11. package/dist/Carousel.es.js +3 -2
  12. package/dist/Carousel.es.js.map +1 -1
  13. package/dist/Countdown.cjs.js +2 -1
  14. package/dist/Countdown.cjs.js.map +1 -1
  15. package/dist/Countdown.es.js +3 -2
  16. package/dist/Countdown.es.js.map +1 -1
  17. package/dist/Divider.cjs.js +2 -1
  18. package/dist/Divider.cjs.js.map +1 -1
  19. package/dist/Divider.es.js +3 -2
  20. package/dist/Divider.es.js.map +1 -1
  21. package/dist/Embed.cjs.js +1 -0
  22. package/dist/Embed.cjs.js.map +1 -1
  23. package/dist/Embed.es.js +2 -1
  24. package/dist/Embed.es.js.map +1 -1
  25. package/dist/Form.cjs.js +2 -1
  26. package/dist/Form.cjs.js.map +1 -1
  27. package/dist/Form.es.js +3 -2
  28. package/dist/Form.es.js.map +1 -1
  29. package/dist/Image.cjs.js +20 -4
  30. package/dist/Image.cjs.js.map +1 -1
  31. package/dist/Image.es.js +21 -5
  32. package/dist/Image.es.js.map +1 -1
  33. package/dist/LiveProvider.cjs.js +2 -1
  34. package/dist/LiveProvider.cjs.js.map +1 -1
  35. package/dist/LiveProvider.es.js +3 -2
  36. package/dist/LiveProvider.es.js.map +1 -1
  37. package/dist/Navigation.cjs.js +2 -1
  38. package/dist/Navigation.cjs.js.map +1 -1
  39. package/dist/Navigation.es.js +3 -2
  40. package/dist/Navigation.es.js.map +1 -1
  41. package/dist/PreviewProvider.cjs.js +2 -1
  42. package/dist/PreviewProvider.cjs.js.map +1 -1
  43. package/dist/PreviewProvider.es.js +3 -2
  44. package/dist/PreviewProvider.es.js.map +1 -1
  45. package/dist/ReadOnlyText.cjs.js +2 -1
  46. package/dist/ReadOnlyText.cjs.js.map +1 -1
  47. package/dist/ReadOnlyText.es.js +3 -2
  48. package/dist/ReadOnlyText.es.js.map +1 -1
  49. package/dist/ReadOnlyTextV2.cjs.js +2 -1
  50. package/dist/ReadOnlyTextV2.cjs.js.map +1 -1
  51. package/dist/ReadOnlyTextV2.es.js +3 -2
  52. package/dist/ReadOnlyTextV2.es.js.map +1 -1
  53. package/dist/Root.cjs.js +2 -1
  54. package/dist/Root.cjs.js.map +1 -1
  55. package/dist/Root.es.js +3 -2
  56. package/dist/Root.es.js.map +1 -1
  57. package/dist/SocialLinks.cjs.js +2 -1
  58. package/dist/SocialLinks.cjs.js.map +1 -1
  59. package/dist/SocialLinks.es.js +3 -2
  60. package/dist/SocialLinks.es.js.map +1 -1
  61. package/dist/Video.cjs.js +1 -0
  62. package/dist/Video.cjs.js.map +1 -1
  63. package/dist/Video.es.js +2 -1
  64. package/dist/Video.es.js.map +1 -1
  65. package/dist/builder.cjs.js +1 -0
  66. package/dist/builder.cjs.js.map +1 -1
  67. package/dist/builder.es.js +1 -0
  68. package/dist/builder.es.js.map +1 -1
  69. package/dist/components.cjs.js +2 -1
  70. package/dist/components.cjs.js.map +1 -1
  71. package/dist/components.es.js +2 -1
  72. package/dist/components.es.js.map +1 -1
  73. package/dist/control-serialization.cjs.js +1 -0
  74. package/dist/control-serialization.cjs.js.map +1 -1
  75. package/dist/control-serialization.es.js +2 -1
  76. package/dist/control-serialization.es.js.map +1 -1
  77. package/dist/controls.cjs.js +14 -10
  78. package/dist/controls.cjs.js.map +1 -1
  79. package/dist/controls.es.js +3 -2
  80. package/dist/controls.es.js.map +1 -1
  81. package/dist/index.cjs.js +30 -10
  82. package/dist/index.cjs.js.map +1 -1
  83. package/dist/index.cjs2.js +1 -0
  84. package/dist/index.cjs2.js.map +1 -1
  85. package/dist/index.cjs8.js +2 -1
  86. package/dist/index.cjs8.js.map +1 -1
  87. package/dist/index.cjs9.js +2 -1
  88. package/dist/index.cjs9.js.map +1 -1
  89. package/dist/index.es.js +23 -3
  90. package/dist/index.es.js.map +1 -1
  91. package/dist/index.es2.js +2 -1
  92. package/dist/index.es2.js.map +1 -1
  93. package/dist/index.es4.js +1 -1
  94. package/dist/index.es5.js +1 -1
  95. package/dist/index.es6.js +1 -1
  96. package/dist/index.es8.js +3 -2
  97. package/dist/index.es8.js.map +1 -1
  98. package/dist/index.es9.js +3 -2
  99. package/dist/index.es9.js.map +1 -1
  100. package/dist/main.cjs.js +1 -0
  101. package/dist/main.cjs.js.map +1 -1
  102. package/dist/main.es.js +1 -0
  103. package/dist/main.es.js.map +1 -1
  104. package/dist/next.cjs.js +2 -1
  105. package/dist/next.cjs.js.map +1 -1
  106. package/dist/next.es.js +2 -1
  107. package/dist/next.es.js.map +1 -1
  108. package/dist/number.cjs.js +14 -0
  109. package/dist/number.cjs.js.map +1 -0
  110. package/dist/number.es.js +10 -0
  111. package/dist/number.es.js.map +1 -0
  112. package/dist/prop-controllers.cjs.js +3 -0
  113. package/dist/prop-controllers.cjs.js.map +1 -1
  114. package/dist/prop-controllers.es.js +2 -1
  115. package/dist/prop-controllers.es.js.map +1 -1
  116. package/dist/react-page.cjs.js +109 -28
  117. package/dist/react-page.cjs.js.map +1 -1
  118. package/dist/react-page.es.js +101 -30
  119. package/dist/react-page.es.js.map +1 -1
  120. package/dist/react.cjs.js +2 -1
  121. package/dist/react.cjs.js.map +1 -1
  122. package/dist/react.es.js +2 -1
  123. package/dist/react.es.js.map +1 -1
  124. package/dist/slate.cjs.js +2 -1
  125. package/dist/slate.cjs.js.map +1 -1
  126. package/dist/slate.es.js +3 -2
  127. package/dist/slate.es.js.map +1 -1
  128. package/dist/toText.cjs.js +1 -0
  129. package/dist/toText.cjs.js.map +1 -1
  130. package/dist/toText.es.js +2 -1
  131. package/dist/toText.es.js.map +1 -1
  132. package/dist/types/src/components/builtin/Image/Image.d.ts.map +1 -1
  133. package/dist/types/src/controls/control.d.ts +1 -0
  134. package/dist/types/src/controls/control.d.ts.map +1 -1
  135. package/dist/types/src/controls/list.d.ts +3 -0
  136. package/dist/types/src/controls/list.d.ts.map +1 -1
  137. package/dist/types/src/controls/shape.d.ts +3 -0
  138. package/dist/types/src/controls/shape.d.ts.map +1 -1
  139. package/dist/types/src/next/api-handler/handlers/translatable-data.d.ts +13 -0
  140. package/dist/types/src/next/api-handler/handlers/translatable-data.d.ts.map +1 -0
  141. package/dist/types/src/next/api-handler/index.d.ts +2 -1
  142. package/dist/types/src/next/api-handler/index.d.ts.map +1 -1
  143. package/dist/types/src/next/client.d.ts +2 -1
  144. package/dist/types/src/next/client.d.ts.map +1 -1
  145. package/dist/types/src/prop-controllers/copy/image.d.ts +2 -2
  146. package/dist/types/src/prop-controllers/copy/image.d.ts.map +1 -1
  147. package/dist/types/src/prop-controllers/copy/images.d.ts +2 -2
  148. package/dist/types/src/prop-controllers/copy/images.d.ts.map +1 -1
  149. package/dist/types/src/prop-controllers/descriptors.d.ts +32 -5
  150. package/dist/types/src/prop-controllers/descriptors.d.ts.map +1 -1
  151. package/dist/types/src/prop-controllers/index.d.ts +3 -1
  152. package/dist/types/src/prop-controllers/index.d.ts.map +1 -1
  153. package/dist/types/src/prop-controllers/introspection.d.ts.map +1 -1
  154. package/dist/types/src/runtimes/react/index.d.ts +2 -0
  155. package/dist/types/src/runtimes/react/index.d.ts.map +1 -1
  156. package/dist/types/src/state/react-page.d.ts +1 -0
  157. package/dist/types/src/state/react-page.d.ts.map +1 -1
  158. package/dist/types/types/locale.d.ts +1 -1
  159. package/package.json +2 -1
  160. package/dist/text-input.cjs.js +0 -26
  161. package/dist/text-input.cjs.js.map +0 -1
  162. package/dist/text-input.es.js +0 -18
  163. package/dist/text-input.es.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"control-serialization.es.js","sources":["../src/builder/serialization/function-serialization.ts","../src/builder/serialization/controls/combobox.ts","../src/builder/serialization/controls/list.ts","../src/builder/serialization/controls/rich-text-v2.ts","../src/builder/serialization/controls/shape.ts","../src/builder/serialization/controls/style-v2.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 { ComboboxControlDefinition } from '../../../controls'\nimport { deserializeFunction, serializeFunction } from '../function-serialization'\nimport { Deserialize, Serialize } from './types'\n\nexport function serializeComboboxControlDefinition(\n definition: ComboboxControlDefinition,\n): [Serialize<ComboboxControlDefinition>, Transferable[]] {\n const transferables = []\n const getOptions = definition.config.getOptions && serializeFunction(definition.config.getOptions)\n\n if (getOptions) transferables.push(getOptions)\n\n return [{ ...definition, config: { ...definition.config, getOptions } }, transferables] as [\n Serialize<ComboboxControlDefinition>,\n Transferable[],\n ]\n}\n\nexport function deserializeComboboxControlDefinition(\n definition: Serialize<ComboboxControlDefinition>,\n): Deserialize<Serialize<ComboboxControlDefinition>> {\n const getOptions =\n definition.config.getOptions && deserializeFunction(definition.config.getOptions)\n\n return {\n ...definition,\n config: { ...definition.config, getOptions },\n } as Deserialize<Serialize<ComboboxControlDefinition>>\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 { RichTextV2ControlDefinition } from '../../../controls'\nimport { deserializeControl, serializeControl } from '../control-serialization'\nimport { deserializeFunction, serializeFunction } from '../function-serialization'\nimport { Deserialize, Serialize } from './types'\n\nexport function serializeRichTextControlV2(\n definition: RichTextV2ControlDefinition,\n): [Serialize<RichTextV2ControlDefinition>, Transferable[]] {\n const { plugins, ...config } = definition.config\n const transferables: Transferable[] = []\n\n return [\n {\n ...definition,\n config: {\n ...config,\n plugins:\n plugins?.map(plugin => {\n const onKeyDown = plugin.onKeyDown && serializeFunction(plugin.onKeyDown)\n if (onKeyDown) transferables.push(onKeyDown)\n const withPlugin = plugin.withPlugin && serializeFunction(plugin.withPlugin)\n if (withPlugin) transferables.push(withPlugin)\n\n if (plugin.control) {\n const [definition, pluginTransferables] = serializeControl(plugin.control.definition)\n transferables.push(...pluginTransferables)\n const getValue = serializeFunction(plugin.control.getValue)\n if (getValue) transferables.push(getValue)\n const onChange = serializeFunction(plugin.control.onChange)\n if (onChange) transferables.push(onChange)\n\n return {\n control: {\n definition,\n onChange,\n getValue,\n },\n onKeyDown,\n withPlugin,\n }\n }\n\n return {\n onKeyDown,\n withPlugin,\n }\n }) ?? [],\n },\n },\n transferables,\n ] as [Serialize<RichTextV2ControlDefinition>, Transferable[]]\n}\n\nexport function deserializeRichTextControlV2(\n definition: Serialize<RichTextV2ControlDefinition>,\n): Deserialize<Serialize<RichTextV2ControlDefinition>> {\n return {\n ...definition,\n config: {\n ...definition.config,\n plugins:\n definition.config.plugins?.map(plugin => {\n // TODO: you shouldn't need to cast all the functions\n // There is a type missmatch where functions within the plugin aren't typed as Serialize<T>\n // This prevents them from being used with `deserializeFunction`\n const onKeyDown = plugin.onKeyDown && deserializeFunction(plugin.onKeyDown as any)\n const withPlugin = plugin.withPlugin && deserializeFunction(plugin.withPlugin as any)\n\n if (plugin.control) {\n const definition = deserializeControl(plugin.control.definition as any)\n const getValue = deserializeFunction(plugin.control.getValue as any)\n const onChange = deserializeFunction(plugin.control.onChange as any)\n\n return {\n control: {\n definition,\n onChange,\n getValue,\n },\n onKeyDown,\n withPlugin,\n }\n }\n\n return {\n onKeyDown,\n withPlugin,\n }\n }) ?? [],\n },\n } as Deserialize<Serialize<RichTextV2ControlDefinition>>\n}\n","import { ShapeControlDefinition } from '../../../controls'\nimport {\n deserializeControl,\n DeserializedControl,\n serializeControl,\n SerializedControl,\n} from '../control-serialization'\nimport { Deserialize, Serialize } from './types'\n\nexport function serializeShapeControlDefinition(\n definition: ShapeControlDefinition,\n): [Serialize<ShapeControlDefinition>, Transferable[]] {\n const [type, transferables] = Object.entries(definition.config.type).reduce(\n ([type, transferables], [key, value]) => {\n const [serializedType, serializedTransferables] = serializeControl(value)\n\n type[key] = serializedType\n transferables.push(...serializedTransferables)\n\n return [type, transferables]\n },\n [{} as Record<string, SerializedControl>, [] as Transferable[]],\n )\n\n return [{ ...definition, config: { ...definition.config, type } }, transferables] as [\n Serialize<ShapeControlDefinition>,\n Transferable[],\n ]\n}\n\nexport function deserializeShapeControlDefinition(\n definition: Serialize<ShapeControlDefinition>,\n): Deserialize<Serialize<ShapeControlDefinition>> {\n const type = Object.entries(definition.config.type).reduce((type, [key, value]) => {\n const serializedType = deserializeControl(value)\n\n type[key] = serializedType\n\n return type\n }, {} as Record<string, DeserializedControl>)\n\n return {\n ...definition,\n config: { ...definition.config, type },\n } as Deserialize<Serialize<ShapeControlDefinition>>\n}\n","import { StyleV2ControlDefinition } from '../../../controls'\nimport { deserializeControl, serializeControl } from '../control-serialization'\nimport { deserializeFunction, serializeFunction } from '../function-serialization'\nimport { Serialize, Deserialize } from './types'\n\nexport function serializeStyleV2Control(\n definition: StyleV2ControlDefinition,\n): [Serialize<StyleV2ControlDefinition>, Transferable[]] {\n const [type, transferables] = serializeControl(definition.config.type)\n const getStyle = definition.config.getStyle && serializeFunction(definition.config.getStyle)\n\n if (getStyle) {\n transferables.push(getStyle)\n }\n\n return [\n {\n ...definition,\n config: {\n ...definition.config,\n type,\n getStyle,\n },\n },\n transferables,\n ] as [Serialize<StyleV2ControlDefinition>, Transferable[]]\n}\n\nexport function deserializeStyleV2Control(\n definition: Serialize<StyleV2ControlDefinition>,\n): Deserialize<Serialize<StyleV2ControlDefinition>> {\n const type = deserializeControl(definition.config.type)\n const getStyle = definition.config.getStyle && deserializeFunction(definition.config.getStyle)\n\n return {\n ...definition,\n config: {\n ...definition.config,\n getStyle,\n type,\n },\n } as Deserialize<Serialize<StyleV2ControlDefinition>>\n}\n","import {\n ComboboxControlDefinition,\n ComboboxControlType,\n ListControlDefinition,\n ListControlType,\n RichTextV2ControlDefinition,\n RichTextV2ControlType,\n ShapeControlDefinition,\n ShapeControlType,\n StyleV2ControlDefinition,\n StyleV2ControlType,\n} 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 {\n deserializeComboboxControlDefinition,\n serializeComboboxControlDefinition,\n} from './controls/combobox'\nimport { deserializeListControlDefinition, serializeListControlDefinition } from './controls/list'\nimport { deserializeRichTextControlV2, serializeRichTextControlV2 } from './controls/rich-text-v2'\nimport {\n deserializeShapeControlDefinition,\n serializeShapeControlDefinition,\n} from './controls/shape'\nimport { deserializeStyleV2Control, serializeStyleV2Control } from './controls/style-v2'\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 | RichTextV2ControlDefinition\n | ComboboxControlDefinition\n | ShapeControlDefinition\n | ListControlDefinition\n | StyleV2ControlDefinition\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<RichTextV2ControlDefinition>\n | Serialize<ComboboxControlDefinition>\n | Serialize<ShapeControlDefinition>\n | Serialize<ListControlDefinition>\n | Serialize<StyleV2ControlDefinition>\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 | RichTextV2ControlDefinition\n | ComboboxControlDefinition\n | ShapeControlDefinition\n | ListControlDefinition\n | StyleV2ControlDefinition\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<RichTextV2ControlDefinition>>\n | Deserialize<Serialize<ComboboxControlDefinition>>\n | Deserialize<Serialize<ShapeControlDefinition>>\n | Deserialize<Serialize<ListControlDefinition>>\n | Deserialize<Serialize<StyleV2ControlDefinition>>\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 RichTextV2ControlType:\n return serializeRichTextControlV2(control)\n\n case StyleV2ControlType:\n return serializeStyleV2Control(control)\n\n case ComboboxControlType:\n return serializeComboboxControlDefinition(control)\n\n case ShapeControlType:\n return serializeShapeControlDefinition(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 RichTextV2ControlType:\n return deserializeRichTextControlV2(serializedControl)\n\n case StyleV2ControlType:\n return deserializeStyleV2Control(serializedControl)\n\n case ComboboxControlType:\n return deserializeComboboxControlDefinition(serializedControl)\n\n case ShapeControlType:\n return deserializeShapeControlDefinition(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":"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"}
1
+ {"version":3,"file":"control-serialization.es.js","sources":["../src/builder/serialization/function-serialization.ts","../src/builder/serialization/controls/combobox.ts","../src/builder/serialization/controls/list.ts","../src/builder/serialization/controls/rich-text-v2.ts","../src/builder/serialization/controls/shape.ts","../src/builder/serialization/controls/style-v2.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 { ComboboxControlDefinition } from '../../../controls'\nimport { deserializeFunction, serializeFunction } from '../function-serialization'\nimport { Deserialize, Serialize } from './types'\n\nexport function serializeComboboxControlDefinition(\n definition: ComboboxControlDefinition,\n): [Serialize<ComboboxControlDefinition>, Transferable[]] {\n const transferables = []\n const getOptions = definition.config.getOptions && serializeFunction(definition.config.getOptions)\n\n if (getOptions) transferables.push(getOptions)\n\n return [{ ...definition, config: { ...definition.config, getOptions } }, transferables] as [\n Serialize<ComboboxControlDefinition>,\n Transferable[],\n ]\n}\n\nexport function deserializeComboboxControlDefinition(\n definition: Serialize<ComboboxControlDefinition>,\n): Deserialize<Serialize<ComboboxControlDefinition>> {\n const getOptions =\n definition.config.getOptions && deserializeFunction(definition.config.getOptions)\n\n return {\n ...definition,\n config: { ...definition.config, getOptions },\n } as Deserialize<Serialize<ComboboxControlDefinition>>\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 { RichTextV2ControlDefinition } from '../../../controls'\nimport { deserializeControl, serializeControl } from '../control-serialization'\nimport { deserializeFunction, serializeFunction } from '../function-serialization'\nimport { Deserialize, Serialize } from './types'\n\nexport function serializeRichTextControlV2(\n definition: RichTextV2ControlDefinition,\n): [Serialize<RichTextV2ControlDefinition>, Transferable[]] {\n const { plugins, ...config } = definition.config\n const transferables: Transferable[] = []\n\n return [\n {\n ...definition,\n config: {\n ...config,\n plugins:\n plugins?.map(plugin => {\n const onKeyDown = plugin.onKeyDown && serializeFunction(plugin.onKeyDown)\n if (onKeyDown) transferables.push(onKeyDown)\n const withPlugin = plugin.withPlugin && serializeFunction(plugin.withPlugin)\n if (withPlugin) transferables.push(withPlugin)\n\n if (plugin.control) {\n const [definition, pluginTransferables] = serializeControl(plugin.control.definition)\n transferables.push(...pluginTransferables)\n const getValue = serializeFunction(plugin.control.getValue)\n if (getValue) transferables.push(getValue)\n const onChange = serializeFunction(plugin.control.onChange)\n if (onChange) transferables.push(onChange)\n\n return {\n control: {\n definition,\n onChange,\n getValue,\n },\n onKeyDown,\n withPlugin,\n }\n }\n\n return {\n onKeyDown,\n withPlugin,\n }\n }) ?? [],\n },\n },\n transferables,\n ] as [Serialize<RichTextV2ControlDefinition>, Transferable[]]\n}\n\nexport function deserializeRichTextControlV2(\n definition: Serialize<RichTextV2ControlDefinition>,\n): Deserialize<Serialize<RichTextV2ControlDefinition>> {\n return {\n ...definition,\n config: {\n ...definition.config,\n plugins:\n definition.config.plugins?.map(plugin => {\n // TODO: you shouldn't need to cast all the functions\n // There is a type missmatch where functions within the plugin aren't typed as Serialize<T>\n // This prevents them from being used with `deserializeFunction`\n const onKeyDown = plugin.onKeyDown && deserializeFunction(plugin.onKeyDown as any)\n const withPlugin = plugin.withPlugin && deserializeFunction(plugin.withPlugin as any)\n\n if (plugin.control) {\n const definition = deserializeControl(plugin.control.definition as any)\n const getValue = deserializeFunction(plugin.control.getValue as any)\n const onChange = deserializeFunction(plugin.control.onChange as any)\n\n return {\n control: {\n definition,\n onChange,\n getValue,\n },\n onKeyDown,\n withPlugin,\n }\n }\n\n return {\n onKeyDown,\n withPlugin,\n }\n }) ?? [],\n },\n } as Deserialize<Serialize<RichTextV2ControlDefinition>>\n}\n","import { ShapeControlDefinition } from '../../../controls'\nimport {\n deserializeControl,\n DeserializedControl,\n serializeControl,\n SerializedControl,\n} from '../control-serialization'\nimport { Deserialize, Serialize } from './types'\n\nexport function serializeShapeControlDefinition(\n definition: ShapeControlDefinition,\n): [Serialize<ShapeControlDefinition>, Transferable[]] {\n const [type, transferables] = Object.entries(definition.config.type).reduce(\n ([type, transferables], [key, value]) => {\n const [serializedType, serializedTransferables] = serializeControl(value)\n\n type[key] = serializedType\n transferables.push(...serializedTransferables)\n\n return [type, transferables]\n },\n [{} as Record<string, SerializedControl>, [] as Transferable[]],\n )\n\n return [{ ...definition, config: { ...definition.config, type } }, transferables] as [\n Serialize<ShapeControlDefinition>,\n Transferable[],\n ]\n}\n\nexport function deserializeShapeControlDefinition(\n definition: Serialize<ShapeControlDefinition>,\n): Deserialize<Serialize<ShapeControlDefinition>> {\n const type = Object.entries(definition.config.type).reduce((type, [key, value]) => {\n const serializedType = deserializeControl(value)\n\n type[key] = serializedType\n\n return type\n }, {} as Record<string, DeserializedControl>)\n\n return {\n ...definition,\n config: { ...definition.config, type },\n } as Deserialize<Serialize<ShapeControlDefinition>>\n}\n","import { StyleV2ControlDefinition } from '../../../controls'\nimport { deserializeControl, serializeControl } from '../control-serialization'\nimport { deserializeFunction, serializeFunction } from '../function-serialization'\nimport { Serialize, Deserialize } from './types'\n\nexport function serializeStyleV2Control(\n definition: StyleV2ControlDefinition,\n): [Serialize<StyleV2ControlDefinition>, Transferable[]] {\n const [type, transferables] = serializeControl(definition.config.type)\n const getStyle = definition.config.getStyle && serializeFunction(definition.config.getStyle)\n\n if (getStyle) {\n transferables.push(getStyle)\n }\n\n return [\n {\n ...definition,\n config: {\n ...definition.config,\n type,\n getStyle,\n },\n },\n transferables,\n ] as [Serialize<StyleV2ControlDefinition>, Transferable[]]\n}\n\nexport function deserializeStyleV2Control(\n definition: Serialize<StyleV2ControlDefinition>,\n): Deserialize<Serialize<StyleV2ControlDefinition>> {\n const type = deserializeControl(definition.config.type)\n const getStyle = definition.config.getStyle && deserializeFunction(definition.config.getStyle)\n\n return {\n ...definition,\n config: {\n ...definition.config,\n getStyle,\n type,\n },\n } as Deserialize<Serialize<StyleV2ControlDefinition>>\n}\n","import {\n ComboboxControlDefinition,\n ComboboxControlType,\n ListControlDefinition,\n ListControlType,\n RichTextV2ControlDefinition,\n RichTextV2ControlType,\n ShapeControlDefinition,\n ShapeControlType,\n StyleV2ControlDefinition,\n StyleV2ControlType,\n} 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 {\n deserializeComboboxControlDefinition,\n serializeComboboxControlDefinition,\n} from './controls/combobox'\nimport { deserializeListControlDefinition, serializeListControlDefinition } from './controls/list'\nimport { deserializeRichTextControlV2, serializeRichTextControlV2 } from './controls/rich-text-v2'\nimport {\n deserializeShapeControlDefinition,\n serializeShapeControlDefinition,\n} from './controls/shape'\nimport { deserializeStyleV2Control, serializeStyleV2Control } from './controls/style-v2'\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 | RichTextV2ControlDefinition\n | ComboboxControlDefinition\n | ShapeControlDefinition\n | ListControlDefinition\n | StyleV2ControlDefinition\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<RichTextV2ControlDefinition>\n | Serialize<ComboboxControlDefinition>\n | Serialize<ShapeControlDefinition>\n | Serialize<ListControlDefinition>\n | Serialize<StyleV2ControlDefinition>\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 | RichTextV2ControlDefinition\n | ComboboxControlDefinition\n | ShapeControlDefinition\n | ListControlDefinition\n | StyleV2ControlDefinition\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<RichTextV2ControlDefinition>>\n | Deserialize<Serialize<ComboboxControlDefinition>>\n | Deserialize<Serialize<ShapeControlDefinition>>\n | Deserialize<Serialize<ListControlDefinition>>\n | Deserialize<Serialize<StyleV2ControlDefinition>>\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 RichTextV2ControlType:\n return serializeRichTextControlV2(control)\n\n case StyleV2ControlType:\n return serializeStyleV2Control(control)\n\n case ComboboxControlType:\n return serializeComboboxControlDefinition(control)\n\n case ShapeControlType:\n return serializeShapeControlDefinition(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 RichTextV2ControlType:\n return deserializeRichTextControlV2(serializedControl)\n\n case StyleV2ControlType:\n return deserializeStyleV2Control(serializedControl)\n\n case ComboboxControlType:\n return deserializeComboboxControlDefinition(serializedControl)\n\n case ShapeControlType:\n return deserializeShapeControlDefinition(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;AAEA,IAAI,YAAY,QAAQ;AACtB,QAAM,EAAE,UAAU,MAAM,WAAW,YAAY;AAEtC,WAAA,WAAW,2CAA2C,MAAM;AACnE,SAAK,eAAe,YAAY;AAExB,YAAA,MAAM,oBAAoB,kBAAkB,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AAGlE,YAAM,SAAS,MAAM,IAAI,GAAG,CAAC;AAGtB,aAAA,MAAM,EAAE,KAAK,CAAC;AAAA,IAAA,CACtB;AAED,SAAK,8BAA8B,YAAY;AAEvC,YAAA,MAAM,oBAAoB,kBAAkB,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AAGlE,YAAM,UAAU,MAAM,QAAQ,IAAI,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;AAGzE,aAAA,OAAO,EAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,IAAA,CACxC;AAAA,EAAA,CACF;AAEQ,WAAA,WAAW,wBAAwB,MAAM;AAChD,SAAK,gBAAgB,MAAM;AAEzB,YAAM,MAAM,kBAAkB,CAAC,GAAG,MAAM,IAAI,CAAC;AAGvC,YAAA,SAAS,qBAAqB,GAAG;AAGhC,aAAA,MAAM,EAAE,KAAK,IAAI;AAAA,IAAA,CACzB;AAED,SAAK,kBAAkB,MAAM;AAE3B,YAAM,MAAM,CAAC,GAAW,MAAc,IAAI;AAGpC,YAAA,SAAS,qBAAqB,GAAG;AAGhC,aAAA,MAAM,EAAE,KAAK,KAAK;AAAA,IAAA,CAC1B;AAAA,EAAA,CACF;AACH;AC3GO,4CACL,YACwD;AACxD,QAAM,gBAAgB,CAAA;AACtB,QAAM,aAAa,WAAW,OAAO,cAAc,kBAAkB,WAAW,OAAO,UAAU;AAE7F,MAAA;AAAY,kBAAc,KAAK,UAAU;AAEtC,SAAA,CAAC,iCAAK,aAAL,EAAiB,QAAQ,iCAAK,WAAW,SAAhB,EAAwB,WAAA,OAAgB,aAAa;AAIxF;AAEO,8CACL,YACmD;AACnD,QAAM,aACJ,WAAW,OAAO,cAAc,oBAAoB,WAAW,OAAO,UAAU;AAE3E,SAAA,iCACF,aADE;AAAA,IAEL,QAAQ,iCAAK,WAAW,SAAhB,EAAwB,WAAW;AAAA,EAAA;AAE/C;ACvBO,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;AC1BO,oCACL,YAC0D;;AACpD,QAAyB,gBAAW,QAAlC,cAAuB,IAAX,mBAAW,IAAX,CAAZ;AACR,QAAM,gBAAgC,CAAA;AAE/B,SAAA;AAAA,IACL,iCACK,aADL;AAAA,MAEE,QAAQ,iCACH,SADG;AAAA,QAEN,SACE,yCAAS,IAAI,CAAU,WAAA;AACrB,gBAAM,YAAY,OAAO,aAAa,kBAAkB,OAAO,SAAS;AACpE,cAAA;AAAW,0BAAc,KAAK,SAAS;AAC3C,gBAAM,aAAa,OAAO,cAAc,kBAAkB,OAAO,UAAU;AACvE,cAAA;AAAY,0BAAc,KAAK,UAAU;AAE7C,cAAI,OAAO,SAAS;AAClB,kBAAM,CAAC,aAAY,uBAAuB,iBAAiB,OAAO,QAAQ,UAAU;AACtE,0BAAA,KAAK,GAAG,mBAAmB;AACzC,kBAAM,WAAW,kBAAkB,OAAO,QAAQ,QAAQ;AACtD,gBAAA;AAAU,4BAAc,KAAK,QAAQ;AACzC,kBAAM,WAAW,kBAAkB,OAAO,QAAQ,QAAQ;AACtD,gBAAA;AAAU,4BAAc,KAAK,QAAQ;AAElC,mBAAA;AAAA,cACL,SAAS;AAAA,gBACP,YAAA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UAEJ;AAEO,iBAAA;AAAA,YACL;AAAA,YACA;AAAA,UAAA;AAAA,QAEH,OA7BD,YA6BM,CAAC;AAAA,MACX;AAAA,IACF;AAAA,IACA;AAAA,EAAA;AAEJ;AAEO,sCACL,YACqD;;AAC9C,SAAA,iCACF,aADE;AAAA,IAEL,QAAQ,iCACH,WAAW,SADR;AAAA,MAEN,SACE,uBAAW,OAAO,YAAlB,mBAA2B,IAAI,CAAU,WAAA;AAIvC,cAAM,YAAY,OAAO,aAAa,oBAAoB,OAAO,SAAgB;AACjF,cAAM,aAAa,OAAO,cAAc,oBAAoB,OAAO,UAAiB;AAEpF,YAAI,OAAO,SAAS;AAClB,gBAAM,cAAa,mBAAmB,OAAO,QAAQ,UAAiB;AACtE,gBAAM,WAAW,oBAAoB,OAAO,QAAQ,QAAe;AACnE,gBAAM,WAAW,oBAAoB,OAAO,QAAQ,QAAe;AAE5D,iBAAA;AAAA,YACL,SAAS;AAAA,cACP,YAAA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QAEJ;AAEO,eAAA;AAAA,UACL;AAAA,UACA;AAAA,QAAA;AAAA,MAEH,OA3BD,YA2BM,CAAC;AAAA,IACX;AAAA,EAAA;AAEJ;AClFO,yCACL,YACqD;AACrD,QAAM,CAAC,MAAM,iBAAiB,OAAO,QAAQ,WAAW,OAAO,IAAI,EAAE,OACnE,CAAC,CAAC,OAAM,iBAAgB,CAAC,KAAK,WAAW;AACvC,UAAM,CAAC,gBAAgB,2BAA2B,iBAAiB,KAAK;AAExE,UAAK,OAAO;AACE,mBAAA,KAAK,GAAG,uBAAuB;AAEtC,WAAA,CAAC,OAAM,cAAa;AAAA,EAAA,GAE7B,CAAC,CAAA,GAAyC,CAAoB,CAAA,CAChE;AAEO,SAAA,CAAC,iCAAK,aAAL,EAAiB,QAAQ,iCAAK,WAAW,SAAhB,EAAwB,KAAA,OAAU,aAAa;AAIlF;AAEO,2CACL,YACgD;AAChD,QAAM,OAAO,OAAO,QAAQ,WAAW,OAAO,IAAI,EAAE,OAAO,CAAC,OAAM,CAAC,KAAK,WAAW;AAC3E,UAAA,iBAAiB,mBAAmB,KAAK;AAE/C,UAAK,OAAO;AAEL,WAAA;AAAA,EACT,GAAG,CAAyC,CAAA;AAErC,SAAA,iCACF,aADE;AAAA,IAEL,QAAQ,iCAAK,WAAW,SAAhB,EAAwB,KAAK;AAAA,EAAA;AAEzC;ACxCO,iCACL,YACuD;AACvD,QAAM,CAAC,MAAM,iBAAiB,iBAAiB,WAAW,OAAO,IAAI;AACrE,QAAM,WAAW,WAAW,OAAO,YAAY,kBAAkB,WAAW,OAAO,QAAQ;AAE3F,MAAI,UAAU;AACZ,kBAAc,KAAK,QAAQ;AAAA,EAC7B;AAEO,SAAA;AAAA,IACL,iCACK,aADL;AAAA,MAEE,QAAQ,iCACH,WAAW,SADR;AAAA,QAEN;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,EAAA;AAEJ;AAEO,mCACL,YACkD;AAClD,QAAM,OAAO,mBAAmB,WAAW,OAAO,IAAI;AACtD,QAAM,WAAW,WAAW,OAAO,YAAY,oBAAoB,WAAW,OAAO,QAAQ;AAEtF,SAAA,iCACF,aADE;AAAA,IAEL,QAAQ,iCACH,WAAW,SADR;AAAA,MAEN;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAEJ;AC0DA,+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;AAgIO,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,2BAA2B,OAAO;AAAA,SAEtC;AACH,aAAO,wBAAwB,OAAO;AAAA,SAEnC;AACH,aAAO,mCAAmC,OAAO;AAAA,SAE9C;AACH,aAAO,gCAAgC,OAAO;AAAA,SAE3C;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,6BAA6B,iBAAiB;AAAA,SAElD;AACH,aAAO,0BAA0B,iBAAiB;AAAA,SAE/C;AACH,aAAO,qCAAqC,iBAAiB;AAAA,SAE1D;AACH,aAAO,kCAAkC,iBAAiB;AAAA,SAEvD;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,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- var textInput = require("./text-input.cjs.js");
3
+ var number = require("./number.cjs.js");
4
4
  var reactPage = require("./react-page.cjs.js");
5
5
  var combobox = require("./combobox.cjs.js");
6
6
  require("redux");
@@ -8,6 +8,7 @@ require("redux-thunk");
8
8
  require("./actions.cjs.js");
9
9
  require("zod");
10
10
  require("./state/breakpoints.cjs.js");
11
+ require("ts-pattern");
11
12
  require("corporate-ipsum");
12
13
  require("slate");
13
14
  require("uuid");
@@ -17,14 +18,10 @@ require("@emotion/serialize");
17
18
  require("@emotion/utils");
18
19
  require("react/jsx-runtime");
19
20
  require("is-hotkey");
20
- exports.Checkbox = textInput.Checkbox;
21
- exports.CheckboxControlType = textInput.CheckboxControlType;
22
- exports.Number = textInput.Number;
23
- exports.NumberControlType = textInput.NumberControlType;
24
- exports.TextArea = textInput.TextArea;
25
- exports.TextAreaControlType = textInput.TextAreaControlType;
26
- exports.TextInput = textInput.TextInput;
27
- exports.TextInputControlType = textInput.TextInputControlType;
21
+ exports.Checkbox = number.Checkbox;
22
+ exports.CheckboxControlType = number.CheckboxControlType;
23
+ exports.Number = number.Number;
24
+ exports.NumberControlType = number.NumberControlType;
28
25
  exports.Color = reactPage.Color;
29
26
  exports.ColorControlType = reactPage.ColorControlType;
30
27
  exports.IconRadioGroupControlType = reactPage.IconRadioGroupControlType;
@@ -64,8 +61,12 @@ exports.StyleControlType = reactPage.StyleControlType;
64
61
  exports.StyleV2Control = reactPage.StyleV2Control;
65
62
  exports.StyleV2ControlMessageType = reactPage.StyleV2ControlMessageType;
66
63
  exports.StyleV2ControlType = reactPage.StyleV2ControlType;
64
+ exports.TextArea = reactPage.TextArea$1;
65
+ exports.TextAreaControlType = reactPage.TextAreaControlType;
66
+ exports.TextInput = reactPage.TextInput$1;
67
+ exports.TextInputControlType = reactPage.TextInputControlType;
67
68
  exports.TypographyControlType = reactPage.TypographyControlType;
68
- exports.copy = reactPage.copy;
69
+ exports.copy = reactPage.copy$2;
69
70
  exports.copyColorData = reactPage.copyColorData;
70
71
  exports.copyImageData = reactPage.copyImageData;
71
72
  exports.copyLinkData = reactPage.copyLinkData;
@@ -79,12 +80,15 @@ exports.getListElementChildren = reactPage.getListElementChildren;
79
80
  exports.getListFileIds = reactPage.getListFileIds;
80
81
  exports.getListPageIds = reactPage.getListPageIds;
81
82
  exports.getListSwatchIds = reactPage.getListSwatchIds;
83
+ exports.getListTranslatableData = reactPage.getListTranslatableData;
82
84
  exports.getListTypographyIds = reactPage.getListTypographyIds;
83
85
  exports.getShapeElementChildren = reactPage.getShapeElementChildren;
84
86
  exports.getShapeFileIds = reactPage.getShapeFileIds;
85
87
  exports.getShapePageIds = reactPage.getShapePageIds;
86
88
  exports.getShapeSwatchIds = reactPage.getShapeSwatchIds;
89
+ exports.getShapeTranslatableData = reactPage.getShapeTranslatableData;
87
90
  exports.getShapeTypographyIds = reactPage.getShapeTypographyIds;
91
+ exports.getTranslatableData = reactPage.getTranslatableData;
88
92
  exports.getTypographySwatchIds = reactPage.getTypographySwatchIds;
89
93
  exports.getTypographyTypographyIds = reactPage.getTypographyTypographyIds;
90
94
  exports.isRichTextV1Data = reactPage.isRichTextV1Data;
@@ -1 +1 @@
1
- {"version":3,"file":"controls.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"controls.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,11 +1,12 @@
1
- export { b as Checkbox, C as CheckboxControlType, c as Number, N as NumberControlType, d as TextArea, T as TextAreaControlType, e as TextInput, a as TextInputControlType } from "./text-input.es.js";
2
- export { aE as Color, ah as ColorControlType, ag as IconRadioGroupControlType, aK as Image, af as ImageControlType, a2 as ImageControlValueFormat, aM as Link, ae as LinkControlType, aO as List, aQ as ListControl, aP as ListControlMessageType, ac as ListControlType, bj as ObjectType, X as RichText, bl as RichTextControl, bk as RichTextControlMessageType, a9 as RichTextControlType, bs as RichTextV2Control, br as RichTextV2ControlMessageType, a8 as RichTextV2ControlType, bq as RichTextV2Mode, aX as Select, ai as SelectControlType, aY as Shape, a_ as ShapeControl, aZ as ShapeControlMessageType, ad as ShapeControlType, b5 as Slot, b7 as SlotControl, b6 as SlotControlMessageType, aa as SlotControlType, ba as Style, bc as StyleControl, bb as StyleControlMessageType, a1 as StyleControlProperty, a7 as StyleControlType, bh as StyleV2Control, bg as StyleV2ControlMessageType, ab as StyleV2ControlType, a6 as TypographyControlType, aG as copy, aF as copyColorData, aL as copyImageData, aN as copyLinkData, aR as copyListData, bi as copyRichTextData, a$ as copyShapeData, b8 as copySlotData, bd as copyStyleData, bv as createRichTextV2Plugin, aS as getListElementChildren, aU as getListFileIds, aW as getListPageIds, aT as getListSwatchIds, aV as getListTypographyIds, b0 as getShapeElementChildren, b4 as getShapeFileIds, b3 as getShapePageIds, b1 as getShapeSwatchIds, b2 as getShapeTypographyIds, bx as getTypographySwatchIds, by as getTypographyTypographyIds, a4 as isRichTextV1Data, aH as merge, b9 as mergeSlotData, bp as richTextDAOToDTO, bn as richTextDTOtoDAO, bm as richTextDTOtoSelection, bt as richTextV2DataToDescendents, bu as richTextV2DescendentsToData, bo as toSelectionDTO, aJ as unstable_IconRadioGroup, aI as unstable_IconRadioGroupIcon, bf as unstable_StyleV2, bw as unstable_Typography, be as unstable_useStyleV2ClassName } from "./react-page.es.js";
1
+ export { a as Checkbox, C as CheckboxControlType, b as Number, N as NumberControlType } from "./number.es.js";
2
+ export { aJ as Color, aj as ColorControlType, ai as IconRadioGroupControlType, aQ as Image, ah as ImageControlType, a4 as ImageControlValueFormat, aS as Link, ag as LinkControlType, aU as List, aW as ListControl, aV as ListControlMessageType, ae as ListControlType, bt as ObjectType, Z as RichText, bv as RichTextControl, bu as RichTextControlMessageType, ab as RichTextControlType, bC as RichTextV2Control, bB as RichTextV2ControlMessageType, aa as RichTextV2ControlType, bA as RichTextV2Mode, b2 as Select, ak as SelectControlType, b3 as Shape, b5 as ShapeControl, b4 as ShapeControlMessageType, af as ShapeControlType, bd as Slot, bf as SlotControl, be as SlotControlMessageType, ac as SlotControlType, bi as Style, bk as StyleControl, bj as StyleControlMessageType, a3 as StyleControlProperty, a9 as StyleControlType, bp as StyleV2Control, bo as StyleV2ControlMessageType, ad as StyleV2ControlType, bq as TextArea, al as TextAreaControlType, br as TextInput, am as TextInputControlType, a8 as TypographyControlType, aL as copy, aK as copyColorData, aR as copyImageData, aT as copyLinkData, aX as copyListData, bs as copyRichTextData, b6 as copyShapeData, bg as copySlotData, bl as copyStyleData, bF as createRichTextV2Plugin, aY as getListElementChildren, a_ as getListFileIds, b0 as getListPageIds, aZ as getListSwatchIds, b1 as getListTranslatableData, a$ as getListTypographyIds, b7 as getShapeElementChildren, bb as getShapeFileIds, ba as getShapePageIds, b8 as getShapeSwatchIds, bc as getShapeTranslatableData, b9 as getShapeTypographyIds, aN as getTranslatableData, bH as getTypographySwatchIds, bI as getTypographyTypographyIds, a6 as isRichTextV1Data, aM as merge, bh as mergeSlotData, bz as richTextDAOToDTO, bx as richTextDTOtoDAO, bw as richTextDTOtoSelection, bD as richTextV2DataToDescendents, bE as richTextV2DescendentsToData, by as toSelectionDTO, aP as unstable_IconRadioGroup, aO as unstable_IconRadioGroupIcon, bn as unstable_StyleV2, bG as unstable_Typography, bm as unstable_useStyleV2ClassName } from "./react-page.es.js";
3
3
  export { a as Combobox, C as ComboboxControlType } from "./combobox.es.js";
4
4
  import "redux";
5
5
  import "redux-thunk";
6
6
  import "./actions.es.js";
7
7
  import "zod";
8
8
  import "./state/breakpoints.es.js";
9
+ import "ts-pattern";
9
10
  import "corporate-ipsum";
10
11
  import "slate";
11
12
  import "uuid";
@@ -1 +1 @@
1
- {"version":3,"file":"controls.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"controls.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
package/dist/index.cjs.js CHANGED
@@ -41,10 +41,11 @@ var dynamic = require("next/dynamic");
41
41
  var reactPage = require("./react-page.cjs.js");
42
42
  var actions = require("./actions.cjs.js");
43
43
  var jsxRuntime = require("react/jsx-runtime");
44
- var textInput = require("./text-input.cjs.js");
44
+ var number = require("./number.cjs.js");
45
45
  var combobox = require("./combobox.cjs.js");
46
46
  var uuid = require("uuid");
47
47
  require("slate");
48
+ require("ts-pattern");
48
49
  var shim = require("use-sync-external-store/shim");
49
50
  var redux = require("redux");
50
51
  var thunk = require("redux-thunk");
@@ -1133,6 +1134,9 @@ Received "${apiKey}" instead.`);
1133
1134
  const sitemap = await response.json();
1134
1135
  return sitemap;
1135
1136
  }
1137
+ getTranslatableData(elementTree2) {
1138
+ return this.runtime.getTranslatableData(elementTree2);
1139
+ }
1136
1140
  }
1137
1141
  class Document$1 extends NextDocument__default["default"] {
1138
1142
  static async getInitialProps(ctx) {
@@ -1188,7 +1192,7 @@ async function fonts(_req, res, { getFonts } = {}) {
1188
1192
  const fonts2 = (_a = await (getFonts == null ? void 0 : getFonts())) != null ? _a : [];
1189
1193
  return res.json(fonts2);
1190
1194
  }
1191
- const version = "0.10.11";
1195
+ const version = "0.10.13";
1192
1196
  async function handler(req, res, { apiKey, siteVersions }) {
1193
1197
  if (req.query.secret !== apiKey) {
1194
1198
  return res.status(401).json({ message: "Unauthorized" });
@@ -1287,6 +1291,14 @@ Read more here: https://nextjs.org/blog/next-12-2#on-demand-incremental-static-r
1287
1291
  return res.status(500).json({ message: "Error Revalidating" });
1288
1292
  }
1289
1293
  }
1294
+ async function translatableData(req, res, client) {
1295
+ const elementTree2 = req.body.elementTree;
1296
+ if (elementTree2 == null) {
1297
+ return res.status(400).json({ message: "elementTree must be defined" });
1298
+ }
1299
+ const translatableData2 = client.getTranslatableData(elementTree2);
1300
+ return res.json({ translatableData: translatableData2 });
1301
+ }
1290
1302
  function MakeswiftApiHandler(apiKey, {
1291
1303
  appOrigin = "https://app.makeswift.com",
1292
1304
  apiOrigin = "https://api.makeswift.com",
@@ -1330,6 +1342,8 @@ Read more about dynamic catch-all routes here: https://nextjs.org/docs/routing/d
1330
1342
  return fonts(req, res, { getFonts });
1331
1343
  if (matches("/element-tree"))
1332
1344
  return elementTree(req, res);
1345
+ if (matches("/translatable-data"))
1346
+ return translatableData(req, res, client);
1333
1347
  const handleResource = (resource) => resource === null ? res.status(404).json({ message: "Not Found" }) : res.json(resource);
1334
1348
  if (m = matches("/swatches/:id")) {
1335
1349
  return client.getSwatch(m.params.id).then(handleResource);
@@ -3561,25 +3575,25 @@ function ControlValue({
3561
3575
  control
3562
3576
  }) {
3563
3577
  switch (definition.type) {
3564
- case textInput.CheckboxControlType:
3578
+ case number.CheckboxControlType:
3565
3579
  return /* @__PURE__ */ jsxRuntime.jsx(RenderHook, {
3566
3580
  hook: useCheckboxControlValue,
3567
3581
  parameters: [data, definition],
3568
3582
  children: (value) => children(value)
3569
3583
  }, definition.type);
3570
- case textInput.NumberControlType:
3584
+ case number.NumberControlType:
3571
3585
  return /* @__PURE__ */ jsxRuntime.jsx(RenderHook, {
3572
3586
  hook: useNumber,
3573
3587
  parameters: [data, definition],
3574
3588
  children: (value) => children(value)
3575
3589
  }, definition.type);
3576
- case textInput.TextInputControlType:
3590
+ case reactPage.TextInputControlType:
3577
3591
  return /* @__PURE__ */ jsxRuntime.jsx(RenderHook, {
3578
3592
  hook: useTextInputValue,
3579
3593
  parameters: [data, definition],
3580
3594
  children: (value) => children(value)
3581
3595
  }, definition.type);
3582
- case textInput.TextAreaControlType:
3596
+ case reactPage.TextAreaControlType:
3583
3597
  return /* @__PURE__ */ jsxRuntime.jsx(RenderHook, {
3584
3598
  hook: useTextAreaValue,
3585
3599
  parameters: [data, definition],
@@ -3713,10 +3727,10 @@ function PropsValue({
3713
3727
  return Object.entries(propControllerDescriptorsRef.current).reduceRight((renderFn, [propName, descriptor]) => (propsValue) => {
3714
3728
  var _a2, _b, _c, _d;
3715
3729
  switch (descriptor.type) {
3716
- case textInput.CheckboxControlType:
3717
- case textInput.NumberControlType:
3718
- case textInput.TextInputControlType:
3719
- case textInput.TextAreaControlType:
3730
+ case number.CheckboxControlType:
3731
+ case number.NumberControlType:
3732
+ case reactPage.TextInputControlType:
3733
+ case reactPage.TextAreaControlType:
3720
3734
  case reactPage.SelectControlType:
3721
3735
  case reactPage.ColorControlType:
3722
3736
  case reactPage.IconRadioGroupControlType:
@@ -3984,6 +3998,9 @@ class ReactRuntime {
3984
3998
  static getBreakpoints() {
3985
3999
  return reactPage.getBreakpoints(this.store.getState());
3986
4000
  }
4001
+ static getTranslatableData(elementTree2) {
4002
+ return reactPage.getElementTreeTranslatableData(this.store.getState(), elementTree2);
4003
+ }
3987
4004
  registerComponent(component, {
3988
4005
  type,
3989
4006
  label,
@@ -4008,6 +4025,9 @@ class ReactRuntime {
4008
4025
  getBreakpoints() {
4009
4026
  return reactPage.getBreakpoints(this.store.getState());
4010
4027
  }
4028
+ getTranslatableData(elementTree2) {
4029
+ return reactPage.getElementTreeTranslatableData(this.store.getState(), elementTree2);
4030
+ }
4011
4031
  }
4012
4032
  __publicField(ReactRuntime, "store", reactPage.configureStore());
4013
4033
  registerBuiltinComponents(ReactRuntime);