@makeswift/runtime 0.8.0 → 0.8.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"descriptors.es.js","sources":["../src/state/modules/builder-edit-mode.ts","../src/controls/color.ts","../src/controls/image.ts","../src/controls/link.ts","../src/prop-controllers/instances.ts","../src/controls/list.ts","../src/controls/shape.ts","../src/controls/style.ts","../src/controls/slot.ts","../src/prop-controllers/copy/backgrounds.ts","../src/prop-controllers/copy/grid.ts","../src/prop-controllers/copy/link.ts","../src/prop-controllers/copy/navigation-links.ts","../src/prop-controllers/copy/shadows.ts","../src/prop-controllers/copy/image.ts","../src/prop-controllers/copy/images.ts","../src/prop-controllers/copy/responsive-color.ts","../src/prop-controllers/copy/table-form-fields.ts","../src/prop-controllers/copy/table.ts","../src/prop-controllers/copy/border.ts","../src/prop-controllers/copy/rich-text.ts","../src/prop-controllers/copy/element-id.ts","../src/prop-controllers/copy.ts","../src/controls/control.ts","../src/controls/rich-text/dto-types.ts","../src/controls/rich-text/types.ts","../src/controls/rich-text/translation.ts","../src/controls/rich-text/rich-text.ts","../src/prop-controllers/descriptors.ts"],"sourcesContent":["import { Action, ActionTypes } from '../actions'\n\nexport const BuilderEditMode = {\n BUILD: 'build',\n CONTENT: 'content',\n INTERACT: 'interact',\n} as const\n\nexport type BuilderEditMode = typeof BuilderEditMode[keyof typeof BuilderEditMode]\n\nexport type State = BuilderEditMode | null\n\nexport function getInitialState(): State {\n return null\n}\n\nexport function reducer(state: State = getInitialState(), action: Action): State {\n switch (action.type) {\n case ActionTypes.SET_BUILDER_EDIT_MODE:\n return action.payload.editMode\n\n default:\n return state\n }\n}\n","import { CopyContext } from '../state/react-page'\nimport { ColorData } from './types'\n\nexport type ColorControlData = ColorData\n\nexport const ColorControlType = 'makeswift::controls::color'\n\ntype ColorControlConfig = {\n label?: string\n labelOrientation?: 'horizontal' | 'vertical'\n defaultValue?: string\n hideAlpha?: boolean\n}\n\nexport type ColorControlDefinition<C extends ColorControlConfig = ColorControlConfig> = {\n type: typeof ColorControlType\n config: C\n}\n\nexport function Color<C extends ColorControlConfig>(config = {} as C): ColorControlDefinition<C> {\n return { type: ColorControlType, config }\n}\n\nexport function copyColorData(\n value: ColorData | undefined,\n context: CopyContext,\n): ColorData | undefined {\n if (value == null) return value\n\n return {\n ...value,\n swatchId: context.replacementContext.swatchIds.get(value.swatchId) ?? value.swatchId,\n }\n}\n","import { CopyContext, ReplacementContext } from '../state/react-page'\n\nexport type ImageControlData = string\n\nexport const ImageControlType = 'makeswift::controls::image'\n\nexport const ImageControlValueFormat = {\n URL: 'makeswift::controls::image::format::url',\n WithDimensions: 'makeswift::controls::image::format::with-dimensions',\n} as const\n\ntype ImageControlValueFormat = typeof ImageControlValueFormat[keyof typeof ImageControlValueFormat]\n\ntype ImageControlConfig = { label?: string; format?: ImageControlValueFormat }\n\nexport type ImageControlDefinition<T extends ImageControlConfig = ImageControlConfig> = {\n type: typeof ImageControlType\n config: T\n}\n\nexport function Image<T extends ImageControlConfig>(\n config: T = {} as T,\n): ImageControlDefinition<T> {\n return { type: ImageControlType, config }\n}\n\nImage.Format = ImageControlValueFormat\n\nexport function copyImageData(\n value: ImageControlData | undefined,\n context: CopyContext,\n): ImageControlData | undefined {\n if (value == null) return value\n\n return context.replacementContext.fileIds.get(value) ?? value\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('image copy', () => {\n test('image is replaced by a one in replacement context', () => {\n // Arrange\n const data: ImageControlData = 'file-id'\n const expected = 'testing'\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n fileIds: new Map([['file-id', 'testing']]),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copyImageData(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext, ReplacementContext } from '../state/react-page'\n\ntype OpenPageLink = {\n type: 'OPEN_PAGE'\n payload: { pageId: string | null | undefined; openInNewTab: boolean }\n}\n\ntype OpenURLLink = { type: 'OPEN_URL'; payload: { url: string; openInNewTab: boolean } }\n\ntype SendEmailLink = {\n type: 'SEND_EMAIL'\n payload: { to: string; subject?: string; body?: string }\n}\n\ntype CallPhoneLink = { type: 'CALL_PHONE'; payload: { phoneNumber: string } }\n\ntype ScrollToElementLink = {\n type: 'SCROLL_TO_ELEMENT'\n payload: {\n elementIdConfig: { elementKey: string; propName: string } | null | undefined\n block: 'start' | 'center' | 'end'\n }\n}\n\nexport type LinkControlData =\n | OpenPageLink\n | OpenURLLink\n | SendEmailLink\n | CallPhoneLink\n | ScrollToElementLink\n\nexport const LinkControlType = 'makeswift::controls::link'\n\ntype LinkControlConfig = {\n label?: string\n}\n\nexport type LinkControlDefinition<C extends LinkControlConfig = LinkControlConfig> = {\n type: typeof LinkControlType\n config: C\n}\n\nexport function Link<C extends LinkControlConfig>(config: C = {} as C): LinkControlDefinition<C> {\n return { type: LinkControlType, config }\n}\n\nexport function copyLinkData(\n value: LinkControlData | undefined,\n context: CopyContext,\n): LinkControlData | undefined {\n if (value == null) return value\n\n if (value.type === 'OPEN_PAGE') {\n const pageId = value.payload.pageId\n\n if (pageId != null) {\n return {\n ...value,\n payload: {\n ...value.payload,\n pageId: context.replacementContext.pageIds.get(pageId) ?? pageId,\n },\n }\n }\n }\n\n return value\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('link', () => {\n test('page id is replaced by one in replacement context', () => {\n // Arrange\n const data: LinkControlData = {\n type: 'OPEN_PAGE',\n payload: {\n pageId: 'UGFnZTpmNTdmMjQ2MS0wMGY3LTQzZWUtYmIwOS03ODdiNTUyYzUyYWQ=',\n openInNewTab: false,\n },\n }\n const expected = JSON.parse(\n JSON.stringify(data).replace(\n 'UGFnZTpmNTdmMjQ2MS0wMGY3LTQzZWUtYmIwOS03ODdiNTUyYzUyYWQ=',\n 'testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n pageIds: new Map([['UGFnZTpmNTdmMjQ2MS0wMGY3LTQzZWUtYmIwOS03ODdiNTUyYzUyYWQ=', 'testing']]),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n fileIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copyLinkData(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { Editor, Transforms } from 'slate'\nimport { Descriptor, RichTextDescriptor, TableFormFieldsDescriptor, Types } from './descriptors'\nimport { BuilderEditMode } from '../state/modules/builder-edit-mode'\nimport { BoxModel } from '../state/modules/box-models'\nimport {\n ListControl,\n ListControlMessage,\n ListControlType,\n RichTextControl,\n RichTextControlMessage,\n RichTextControlType,\n ShapeControl,\n ShapeControlMessage,\n ShapeControlType,\n richTextDAOToDTO,\n RichTextDTO,\n SlotControl,\n SlotControlMessage,\n SlotControlType,\n StyleControl,\n StyleControlType,\n StyleControlMessage,\n} from '../controls'\nimport { ReactEditor } from 'slate-react'\n\nexport const RichTextPropControllerMessageType = {\n CHANGE_BUILDER_EDIT_MODE: 'CHANGE_BUILDER_EDIT_MODE',\n INITIALIZE_EDITOR: 'INITIALIZE_EDITOR',\n CHANGE_EDITOR_VALUE: 'CHANGE_EDITOR_VALUE',\n FOCUS: 'FOCUS',\n BLUR: 'BLUR',\n UNDO: 'UNDO',\n REDO: 'REDO',\n CHANGE_BOX_MODEL: 'CHANGE_BOX_MODEL',\n} as const\n\ntype ChangeBuilderEditModeRichTextPropControllerMessage = {\n type: typeof RichTextPropControllerMessageType.CHANGE_BUILDER_EDIT_MODE\n editMode: BuilderEditMode\n}\n\ntype InitializeEditorRichTextPropControllerMessage = {\n type: typeof RichTextPropControllerMessageType.INITIALIZE_EDITOR\n value: RichTextDTO\n}\n\ntype ChangeEditorValueRichTextPropControllerMessage = {\n type: typeof RichTextPropControllerMessageType.CHANGE_EDITOR_VALUE\n value: RichTextDTO\n}\n\ntype FocusRichTextPropControllerMessage = { type: typeof RichTextPropControllerMessageType.FOCUS }\n\ntype BlurRichTextPropControllerMessage = { type: typeof RichTextPropControllerMessageType.BLUR }\n\ntype UndoRichTextPropControllerMessage = { type: typeof RichTextPropControllerMessageType.UNDO }\n\ntype RedoRichTextPropControllerMessage = { type: typeof RichTextPropControllerMessageType.REDO }\n\ntype ChangeBoxModelRichTextPropControllerMessage = {\n type: typeof RichTextPropControllerMessageType.CHANGE_BOX_MODEL\n payload: { boxModel: BoxModel | null }\n}\n\nexport type RichTextPropControllerMessage =\n | ChangeBuilderEditModeRichTextPropControllerMessage\n | InitializeEditorRichTextPropControllerMessage\n | ChangeEditorValueRichTextPropControllerMessage\n | FocusRichTextPropControllerMessage\n | BlurRichTextPropControllerMessage\n | UndoRichTextPropControllerMessage\n | RedoRichTextPropControllerMessage\n | ChangeBoxModelRichTextPropControllerMessage\n\nexport type PropControllerMessage =\n | RichTextPropControllerMessage\n | TableFormFieldsMessage\n | SlotControlMessage\n | RichTextControlMessage\n | ListControlMessage\n | ShapeControlMessage\n | StyleControlMessage\n\nexport type Send<T = PropControllerMessage> = (message: T) => void\n\nexport abstract class PropController<T = PropControllerMessage> {\n protected send: Send<T>\n\n constructor(send: Send<T>) {\n this.send = send\n }\n\n abstract recv(message: T): void\n}\n\nclass DefaultPropController extends PropController {\n recv = (_message: PropControllerMessage) => {\n // Do nothing.\n }\n}\n\nclass RichTextPropController extends PropController<RichTextPropControllerMessage> {\n private editor: Editor | null = null\n\n recv = (message: RichTextPropControllerMessage) => {\n if (!this.editor) return\n switch (message.type) {\n case RichTextPropControllerMessageType.CHANGE_BUILDER_EDIT_MODE: {\n switch (message.editMode) {\n case BuilderEditMode.BUILD:\n case BuilderEditMode.INTERACT:\n ReactEditor.deselect(this.editor)\n ReactEditor.blur(this.editor)\n }\n break\n }\n case RichTextPropControllerMessageType.FOCUS: {\n ReactEditor.focus(this.editor)\n Transforms.select(this.editor, {\n anchor: Editor.start(this.editor, []),\n focus: Editor.end(this.editor, []),\n })\n break\n }\n }\n }\n\n setSlateEditor(editor: Editor) {\n this.editor = editor\n\n this.send({\n type: RichTextPropControllerMessageType.INITIALIZE_EDITOR,\n value: richTextDAOToDTO(editor.children, editor.selection),\n })\n\n const _onChange = editor.onChange\n this.editor.onChange = options => {\n _onChange(options)\n\n // if onChange is local then it will include an operation(s)\n // that is the only case in which we want to push updates\n // this prevent infinite loops that can occur when collaborating\n if (options?.operation != null) {\n this.send({\n type: RichTextPropControllerMessageType.CHANGE_EDITOR_VALUE,\n value: richTextDAOToDTO(editor.children, editor.selection),\n })\n }\n }\n }\n\n focus() {\n this.send({ type: RichTextPropControllerMessageType.FOCUS })\n }\n\n blur() {\n this.send({ type: RichTextPropControllerMessageType.BLUR })\n }\n\n undo() {\n this.send({ type: RichTextPropControllerMessageType.UNDO })\n }\n\n redo() {\n this.send({ type: RichTextPropControllerMessageType.REDO })\n }\n\n changeBoxModel(boxModel: BoxModel | null): void {\n this.send({ type: RichTextPropControllerMessageType.CHANGE_BOX_MODEL, payload: { boxModel } })\n }\n}\n\nexport const TableFormFieldsMessageType = {\n TABLE_FORM_LAYOUT_CHANGE: 'TABLE_FORM_LAYOUT_CHANGE',\n TABLE_FORM_FIELD_LAYOUT_CHANGE: 'TABLE_FORM_FIELD_LAYOUT_CHANGE',\n} as const\n\ntype TableLayoutTableFormFieldsMessage = {\n type: typeof TableFormFieldsMessageType.TABLE_FORM_LAYOUT_CHANGE\n payload: { layout: BoxModel }\n}\n\ntype TableFieldLayoutTableFormFieldsMessage = {\n type: typeof TableFormFieldsMessageType.TABLE_FORM_FIELD_LAYOUT_CHANGE\n payload: { layout: BoxModel; index: number }\n}\n\nexport type TableFormFieldsMessage =\n | TableLayoutTableFormFieldsMessage\n | TableFieldLayoutTableFormFieldsMessage\n\nexport class TableFormFieldsPropController extends PropController<TableFormFieldsMessage> {\n recv = () => {}\n\n tableFormLayoutChange(payload: { layout: BoxModel }) {\n this.send({ type: TableFormFieldsMessageType.TABLE_FORM_LAYOUT_CHANGE, payload })\n }\n\n tableFormFieldLayoutChange(payload: { layout: BoxModel; index: number }) {\n this.send({ type: TableFormFieldsMessageType.TABLE_FORM_FIELD_LAYOUT_CHANGE, payload })\n }\n}\n\ntype DescriptorPropController<T extends Descriptor> = T extends { type: typeof Types.RichText }\n ? RichTextPropController\n : T extends { type: typeof RichTextControlType }\n ? RichTextControl\n : T extends { type: typeof Types.TableFormFields }\n ? TableFormFieldsPropController\n : DefaultPropController\n\nexport type DescriptorsPropControllers<T extends Record<string, Descriptor>> = {\n [K in keyof T]: undefined extends T[K]\n ? DescriptorPropController<Exclude<T[K], undefined>>\n : DescriptorPropController<T[K]>\n}\n\nexport type AnyPropController =\n | DefaultPropController\n | RichTextPropController\n | TableFormFieldsPropController\n | SlotControl\n | RichTextControl\n | ListControl\n | ShapeControl\n | StyleControl\n\nexport function createPropController(\n descriptor: RichTextDescriptor,\n send: Send<RichTextPropControllerMessage>,\n): RichTextPropController\nexport function createPropController(\n descriptor: TableFormFieldsDescriptor,\n send: Send<TableFormFieldsMessage>,\n): TableFormFieldsPropController\nexport function createPropController(descriptor: Descriptor, send: Send): DefaultPropController\nexport function createPropController<T extends PropControllerMessage>(\n descriptor: Descriptor,\n send: Send<T>,\n): AnyPropController {\n switch (descriptor.type) {\n case Types.RichText:\n return new RichTextPropController(send as Send<RichTextPropControllerMessage>)\n\n case Types.TableFormFields:\n return new TableFormFieldsPropController(send as Send<TableFormFieldsMessage>)\n\n case SlotControlType:\n return new SlotControl(send as Send<SlotControlMessage>)\n\n case RichTextControlType:\n return new RichTextControl(send as Send<RichTextControlMessage>)\n\n case ListControlType:\n return new ListControl(send as Send<ListControlMessage>, descriptor)\n\n case ShapeControlType:\n return new ShapeControl(send as Send<ShapeControlMessage>, descriptor)\n\n case StyleControlType:\n return new StyleControl(send as Send<StyleControlMessage>)\n\n default:\n return new DefaultPropController(send as Send)\n }\n}\n","import {\n AnyPropController,\n createPropController,\n PropController,\n PropControllerMessage,\n Send,\n} from '../prop-controllers/instances'\nimport { CopyContext } from '../state/react-page'\nimport { ControlDefinition, ControlDefinitionData } from './control'\n\nimport { copy as controlCopy } from './control'\n\nexport const ListControlType = 'makeswift::controls::list'\n\ntype ListControlConfig<T extends ControlDefinition = ControlDefinition> = {\n type: T\n label?: string\n /**\n * @todos\n * - Make `item` the control's transformed \"value\" instead of \"data.\"\n */\n getItemLabel?(item: ControlDefinitionData<T> | undefined): string\n}\n\nexport type ListControlDefinition<C extends ListControlConfig = ListControlConfig> = {\n type: typeof ListControlType\n config: C\n}\n\nexport function List<T extends ControlDefinition, C extends ListControlConfig<T>>(\n config: C & { type: T },\n): ListControlDefinition<C> {\n return { type: ListControlType, config }\n}\n\nexport type ListControlItemData<T extends ListControlDefinition> = {\n id: string\n type: T['config']['type']['type']\n value: ControlDefinitionData<T['config']['type']>\n}\n\nexport const ListControlMessageType = {\n LIST_CONTROL_ITEM_CONTROL_MESSAGE: 'makeswift::controls::list::message::item-control-message',\n} as const\n\ntype ListControlItemControlMessage = {\n type: typeof ListControlMessageType.LIST_CONTROL_ITEM_CONTROL_MESSAGE\n payload: { message: PropControllerMessage; itemId: string }\n}\n\nexport type ListControlMessage = ListControlItemControlMessage\n\nexport class ListControl<\n T extends ListControlDefinition = ListControlDefinition,\n> extends PropController<ListControlMessage> {\n controls: Map<string, AnyPropController>\n descriptor: ListControlDefinition\n send: Send<ListControlMessage>\n\n constructor(send: Send<ListControlMessage>, descriptor: T) {\n super(send)\n\n this.descriptor = descriptor\n this.send = send\n\n this.controls = new Map<string, AnyPropController>()\n }\n\n setItemsControl = (value: ListControlData<T> | undefined) => {\n const controls = new Map<string, AnyPropController>()\n\n if (value == null) return\n\n const shouldUpdate = () => {\n // If the length is different, should update\n if (value.length !== this.controls.size) return true\n // If this.controls does not have an itemId, should update\n if (!value.every(({ id }) => this.controls.has(id))) return true\n\n return false\n }\n\n if (!shouldUpdate()) return this.controls\n\n value.forEach(item => {\n const control = createPropController(this.descriptor.config.type, message =>\n this.send({\n type: ListControlMessageType.LIST_CONTROL_ITEM_CONTROL_MESSAGE,\n payload: { message, itemId: item.id },\n }),\n )\n\n controls.set(item.id, control)\n })\n\n this.controls = controls\n\n return this.controls\n }\n\n recv = (message: ListControlMessage) => {\n switch (message.type) {\n case ListControlMessageType.LIST_CONTROL_ITEM_CONTROL_MESSAGE: {\n const control = this.controls.get(message.payload.itemId)\n\n if (control == null) return\n\n // TODO: We're casting the type here as the arg0 type for control.recv is never\n const recv = control.recv as (arg0: PropControllerMessage) => void\n\n recv(message.payload.message)\n }\n }\n }\n}\n\nexport type ListControlData<T extends ListControlDefinition = ListControlDefinition> =\n ListControlItemData<T>[]\n\nexport function copyListData(\n definition: ListControlDefinition,\n value: ListControlData | undefined,\n context: CopyContext,\n): ListControlData | undefined {\n if (value == null) return value\n\n return (\n value &&\n value.map(item => ({\n ...item,\n value: controlCopy(definition.config.type, item.value, context),\n }))\n )\n}\n","import { PropControllerMessage } from '../prop-controllers'\nimport {\n AnyPropController,\n createPropController,\n PropController,\n Send,\n} from '../prop-controllers/instances'\nimport { CopyContext } from '../state/react-page'\nimport { ControlDefinition, ControlDefinitionData } from './control'\n\nimport { copy as controlCopy } from './control'\n\nexport const ShapeControlType = 'makeswift::controls::shape'\n\ntype ShapeControlConfig = {\n type: Record<string, ControlDefinition>\n}\n\nexport type ShapeControlDefinition<C extends ShapeControlConfig = ShapeControlConfig> = {\n type: typeof ShapeControlType\n config: C\n}\n\nexport function Shape<C extends ShapeControlConfig>(config: C): ShapeControlDefinition<C> {\n return { type: ShapeControlType, config }\n}\n\nexport type ShapeControlData<T extends ShapeControlDefinition = ShapeControlDefinition> = {\n [K in keyof T['config']['type']]?: ControlDefinitionData<T['config']['type'][K]>\n}\n\nexport const ShapeControlMessageType = {\n SHAPE_CONTROL_CHILD_CONTROL_MESSAGE: 'makeswift::controls::shape::message::child-control-message',\n} as const\n\ntype ShapeControlChildControlMessage = {\n type: typeof ShapeControlMessageType.SHAPE_CONTROL_CHILD_CONTROL_MESSAGE\n payload: { message: PropControllerMessage; key: string }\n}\n\nexport type ShapeControlMessage = ShapeControlChildControlMessage\n\nexport class ShapeControl<\n T extends ShapeControlDefinition = ShapeControlDefinition,\n> extends PropController<ShapeControlMessage> {\n controls: Map<string, AnyPropController>\n descriptor: ShapeControlDefinition\n send: Send<ShapeControlMessage>\n\n constructor(send: Send<ShapeControlMessage>, descriptor: T) {\n super(send)\n\n this.descriptor = descriptor\n this.send = send\n\n this.controls = new Map<string, AnyPropController>()\n this.setControls()\n }\n\n setControls = () => {\n const controls = new Map<string, AnyPropController>()\n const children = this.descriptor.config.type\n\n Object.keys(children).forEach(key => {\n const control = createPropController(children[key], message =>\n this.send({\n type: ShapeControlMessageType.SHAPE_CONTROL_CHILD_CONTROL_MESSAGE,\n payload: { message, key },\n }),\n )\n\n controls.set(key, control)\n })\n\n this.controls = controls\n\n return this.controls\n }\n\n recv = (message: ShapeControlMessage) => {\n switch (message.type) {\n case ShapeControlMessageType.SHAPE_CONTROL_CHILD_CONTROL_MESSAGE: {\n const control = this.controls.get(message.payload.key)\n\n if (control == null) return\n\n // TODO: We're casting the type here as the arg0 type for control.recv is never\n const recv = control.recv as (arg0: PropControllerMessage) => void\n\n recv(message.payload.message)\n }\n }\n }\n}\n\nexport function copyShapeData(\n definition: ShapeControlDefinition,\n value: ShapeControlData | undefined,\n context: CopyContext,\n): ShapeControlData | undefined {\n if (value == null) return value\n\n const newValue: ShapeControlData = {}\n\n for (const [key, itemDefinition] of Object.entries(definition.config.type)) {\n const prop = value[key]\n\n newValue[key] = controlCopy(itemDefinition, prop, context)\n }\n\n return newValue\n}\n","import { BorderRadiusPropertyData } from '../css/border-radius'\nimport type { LengthPercentageData } from '../css/length-percentage'\nimport { MarginPropertyData } from '../css/margin'\nimport { PaddingPropertyData } from '../css/padding'\nimport { ColorData, ResponsiveValue } from './types'\nimport { CopyContext, ReplacementContext } from '../state/react-page'\nimport { copyColorData } from './color'\nimport { PropController, Send } from '../prop-controllers/instances'\nimport { BoxModel } from '../state/modules/box-models'\n\n/** @see https://developer.mozilla.org/en-US/docs/Web/CSS/width */\nexport type WidthPropertyData = LengthPercentageData\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-style\n */\ntype BorderStyle = 'dotted' | 'dashed' | 'solid'\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-top#constituent_properties\n *\n * @todos\n * - Change `width` to be a `Length`\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderSideShorthandPropertyData = {\n width: number | null | undefined\n style: BorderStyle\n color?: ColorData | null\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border\n *\n * @todos\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderPropertyData = {\n borderTop: BorderSideShorthandPropertyData | null | undefined\n borderRight: BorderSideShorthandPropertyData | null | undefined\n borderBottom: BorderSideShorthandPropertyData | null | undefined\n borderLeft: BorderSideShorthandPropertyData | null | undefined\n}\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-family\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontFamilyPropertyData = string | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type LetterSpacingPropertyData = number | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-size\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontSizePropertyData =\n | {\n value: number\n unit: 'px'\n }\n | null\n | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontWeightPropertyData = number | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform\n *\n * @todos\n * - Match the type with specification\n */\nexport type TextTransformPropertyData = 'uppercase'[]\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style\n *\n * @todos\n * - Match the type with specification\n */\nexport type FontStylePropertyData = 'italic'[]\n\n/**\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type TextStylePropertyData = {\n fontFamily?: FontFamilyPropertyData | null | undefined\n letterSpacing: LetterSpacingPropertyData | null | undefined\n fontSize: FontSizePropertyData | null | undefined\n fontWeight: FontWeightPropertyData | null | undefined\n textTransform: TextTransformPropertyData\n fontStyle: FontStylePropertyData\n}\n\n/**\n * Primitives like `string` and `number` are excluded from the style data because the relevant\n * panels from the Makeswift builder were originally implemented only to support object values, and\n * not CSS strings. For example, 100 pixels would be `{ value: 100, unit: 'px' }` but never `100` or\n * `'100px'`.\n */\nexport type StyleControlData = {\n width?: ResponsiveValue<Exclude<WidthPropertyData, string | number>>\n margin?: ResponsiveValue<{\n [K in keyof MarginPropertyData]: Exclude<MarginPropertyData[K], string | number> | 'auto'\n }>\n padding?: ResponsiveValue<{\n [K in keyof PaddingPropertyData]: Exclude<PaddingPropertyData[K], string | number>\n }>\n border?: ResponsiveValue<BorderPropertyData>\n borderRadius?: ResponsiveValue<{\n [K in keyof BorderRadiusPropertyData]: Exclude<BorderRadiusPropertyData[K], string | number>\n }>\n textStyle?: ResponsiveValue<TextStylePropertyData>\n}\n\nexport const StyleControlType = 'makeswift::controls::style'\n\nexport const StyleControlProperty = {\n Width: 'makeswift::controls::style::property::width',\n Margin: 'makeswift::controls::style::property::margin',\n Padding: 'makeswift::controls::style::property::padding',\n Border: 'makeswift::controls::style::property::border',\n BorderRadius: 'makeswift::controls::style::property::border-radius',\n TextStyle: 'makeswift::controls::style::property::text-style',\n} as const\n\nexport type StyleControlProperty = typeof StyleControlProperty[keyof typeof StyleControlProperty]\n\ntype StyleControlParams = { properties?: StyleControlProperty[] }\n\nexport type StyleControlConfig = { properties: StyleControlProperty[] }\n\nconst StyleControlDefaultProperties: StyleControlProperty[] = [\n StyleControlProperty.Width,\n StyleControlProperty.Margin,\n]\n\nconst AllStyleControlProperties: StyleControlProperty[] = [\n StyleControlProperty.Width,\n StyleControlProperty.Margin,\n StyleControlProperty.Padding,\n StyleControlProperty.Border,\n StyleControlProperty.BorderRadius,\n StyleControlProperty.TextStyle,\n]\n\nexport type StyleControlDefinition = {\n type: typeof StyleControlType\n config: StyleControlConfig\n}\n\n/**\n * @todos\n * - Add support for custom panel labels.\n * - Add support for default values. Internally, default values must be represented with the same\n * format as the underlying data so that controls can show these values.\n */\nexport function Style(params?: StyleControlParams): StyleControlDefinition {\n return {\n type: StyleControlType,\n config: { properties: params?.properties ?? StyleControlDefaultProperties },\n }\n}\n\nStyle.Default = StyleControlDefaultProperties\nStyle.All = AllStyleControlProperties\n\nStyle.Width = StyleControlProperty.Width\nStyle.Margin = StyleControlProperty.Margin\nStyle.Padding = StyleControlProperty.Padding\nStyle.Border = StyleControlProperty.Border\nStyle.BorderRadius = StyleControlProperty.BorderRadius\nStyle.TextStyle = StyleControlProperty.TextStyle\n\nexport const StyleControlMessageType = {\n CHANGE_BOX_MODEL: 'makeswift::controls::style::message::change-box-model',\n} as const\n\ntype StyleControlItemBoxModelChangeMessage = {\n type: typeof StyleControlMessageType.CHANGE_BOX_MODEL\n payload: { boxModel: BoxModel | null }\n}\n\nexport type StyleControlMessage = StyleControlItemBoxModelChangeMessage\n\nexport class StyleControl extends PropController<StyleControlMessage> {\n constructor(send: Send<StyleControlMessage>) {\n super(send)\n }\n\n changeBoxModel(boxModel: BoxModel | null): void {\n this.send({ type: StyleControlMessageType.CHANGE_BOX_MODEL, payload: { boxModel } })\n }\n\n recv() {}\n}\n\nexport function copyStyleData(\n value: StyleControlData | undefined,\n context: CopyContext,\n): StyleControlData | undefined {\n if (value == null) return value\n\n function copyResponsiveBorder(\n responsiveBorder: ResponsiveValue<BorderPropertyData> | undefined,\n ): ResponsiveValue<BorderPropertyData> | undefined {\n if (responsiveBorder == null) return undefined\n return responsiveBorder.map(deviceBorder => ({\n ...deviceBorder,\n value: copyBorder(deviceBorder.value),\n }))\n }\n\n function copyBorder(border: BorderPropertyData): BorderPropertyData {\n function copyBorderSide(side: BorderSideShorthandPropertyData | null | undefined) {\n if (side == null) return null\n\n if (side.color == null) return side\n\n return {\n ...side,\n color: copyColorData(side.color, context),\n }\n }\n\n return {\n borderTop: copyBorderSide(border.borderTop),\n borderBottom: copyBorderSide(border.borderBottom),\n borderRight: copyBorderSide(border.borderRight),\n borderLeft: copyBorderSide(border.borderLeft),\n }\n }\n\n return { ...value, border: copyResponsiveBorder(value.border) }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('style copy', () => {\n test('colors are replaced', () => {\n // Arrange\n const value: StyleControlData = {\n width: [\n {\n value: {\n unit: 'px',\n value: 100,\n },\n deviceId: 'desktop',\n },\n ],\n border: [\n {\n value: {\n borderTop: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJjMDkwZWJjLTZkZDUtNDY1NS1hMDY0LTg3ZDAxM2U4YTFhNA==',\n },\n style: 'solid',\n width: 9,\n },\n borderLeft: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJjMDkwZWJjLTZkZDUtNDY1NS1hMDY0LTg3ZDAxM2U4YTFhNA==',\n },\n style: 'solid',\n width: 9,\n },\n borderRight: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJjMDkwZWJjLTZkZDUtNDY1NS1hMDY0LTg3ZDAxM2U4YTFhNA==',\n },\n style: 'solid',\n width: 9,\n },\n borderBottom: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJjMDkwZWJjLTZkZDUtNDY1NS1hMDY0LTg3ZDAxM2U4YTFhNA==',\n },\n style: 'solid',\n width: 9,\n },\n },\n deviceId: 'desktop',\n },\n ],\n textStyle: [\n {\n value: {\n fontSize: {\n unit: 'px',\n value: 46,\n },\n fontStyle: [],\n fontFamily: 'Oswald',\n fontWeight: 400,\n letterSpacing: 5.2,\n textTransform: [],\n },\n deviceId: 'desktop',\n },\n ],\n borderRadius: [\n {\n value: {\n borderTopLeftRadius: {\n unit: 'px',\n value: 4,\n },\n borderTopRightRadius: {\n unit: 'px',\n value: 4,\n },\n borderBottomLeftRadius: {\n unit: 'px',\n value: 4,\n },\n borderBottomRightRadius: {\n unit: 'px',\n value: 4,\n },\n },\n deviceId: 'desktop',\n },\n ],\n }\n const expected = JSON.parse(\n JSON.stringify(value).replaceAll(\n 'U3dhdGNoOmJjMDkwZWJjLTZkZDUtNDY1NS1hMDY0LTg3ZDAxM2U4YTFhNA==',\n 'testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map([\n ['U3dhdGNoOmJjMDkwZWJjLTZkZDUtNDY1NS1hMDY0LTg3ZDAxM2U4YTFhNA==', 'testing'],\n ]),\n fileIds: new Map(),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copyStyleData(value, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { PropController } from '../prop-controllers/instances'\nimport { BoxModel } from '../state/modules/box-models'\nimport { CopyContext, Element } from '../state/react-page'\nimport { ResponsiveValue } from './types'\n\ntype SlotControlColumnData = { count: number; spans: number[][] }\n\nexport type SlotControlData = {\n elements: Element[]\n columns: ResponsiveValue<SlotControlColumnData>\n}\n\nexport const SlotControlType = 'makeswift::controls::slot'\n\nexport type SlotControlDefinition = {\n type: typeof SlotControlType\n}\n\nexport function Slot(): SlotControlDefinition {\n return { type: SlotControlType }\n}\n\nexport const SlotControlMessageType = {\n CONTAINER_BOX_MODEL_CHANGE: 'makeswift::controls::slot::message::container-box-model-change',\n ITEM_BOX_MODEL_CHANGE: 'makeswift::controls::slot::message::item-box-model-change',\n} as const\n\ntype SlotControlContainerBoxModelChangeMessage = {\n type: typeof SlotControlMessageType.CONTAINER_BOX_MODEL_CHANGE\n payload: { boxModel: BoxModel | null }\n}\n\ntype SlotControlItemBoxModelChangeMessage = {\n type: typeof SlotControlMessageType.ITEM_BOX_MODEL_CHANGE\n payload: { index: number; boxModel: BoxModel | null }\n}\n\nexport type SlotControlMessage =\n | SlotControlContainerBoxModelChangeMessage\n | SlotControlItemBoxModelChangeMessage\n\nexport class SlotControl extends PropController<SlotControlMessage> {\n recv = () => {}\n\n changeContainerBoxModel(boxModel: BoxModel | null): void {\n this.send({ type: SlotControlMessageType.CONTAINER_BOX_MODEL_CHANGE, payload: { boxModel } })\n }\n\n changeItemBoxModel(index: number, boxModel: BoxModel | null): void {\n this.send({ type: SlotControlMessageType.ITEM_BOX_MODEL_CHANGE, payload: { index, boxModel } })\n }\n}\n\nexport function copySlotData(\n value: SlotControlData | undefined,\n context: CopyContext,\n): SlotControlData | undefined {\n if (value == null) return value\n\n return {\n ...value,\n elements: value.elements.map(element => context.copyElement(element)),\n }\n}\n","import { CopyContext } from '../../state/react-page'\nimport { BackgroundsValue } from '../descriptors'\n\nexport function copy(\n value: BackgroundsValue | undefined,\n context: CopyContext,\n): BackgroundsValue | undefined {\n if (value == null) return value\n\n return value.map(override => ({\n ...override,\n value: override.value.map(backgroundItem => {\n switch (backgroundItem.type) {\n case 'color':\n return {\n ...backgroundItem,\n payload:\n backgroundItem.payload === null\n ? null\n : {\n ...backgroundItem.payload,\n swatchId:\n context.replacementContext.swatchIds.get(backgroundItem.payload.swatchId) ??\n backgroundItem.payload.swatchId,\n },\n }\n\n case 'gradient':\n return {\n ...backgroundItem,\n payload: {\n ...backgroundItem.payload,\n stops: backgroundItem.payload.stops.map(stop => ({\n ...stop,\n color:\n stop.color == null\n ? null\n : {\n ...stop.color,\n swatchId:\n context.replacementContext.swatchIds.get(stop.color.swatchId) ??\n stop.color.swatchId,\n },\n })),\n },\n }\n\n case 'image':\n return {\n ...backgroundItem,\n payload: {\n ...backgroundItem.payload,\n imageId:\n context.replacementContext.fileIds.get(backgroundItem.payload.imageId) ??\n backgroundItem.payload.imageId,\n },\n }\n\n default:\n return backgroundItem\n }\n }),\n }))\n}\n","import { CopyContext, Data } from '../../state/react-page'\nimport { GridValue } from '../descriptors'\n\nexport function copy(value: GridValue | undefined, context: CopyContext): Data | undefined {\n if (value == null) return undefined\n\n return {\n ...value,\n elements: value.elements.map(element => context.copyElement(element)),\n }\n}\n","import { CopyContext } from '../../state/react-page'\nimport { LinkValue } from '../descriptors'\n\nexport function copy(value: LinkValue | undefined, context: CopyContext): LinkValue | undefined {\n if (value == null) return value\n\n switch (value.type) {\n case 'OPEN_PAGE': {\n const pageId = value.payload.pageId\n\n if (pageId == null) return value\n\n return {\n ...value,\n payload: {\n ...value.payload,\n pageId: context.replacementContext.pageIds.get(pageId) ?? pageId,\n },\n }\n }\n\n case 'SCROLL_TO_ELEMENT': {\n const elementIdConfig = value.payload.elementIdConfig\n\n if (elementIdConfig == null) return value\n\n return {\n ...value,\n payload: {\n ...value.payload,\n elementIdConfig: {\n ...elementIdConfig,\n elementKey:\n context.replacementContext.elementKeys.get(elementIdConfig.elementKey) ??\n elementIdConfig.elementKey,\n },\n },\n }\n }\n\n default:\n return value\n }\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { copy as linkCopy } from './link'\nimport { NavigationLinksValue } from '../descriptors'\n\nexport function copy(\n value: NavigationLinksValue | undefined,\n context: CopyContext,\n): NavigationLinksValue | undefined {\n if (value == null) return value\n\n return value.map(copyNavigationLinksPanelItem)\n\n function copyNavigationLinksPanelItem(item: any): any {\n switch (item.type) {\n case 'button':\n case 'dropdown': {\n const { color, link } = item.payload\n\n return {\n ...item,\n payload: {\n ...item.payload,\n link: link != null ? linkCopy(link, context) : undefined,\n color:\n color != null\n ? color.map((override: { value: { swatchId: string } }) => ({\n ...override,\n value: {\n ...override.value,\n swatchId:\n context.replacementContext.swatchIds.get(override.value.swatchId) ??\n override.value.swatchId,\n },\n }))\n : undefined,\n },\n }\n }\n\n default:\n return item\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('navigation-links copy', () => {\n test('replace page id from replacement context', () => {\n // Arrange\n const data: NavigationLinksValue = [\n {\n id: 'e1cf2d04-012a-4481-832a-7b4dda62195e',\n type: 'button',\n payload: {\n link: {\n type: 'OPEN_PAGE',\n payload: {\n pageId: 'UGFnZTo2OGMzODZhNC1jYzRkLTQzMzUtYWZiMi05MDdhZGRkYzQ3YTM=',\n openInNewTab: true,\n },\n },\n label: 'Fellow Page',\n },\n },\n ]\n const expected = JSON.parse(\n JSON.stringify(data).replace(\n 'UGFnZTo2OGMzODZhNC1jYzRkLTQzMzUtYWZiMi05MDdhZGRkYzQ3YTM=',\n 'testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n fileIds: new Map(),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map([['UGFnZTo2OGMzODZhNC1jYzRkLTQzMzUtYWZiMi05MDdhZGRkYzQ3YTM=', 'testing']]),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { ShadowsValue } from '../descriptors'\n\nexport function copy(\n value: ShadowsValue | undefined,\n context: CopyContext,\n): ShadowsValue | undefined {\n if (value == null) return value\n\n return value.map(override => ({ ...override, value: override.value.map(copyShadowItem) }))\n\n function copyShadowItem(item: any): any {\n const { color } = item.payload\n\n if (color == null) return item\n\n return {\n ...item,\n payload: {\n ...item.payload,\n color: {\n ...color,\n swatchId: context.replacementContext.swatchIds.get(color.swatchId) ?? color.swatchId,\n },\n },\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('shadow copy', () => {\n test('replaces the swatch id', () => {\n // Arrange\n const data: ShadowsValue = [\n {\n value: [\n {\n id: '8575efe6-4d04-4361-b593-e559537c4c3c',\n payload: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n },\n offsetX: -5,\n offsetY: 8.7,\n blurRadius: 17,\n spreadRadius: 16,\n },\n },\n ],\n deviceId: 'desktop',\n },\n ]\n const expected = JSON.parse(\n JSON.stringify(data).replace(\n 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n 'testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map([\n ['U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==', 'testing'],\n ]),\n fileIds: new Map(),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { ImageValue } from '../descriptors'\n\nexport function copy(value: ImageValue | undefined, context: CopyContext): ImageValue | undefined {\n if (value == null) return value\n\n return context.replacementContext.fileIds.get(value) ?? value\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('image copy', () => {\n test('image is replaced by a one in replacement context', () => {\n // Arrange\n const data: ImageValue = 'file-id'\n const expected = JSON.parse(JSON.stringify(data).replace('file-id', 'testing'))\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n fileIds: new Map([['file-id', 'testing']]),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { ImagesValue } from '../descriptors'\n\nexport function copy(\n value: ImagesValue | undefined,\n context: CopyContext,\n): ImagesValue | undefined {\n if (value == null) return value\n\n return value.map(copyImagesPanelItem)\n\n function copyImagesPanelItem(imagesPanelItem: any): any {\n const { file } = imagesPanelItem.props\n\n if (file == null) return imagesPanelItem\n\n return {\n ...imagesPanelItem,\n props: {\n ...imagesPanelItem.props,\n file: context.replacementContext.fileIds.get(file) ?? file,\n },\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('images copy', () => {\n test('images are replaced by ones in replacement context', () => {\n // Arrange\n const data: ImagesValue = [\n {\n key: '0ae80f8f-9d4a-43bc-ae7c-007164a19d22',\n props: {\n file: 'RmlsZTo5ZmU3ZGUzMi1jY2E0LTRkMjktOWVlMC1jNTI2NDYxY2I1YjM=',\n },\n },\n {\n key: '161674c3-8710-4fd6-90e6-6096c4e9bb88',\n props: {\n file: 'RmlsZTo5ZmU3ZGUzMi1jY2E0LTRkMjktOWVlMC1jNTI2NDYxY2I1YjM=',\n },\n },\n ]\n const expected = JSON.parse(\n JSON.stringify(data).replaceAll(\n 'RmlsZTo5ZmU3ZGUzMi1jY2E0LTRkMjktOWVlMC1jNTI2NDYxY2I1YjM=',\n 'testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n fileIds: new Map([['RmlsZTo5ZmU3ZGUzMi1jY2E0LTRkMjktOWVlMC1jNTI2NDYxY2I1YjM=', 'testing']]),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext } from '../../state/react-page'\nimport { ResponsiveColorValue } from '../descriptors'\n\nexport function copy(\n value: ResponsiveColorValue | undefined,\n context: CopyContext,\n): ResponsiveColorValue | undefined {\n if (value == null) return value\n\n return value.map(override => ({ ...override, value: copyColorValue(override.value) }))\n\n function copyColorValue(colorValue: any): any {\n return {\n ...colorValue,\n swatchId:\n context.replacementContext.swatchIds.get(colorValue.swatchId) ?? colorValue.swatchId,\n }\n }\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { TableFormFieldsValue } from '../descriptors'\n\nexport function copy(\n value: TableFormFieldsValue | undefined,\n context: CopyContext,\n): TableFormFieldsValue | undefined {\n if (value == null) return value\n\n return { ...value, fields: value.fields.map(copyFormFieldsPanelItem) }\n\n function copyFormFieldsPanelItem(item: any): any {\n return {\n ...item,\n tableColumnId:\n context.replacementContext.tableColumnIds.get(item.tableColumnId) ?? item.tableColumnId,\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('table form fields copy', () => {\n test('replaces the table column id', () => {\n // Arrange\n const data: TableFormFieldsValue = {\n grid: [\n {\n value: {\n count: 12,\n spans: [[12], [12]],\n },\n deviceId: 'desktop',\n },\n ],\n fields: [\n {\n id: '8c4b3dcb-d9d2-4199-9a66-c35aa39248f0',\n label: 'hello',\n required: true,\n tableColumnId:\n 'U2luZ2xlTGluZVRleHRUYWJsZUNvbHVtbjphMzQ0Yzk3ZC04MTQ0LTRmMzctYjU2My1hODE5OTQ5OGMyYWI=',\n },\n ],\n }\n const expected = JSON.parse(\n JSON.stringify(data).replace(\n 'U2luZ2xlTGluZVRleHRUYWJsZUNvbHVtbjphMzQ0Yzk3ZC04MTQ0LTRmMzctYjU2My1hODE5OTQ5OGMyYWI=',\n 'testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n fileIds: new Map(),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map([\n [\n 'U2luZ2xlTGluZVRleHRUYWJsZUNvbHVtbjphMzQ0Yzk3ZC04MTQ0LTRmMzctYjU2My1hODE5OTQ5OGMyYWI=',\n 'testing',\n ],\n ]),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { TableValue } from '../descriptors'\n\nexport function copy(value: TableValue | undefined, context: CopyContext): TableValue | undefined {\n if (value == null) return value\n\n return context.replacementContext.tableIds.get(value) ?? value\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('table copy', () => {\n test('replaces the table id', () => {\n // Arrange\n const data: TableValue = 'VGFibGU6MTM5NDhlYzMtMjgwNS00Nzk0LTliNzctNDJkN2RhNmQxZWEy'\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n fileIds: new Map(),\n typographyIds: new Map(),\n tableIds: new Map([\n ['VGFibGU6MTM5NDhlYzMtMjgwNS00Nzk0LTliNzctNDJkN2RhNmQxZWEy', 'testing'],\n ]),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatch('testing')\n })\n })\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { BorderValue } from '../descriptors'\n\nexport function copy(\n value: BorderValue | undefined,\n context: CopyContext,\n): BorderValue | undefined {\n if (value == null) return value\n\n return value.map(override => ({ ...override, value: copyBorderValue(override.value) }))\n\n function copyBorderValue({ borderTop, borderRight, borderBottom, borderLeft }: any): any {\n return {\n borderTop: borderTop && copyBorderSide(borderTop),\n borderRight: borderRight && copyBorderSide(borderRight),\n borderBottom: borderBottom && copyBorderSide(borderBottom),\n borderLeft: borderLeft && copyBorderSide(borderLeft),\n }\n }\n\n function copyBorderSide(borderSide: any): any {\n const { color } = borderSide\n\n if (color == null) return borderSide\n\n return {\n ...borderSide,\n color: {\n ...color,\n swatchId: context.replacementContext.swatchIds.get(color.swatchId) ?? color.swatchId,\n },\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n describe.concurrent('border copy', () => {\n test('replaces the swatch id', () => {\n // Arrange\n const data: BorderValue = [\n {\n value: {\n borderTop: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n },\n style: 'solid',\n width: 5,\n },\n borderLeft: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n },\n style: 'solid',\n width: 5,\n },\n borderRight: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n },\n style: 'solid',\n width: 5,\n },\n borderBottom: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n },\n style: 'solid',\n width: 5,\n },\n },\n deviceId: 'desktop',\n },\n ]\n const expected: BorderValue = [\n {\n value: {\n borderTop: {\n color: {\n alpha: 1,\n swatchId: 'testing',\n },\n style: 'solid',\n width: 5,\n },\n borderLeft: {\n color: {\n alpha: 1,\n swatchId: 'testing',\n },\n style: 'solid',\n width: 5,\n },\n borderRight: {\n color: {\n alpha: 1,\n swatchId: 'testing',\n },\n style: 'solid',\n width: 5,\n },\n borderBottom: {\n color: {\n alpha: 1,\n swatchId: 'testing',\n },\n style: 'solid',\n width: 5,\n },\n },\n deviceId: 'desktop',\n },\n ]\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map([\n ['U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==', 'testing'],\n ]),\n fileIds: new Map(),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { NodeJSON, InlineJSON, MarkJSON } from '../../controls'\nimport { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { RichTextValue } from '../descriptors'\n\nexport function copy(\n value: RichTextValue | undefined,\n context: CopyContext,\n): RichTextValue | undefined {\n if (value == null) return value\n\n return { ...value, document: value.document ? copyNode(value.document) : value.document }\n\n function copyNode<T extends NodeJSON>(node: T): T {\n switch (node.object) {\n case 'document':\n case 'block':\n case 'inline':\n // @ts-expect-error: TypeScript can't refine the generic type T, even though it can\n // refine NodeJSON.\n return copyInline(node)\n\n case 'text':\n return { ...node, marks: node.marks?.map(copyMark) }\n\n default:\n return node\n }\n }\n\n function copyInline(inline: InlineJSON): InlineJSON {\n switch (inline.type) {\n case 'link':\n return {\n ...inline,\n nodes: inline.nodes?.map(copyNode),\n data: inline.data ? copyLinkData(inline.data as any) : inline.data,\n }\n\n default:\n return { ...inline, nodes: inline.nodes?.map(copyNode) }\n }\n }\n\n function copyLinkData(data: any): any {\n switch (data.type) {\n case 'OPEN_PAGE': {\n const pageId = data.payload.pageId\n\n if (pageId == null) return data\n\n return {\n ...data,\n payload: {\n ...data.payload,\n pageId: context.replacementContext.pageIds.get(pageId) ?? data.payload.pageId,\n },\n }\n }\n\n case 'SCROLL_TO_ELEMENT': {\n const elementIdConfig = data.payload.elementIdConfig\n\n if (elementIdConfig == null) return data\n\n return {\n ...data,\n payload: {\n ...data.payload,\n elementIdConfig: {\n ...elementIdConfig,\n elementKey:\n context.replacementContext.elementKeys.get(elementIdConfig.elementKey) ??\n elementIdConfig.elementKey,\n },\n },\n }\n }\n\n default:\n return data\n }\n }\n\n function copyMark(mark: MarkJSON): MarkJSON {\n switch (mark.type) {\n case 'typography': {\n const typographyId = mark.data?.value.id\n\n return {\n ...mark,\n data: {\n ...mark.data,\n value: {\n ...mark.data?.value,\n id: context.replacementContext.typographyIds.get(typographyId) ?? typographyId,\n style: mark.data?.value.style.map((override: any) => ({\n ...override,\n value: {\n ...override.value,\n color:\n override.value.color == null\n ? override.value.color\n : {\n ...override.value.color,\n swatchId:\n context.replacementContext.swatchIds.get(\n override.value.color?.swatchId,\n ) ?? override.value.color?.swatchId,\n },\n },\n })),\n },\n },\n }\n }\n\n default:\n return mark\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('rich text copy', () => {\n test('replaces the swatch id', () => {\n // Arrange\n const data: RichTextValue = {\n object: 'value',\n document: {\n data: {},\n nodes: [\n {\n data: {},\n type: 'paragraph',\n nodes: [\n {\n text: 'Hello world',\n marks: [\n {\n data: {\n value: {\n id: 'VHlwb2dyYXBoeTo5ODE1NWY0Ni1mNmQzLTQ1M2YtODk5OC02ZWY5NzJhNTBlY2U=',\n style: [\n {\n value: {\n color: {\n alpha: 1,\n swatchId:\n 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n },\n fontSize: {\n unit: 'px',\n value: 23,\n },\n lineHeight: 2.5,\n strikethrough: true,\n },\n deviceId: 'desktop',\n },\n ],\n },\n },\n type: 'typography',\n object: 'mark',\n },\n ],\n object: 'text',\n },\n ],\n object: 'block',\n },\n ],\n object: 'document',\n },\n selection: {\n focus: {\n path: [0, 0],\n object: 'point',\n offset: 0,\n },\n anchor: {\n path: [0, 0],\n object: 'point',\n offset: 0,\n },\n object: 'selection',\n isFocused: false,\n },\n }\n const expected = JSON.parse(\n JSON.stringify(data)\n .replace('U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==', 'swatch-testing')\n .replace(\n 'VHlwb2dyYXBoeTo5ODE1NWY0Ni1mNmQzLTQ1M2YtODk5OC02ZWY5NzJhNTBlY2U=',\n 'typography-testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map([\n ['U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==', 'swatch-testing'],\n ]),\n fileIds: new Map(),\n typographyIds: new Map([\n [\n 'VHlwb2dyYXBoeTo5ODE1NWY0Ni1mNmQzLTQ1M2YtODk5OC02ZWY5NzJhNTBlY2U=',\n 'typography-testing',\n ],\n ]),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext } from '../../state/react-page'\n\nexport function copy(value: string | undefined, context: CopyContext): string | undefined {\n if (value == null) return value\n\n if (context.replacementContext.elementHtmlIds.has(value)) return undefined\n\n context.replacementContext.elementHtmlIds.add(value)\n\n return value\n}\n","import { Descriptor } from './descriptors'\nimport { copy as backgroundsCopy } from './copy/backgrounds'\nimport { copy as gridCopy } from './copy/grid'\nimport { copy as navigationLinksCopy } from './copy/navigation-links'\nimport { copy as linkCopy } from './copy/link'\nimport { copy as shadowsCopy } from './copy/shadows'\nimport { copy as imageCopy } from './copy/image'\nimport { copy as imagesCopy } from './copy/images'\nimport { copy as responsiveColorCopy } from './copy/responsive-color'\nimport { copy as tableFormFieldsCopy } from './copy/table-form-fields'\nimport { copy as tableCopy } from './copy/table'\nimport { copy as borderCopy } from './copy/border'\nimport { copy as richTextCopy } from './copy/rich-text'\nimport { copy as elementIdCopy } from './copy/element-id'\nimport { CopyContext } from '../state/react-page'\n\n// @note: note typing value, because would then have to type narrow `Data` per case\nexport function copy(descriptor: Descriptor, value: any, context: CopyContext) {\n switch (descriptor.type) {\n case 'Backgrounds':\n return backgroundsCopy(value, context)\n case 'Grid':\n return gridCopy(value, context)\n case 'NavigationLinks':\n return navigationLinksCopy(value, context)\n case 'Link':\n return linkCopy(value, context)\n case 'Shadows':\n return shadowsCopy(value, context)\n case 'Image':\n return imageCopy(value, context)\n case 'Images':\n return imagesCopy(value, context)\n case 'ResponsiveColor':\n return responsiveColorCopy(value, context)\n case 'TableFormFields':\n return tableFormFieldsCopy(value, context)\n case 'Table':\n return tableCopy(value, context)\n case 'Border':\n return borderCopy(value, context)\n case 'RichText':\n return richTextCopy(value, context)\n case 'ElementID':\n return elementIdCopy(value, context)\n default:\n return value\n }\n}\n\nexport function copyElementReference(value: string, context: CopyContext) {\n return context.replacementContext.globalElementIds.get(value) || value\n}\n","import { CheckboxControlData, CheckboxControlDefinition } from './checkbox'\nimport { ColorControlData, ColorControlDefinition, ColorControlType, copyColorData } from './color'\nimport { ComboboxControlData, ComboboxControlDefinition } from './combobox'\nimport { ImageControlData, ImageControlDefinition, copyImageData, ImageControlType } from './image'\nimport { LinkControlData, LinkControlDefinition, copyLinkData, LinkControlType } from './link'\nimport { ListControlData, ListControlDefinition, copyListData, ListControlType } from './list'\nimport { NumberControlData, NumberControlDefinition } from './number'\nimport { SelectControlData, SelectControlDefinition } from './select'\nimport { ShapeControlData, ShapeControlDefinition, copyShapeData, ShapeControlType } from './shape'\nimport { TextAreaControlData, TextAreaControlDefinition } from './text-area'\nimport { TextInputControlData, TextInputControlDefinition } from './text-input'\nimport { copyStyleData, StyleControlData, StyleControlDefinition, StyleControlType } from './style'\nimport { copySlotData, SlotControlDefinition, SlotControlType } from './slot'\n\nimport { Descriptor, IndexSignatureHack, Types } from '../prop-controllers/descriptors'\nimport { copy as propControllerCopy } from '../prop-controllers/copy'\nimport { CopyContext } from '../state/react-page'\nimport { RichTextControlData, RichTextControlDefinition } from './rich-text'\n\nexport type ControlDefinition =\n | CheckboxControlDefinition\n | NumberControlDefinition\n | TextInputControlDefinition\n | TextAreaControlDefinition\n | SelectControlDefinition\n | ColorControlDefinition\n | ImageControlDefinition\n | ComboboxControlDefinition\n | ShapeControlDefinition\n | ListControlDefinition<any>\n | LinkControlDefinition\n | SlotControlDefinition\n | ShapeControlDefinition\n | RichTextControlDefinition\n | StyleControlDefinition\n\nexport type ControlDefinitionData<T extends ControlDefinition> = T extends CheckboxControlDefinition\n ? CheckboxControlData\n : T extends NumberControlDefinition\n ? NumberControlData\n : T extends TextInputControlDefinition\n ? TextInputControlData\n : T extends TextAreaControlDefinition\n ? TextAreaControlData\n : T extends SelectControlDefinition\n ? SelectControlData<T>\n : T extends ColorControlDefinition\n ? ColorControlData\n : T extends ImageControlDefinition\n ? ImageControlData\n : T extends ComboboxControlDefinition\n ? ComboboxControlData<T>\n : T extends ShapeControlDefinition\n ? ShapeControlData<T>\n : T extends ListControlDefinition\n ? ListControlData<T>\n : T extends LinkControlDefinition\n ? LinkControlData\n : T extends RichTextControlDefinition\n ? IndexSignatureHack<RichTextControlData>\n : T extends StyleControlDefinition\n ? StyleControlData\n : never\n\nexport function copy(definition: Descriptor | ControlDefinition, value: any, context: CopyContext) {\n switch (definition.type) {\n case Types.Backgrounds:\n case Types.Grid:\n case Types.NavigationLinks:\n case Types.Link:\n case Types.Shadows:\n case Types.Image:\n case Types.Images:\n case Types.ResponsiveColor:\n case Types.TableFormFields:\n case Types.Table:\n case Types.Border:\n case Types.RichText:\n case Types.ElementID:\n return propControllerCopy(definition, value, context)\n case ColorControlType:\n return copyColorData(value, context)\n case ImageControlType:\n return copyImageData(value, context)\n case LinkControlType:\n return copyLinkData(value, context)\n case ShapeControlType:\n return copyShapeData(definition, value, context)\n case ListControlType:\n return copyListData(definition, value, context)\n case StyleControlType:\n return copyStyleData(value, context)\n case SlotControlType:\n return copySlotData(value, context)\n default:\n return value\n }\n}\n","import { BlockType, InlineType } from './types'\n\nexport const ObjectType = {\n Value: 'value',\n Text: 'text',\n Inline: 'inline',\n Block: 'block',\n Document: 'document',\n Leaf: 'leaf',\n Selection: 'selection',\n Mark: 'mark',\n Range: 'range',\n Decoration: 'decoration',\n Annotation: 'annotation',\n Point: 'point',\n Operation: 'operation',\n} as const\n\nexport type ObjectType = typeof ObjectType[keyof typeof ObjectType]\n\nexport interface ValueJSON {\n object?: typeof ObjectType.Value | undefined\n document?: DocumentJSON | undefined\n selection?: SelectionJSON | undefined\n annotations?: { [key: string]: AnnotationJSON } | undefined\n data?: { [key: string]: any } | undefined\n}\nexport type RichTextDTO = ValueJSON\n\nexport interface DocumentJSON {\n object?: typeof ObjectType.Document | undefined\n nodes?: NodeJSON[] | undefined\n key?: string | undefined\n data?: { [key: string]: any } | undefined\n}\n\nexport interface BlockJSON {\n object?: typeof ObjectType.Block | undefined\n type: typeof BlockType[keyof typeof BlockType]\n key?: string | undefined\n nodes?: Array<BlockJSON | InlineJSON | TextJSON> | undefined\n data?: { [key: string]: any } | undefined\n}\n\nexport interface InlineJSON {\n object?: typeof ObjectType.Inline | undefined\n type: typeof InlineType[keyof typeof InlineType]\n key?: string | undefined\n nodes?: Array<InlineJSON | TextJSON> | undefined\n data?: { [key: string]: any } | undefined\n}\n\nexport interface TextJSON {\n object?: typeof ObjectType.Text | undefined\n key?: string | undefined\n text?: string | undefined\n marks?: MarkJSON[] | undefined\n}\n\nexport interface LeafJSON {\n object?: typeof ObjectType.Leaf | undefined\n marks?: MarkJSON[] | undefined\n text?: string | undefined\n}\nexport type NodeJSON = DocumentJSON | BlockJSON | InlineJSON | TextJSON\n\nexport interface SelectionJSON {\n object?: typeof ObjectType.Selection | undefined\n anchor?: PointJSON | undefined\n focus?: PointJSON | undefined\n isFocused?: boolean | undefined\n marks?: MarkJSON[] | undefined\n}\n\nexport interface MarkJSON {\n object?: typeof ObjectType.Mark | undefined\n type: string\n data?: { [key: string]: any } | undefined\n}\n\nexport interface RangeJSON {\n object?: typeof ObjectType.Range | undefined\n anchor?: PointJSON | undefined\n focus?: PointJSON | undefined\n}\n\nexport interface DecorationJSON {\n object?: typeof ObjectType.Decoration | undefined\n anchor?: PointJSON | undefined\n focus?: PointJSON | undefined\n type?: string | undefined\n data?: { [key: string]: any } | undefined\n}\n\nexport interface AnnotationJSON {\n object?: typeof ObjectType.Annotation | undefined\n key: string\n type: string\n data?: { [key: string]: any } | undefined\n anchor?: PointJSON | undefined\n focus?: PointJSON | undefined\n}\n\nexport interface PointJSON {\n object?: typeof ObjectType.Point | undefined\n key?: string | undefined\n offset?: number | undefined\n path?: number[] | undefined\n}\n\nexport interface OperationJSON {\n object?: typeof ObjectType.Operation | undefined\n type: string\n text?: string | undefined\n target?: number | undefined\n properties?: NodeJSON | ValueJSON | SelectionJSON | AnnotationJSON | undefined\n position?: number | undefined\n path?: number[] | undefined\n offset?: number | undefined\n node?: Node | undefined\n newProperties?: NodeJSON | ValueJSON | SelectionJSON | MarkJSON | AnnotationJSON | undefined\n newPath?: number[] | undefined\n mark?: MarkJSON | undefined\n data?: { [key: string]: any } | undefined\n annotation?: AnnotationJSON | undefined\n}\n","import { BaseEditor, Descendant } from 'slate'\nimport { ReactEditor } from 'slate-react'\nimport { LinkControlData } from '../link'\nimport { ResponsiveValue } from '../types'\n\nexport type RichTextTypography = {\n id?: string\n style: Array<{\n deviceId: string\n value: {\n fontFamily?: string\n lineHeight?: number\n letterSpacing?: number\n fontWeight?: number\n textAlign?: string\n uppercase?: boolean\n underline?: boolean\n strikethrough?: boolean\n italic?: boolean\n fontSize?: { value: number | null; unit: string | null }\n color?: { swatchId: string | null; alpha: number | null }\n }\n }>\n}\n\nexport type Text = {\n text: string\n typography?: RichTextTypography\n}\n\nexport const BlockType = {\n Paragraph: 'paragraph',\n Heading1: 'heading-one',\n Heading2: 'heading-two',\n Heading3: 'heading-three',\n Heading4: 'heading-four',\n Heading5: 'heading-five',\n Heading6: 'heading-six',\n BlockQuote: 'blockquote',\n UnorderedList: 'unordered-list',\n OrderedList: 'ordered-list',\n ListItem: 'list-item',\n ListItemChild: 'list-item-child',\n} as const\n\nexport type BlockType = typeof BlockType[keyof typeof BlockType]\n\nexport type ParagraphElement = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Paragraph\n}\n\nexport type Heading1Element = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Heading1\n}\n\nexport type Heading2Element = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Heading2\n}\n\nexport type Heading3Element = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Heading3\n}\n\nexport type Heading4Element = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Heading4\n}\n\nexport type Heading5Element = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Heading5\n}\n\nexport type Heading6Element = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Heading6\n}\n\nexport type BlockQuoteElement = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.BlockQuote\n}\n\nexport type UnorderedListElement = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.UnorderedList\n}\n\nexport type OrderedListElement = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.OrderedList\n}\n\nexport type ListElement = OrderedListElement | UnorderedListElement\n\nexport type ListItemElement = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.ListItem\n}\n\nexport type ListItemChildElement = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.ListItemChild\n}\n\nexport const InlineType = {\n Code: 'code',\n SuperScript: 'superscript',\n SubScript: 'subscript',\n Link: 'link',\n} as const\n\nexport type InlineType = typeof InlineType[keyof typeof InlineType]\n\nexport const BlockTextAlignment = {\n Left: 'left',\n Center: 'center',\n Right: 'right',\n Justify: 'justify',\n} as const\n\nexport type BlockTextAlignment = typeof BlockTextAlignment[keyof typeof BlockTextAlignment]\n\nexport type ResponsiveBlockTextAlignment = ResponsiveValue<BlockTextAlignment>\n\ntype CodeElement = {\n children: Array<Text | Inline>\n type: typeof InlineType.Code\n}\n\ntype SuperElement = {\n children: Array<Text | Inline>\n type: typeof InlineType.SuperScript\n}\n\ntype SubElement = {\n children: Array<Text | Inline>\n type: typeof InlineType.SubScript\n}\n\ntype LinkElement = {\n children: Array<Text | Inline>\n type: typeof InlineType.Link\n link: LinkControlData\n}\n\nexport type Block =\n | ParagraphElement\n | Heading1Element\n | Heading2Element\n | Heading3Element\n | Heading4Element\n | Heading5Element\n | Heading6Element\n | BlockQuoteElement\n | ListElement\n | ListItemElement\n | ListItemChildElement\n\nexport type Inline = CodeElement | SuperElement | SubElement | LinkElement\n\nexport type Element = Block | Inline\n\nexport type RichTextDAO = Descendant[]\n\ndeclare module 'slate' {\n interface CustomTypes {\n Editor: BaseEditor & ReactEditor\n Element: Element\n Text: Text\n }\n}\n","import { Descendant, Text, Selection } from 'slate'\nimport { LinkControlData } from '../link'\nimport { BlockType, Inline, InlineType, RichTextDAO } from './types'\nimport {\n BlockJSON,\n InlineJSON,\n NodeJSON,\n SelectionJSON,\n TextJSON,\n RichTextDTO,\n ObjectType,\n} from './dto-types'\n\nfunction toTextDAO(node: TextJSON): Text[] {\n const typographyMark = node.marks?.find(mark => mark.type === 'typography')\n\n return [\n {\n text: node.text ?? '',\n typography: typographyMark?.data?.value ?? undefined,\n },\n ]\n}\n\nfunction toInlineDAO(node: InlineJSON): Inline[] {\n switch (node.type) {\n case InlineType.Link:\n return [\n {\n children: node.nodes?.flatMap(toInlineOrTextDAO) ?? [],\n [node.type]: node.data as LinkControlData,\n type: node.type,\n },\n ]\n case InlineType.Code:\n case InlineType.SubScript:\n case InlineType.SuperScript:\n return [\n {\n children: node.nodes?.flatMap(toInlineOrTextDAO) ?? [],\n type: node.type,\n },\n ]\n default:\n return []\n }\n}\n\nfunction toInlineOrTextDAO(node: InlineJSON | TextJSON): Array<Inline | Text> {\n switch (node.object) {\n case ObjectType.Inline:\n return toInlineDAO(node)\n case ObjectType.Text:\n return toTextDAO(node)\n default:\n return []\n }\n}\n\nfunction toNodeDAO(node: NodeJSON): Descendant[] {\n switch (node.object) {\n case ObjectType.Inline:\n case ObjectType.Text:\n return toInlineOrTextDAO(node)\n case ObjectType.Block:\n return [\n {\n type: node.type,\n textAlign: node?.data && 'textAlign' in node.data ? node?.data.textAlign : undefined,\n children: node.nodes?.flatMap(toNodeDAO) ?? [],\n },\n ]\n default:\n return []\n }\n}\n\nexport function richTextDTOtoSelection(data: RichTextDTO): Selection {\n if (\n data.selection?.anchor?.offset != null &&\n data.selection.anchor.path != null &&\n data.selection?.focus?.offset != null &&\n data.selection.focus.path != null\n )\n return {\n anchor: {\n offset: data.selection.anchor.offset,\n path: data.selection.anchor.path,\n },\n focus: {\n offset: data.selection.focus.offset,\n path: data.selection.focus.path,\n },\n }\n\n return null\n}\n\nexport function richTextDTOtoDAO(data: RichTextDTO): RichTextDAO {\n return data.document?.nodes?.flatMap(toNodeDAO) ?? []\n}\n\nfunction toInlineOrTextDTO(node: Inline | Text): Array<InlineJSON | TextJSON> {\n if (Text.isText(node)) {\n return [\n {\n text: node.text,\n object: 'text',\n marks: node.typography\n ? [\n {\n data: {\n value: node.typography,\n },\n type: 'typography',\n object: 'mark',\n },\n ]\n : [],\n },\n ]\n }\n switch (node.type) {\n case InlineType.Link:\n return [\n {\n object: ObjectType.Inline,\n nodes: node.children.flatMap(toInlineOrTextDTO),\n type: node.type,\n data: node.link,\n },\n ]\n case InlineType.Code:\n case InlineType.SubScript:\n case InlineType.SuperScript:\n return [\n {\n object: 'inline',\n nodes: node.children.flatMap(toInlineOrTextDTO),\n type: node.type,\n data: {},\n },\n ]\n }\n}\n\nfunction toNodeDTO(node: Descendant): Array<BlockJSON | InlineJSON | TextJSON> {\n if (Text.isText(node)) return toInlineOrTextDTO(node)\n\n switch (node.type) {\n case InlineType.Link:\n case InlineType.Code:\n case InlineType.SubScript:\n case InlineType.SuperScript:\n return toInlineOrTextDTO(node)\n case BlockType.Heading1:\n case BlockType.Heading2:\n case BlockType.Heading3:\n case BlockType.BlockQuote:\n case BlockType.Paragraph:\n case BlockType.OrderedList:\n case BlockType.UnorderedList:\n case BlockType.ListItem:\n case BlockType.ListItemChild:\n return [\n {\n type: node.type,\n data: node.textAlign\n ? {\n textAlign: node.textAlign,\n }\n : {},\n object: 'block',\n nodes: node.children?.flatMap(toNodeDTO) ?? [],\n },\n ]\n default:\n return []\n }\n}\n\nexport function toSelectionDTO(selection: Selection | null): SelectionJSON | undefined {\n if (selection == null) return undefined\n\n return {\n isFocused: false,\n marks: undefined,\n object: 'selection',\n anchor: {\n offset: selection.anchor.offset,\n path: selection.anchor.path,\n object: 'point',\n },\n focus: {\n offset: selection.focus.offset,\n path: selection.focus.path,\n object: 'point',\n },\n }\n}\n\nexport function richTextDAOToDTO(children: Descendant[], selection: Selection): RichTextDTO {\n return {\n document: {\n data: undefined,\n nodes: children.flatMap(toNodeDTO),\n object: 'document',\n },\n object: 'value',\n selection: toSelectionDTO(selection),\n annotations: undefined,\n data: undefined,\n }\n}\n","import { BuilderEditMode } from '../../state/modules/builder-edit-mode'\nimport { PropController } from '../../prop-controllers/instances'\nimport { BoxModel } from '../../box-model'\nimport { RichTextDTO } from './dto-types'\nimport { Editor, Transforms } from 'slate'\nimport { richTextDAOToDTO } from './translation'\nimport { ReactEditor } from 'slate-react'\n\nexport type RichTextControlData = RichTextDTO\n\nexport const RichTextControlType = 'makeswift::controls::rich-text'\n\nexport type RichTextControlDefinition = {\n type: typeof RichTextControlType\n}\n\nexport function RichText(): RichTextControlDefinition {\n return { type: RichTextControlType }\n}\n\nexport const RichTextControlMessageType = {\n CHANGE_BUILDER_EDIT_MODE: 'CHANGE_BUILDER_EDIT_MODE',\n INITIALIZE_EDITOR: 'INITIALIZE_EDITOR',\n CHANGE_EDITOR_VALUE: 'CHANGE_EDITOR_VALUE',\n FOCUS: 'FOCUS',\n BLUR: 'BLUR',\n UNDO: 'UNDO',\n REDO: 'REDO',\n CHANGE_BOX_MODEL: 'CHANGE_BOX_MODEL',\n} as const\n\ntype ChangeBuilderEditModeRichTextControlMessage = {\n type: typeof RichTextControlMessageType.CHANGE_BUILDER_EDIT_MODE\n editMode: BuilderEditMode\n}\n\ntype InitializeEditorRichTextControlMessage = {\n type: typeof RichTextControlMessageType.INITIALIZE_EDITOR\n value: RichTextDTO\n}\n\ntype ChangeEditorValueRichTextControlMessage = {\n type: typeof RichTextControlMessageType.CHANGE_EDITOR_VALUE\n value: RichTextDTO\n}\n\ntype FocusRichTextControlMessage = { type: typeof RichTextControlMessageType.FOCUS }\n\ntype BlurRichTextControlMessage = { type: typeof RichTextControlMessageType.BLUR }\n\ntype UndoRichTextControlMessage = { type: typeof RichTextControlMessageType.UNDO }\n\ntype RedoRichTextControlMessage = { type: typeof RichTextControlMessageType.REDO }\n\ntype BoxModelChangeRichControlMessage = {\n type: typeof RichTextControlMessageType.CHANGE_BOX_MODEL\n payload: { boxModel: BoxModel | null }\n}\n\nexport type RichTextControlMessage =\n | ChangeBuilderEditModeRichTextControlMessage\n | InitializeEditorRichTextControlMessage\n | ChangeEditorValueRichTextControlMessage\n | FocusRichTextControlMessage\n | BlurRichTextControlMessage\n | UndoRichTextControlMessage\n | RedoRichTextControlMessage\n | BoxModelChangeRichControlMessage\n\nexport class RichTextControl extends PropController<RichTextControlMessage> {\n private editor: Editor | null = null\n\n recv = (message: RichTextControlMessage): void => {\n if (!this.editor) return\n switch (message.type) {\n case RichTextControlMessageType.CHANGE_BUILDER_EDIT_MODE: {\n switch (message.editMode) {\n case BuilderEditMode.BUILD:\n case BuilderEditMode.INTERACT:\n ReactEditor.deselect(this.editor)\n ReactEditor.blur(this.editor)\n }\n break\n }\n case RichTextControlMessageType.FOCUS: {\n ReactEditor.focus(this.editor)\n Transforms.select(this.editor, {\n anchor: Editor.start(this.editor, []),\n focus: Editor.end(this.editor, []),\n })\n break\n }\n }\n }\n\n setSlateEditor(editor: Editor) {\n this.editor = editor\n\n this.send({\n type: RichTextControlMessageType.INITIALIZE_EDITOR,\n value: richTextDAOToDTO(editor.children, editor.selection),\n })\n\n const _onChange = editor.onChange\n this.editor.onChange = options => {\n _onChange(options)\n\n // if onChange is local then it will include an operation(s)\n // that is the only case in which we want to push updates\n // this prevent infinite loops that can occur when collaborating\n if (options?.operation != null) {\n this.send({\n type: RichTextControlMessageType.CHANGE_EDITOR_VALUE,\n value: richTextDAOToDTO(editor.children, editor.selection),\n })\n }\n }\n }\n\n focus() {\n this.send({ type: RichTextControlMessageType.FOCUS })\n }\n\n blur() {\n this.send({ type: RichTextControlMessageType.BLUR })\n }\n\n undo() {\n this.send({ type: RichTextControlMessageType.UNDO })\n }\n\n redo() {\n this.send({ type: RichTextControlMessageType.REDO })\n }\n\n changeBoxModel(boxModel: BoxModel | null): void {\n this.send({ type: RichTextControlMessageType.CHANGE_BOX_MODEL, payload: { boxModel } })\n }\n}\n","import {\n ResolveBorderControlValue,\n ResolveBorderRadiusControlValue,\n ResolveMarginControlValue,\n ResolvePaddingControlValue,\n ResolveShadowsControlValue,\n ResolveWidthControlValue,\n} from '../runtimes/react/controls'\nimport { StyleControlFormattedValue } from '../runtimes/react/controls/style'\nimport type { Element, Data } from '../state/react-page'\nimport type { ResponsiveColor } from '../runtimes/react/controls'\nimport { NumberControlDefinition } from '../controls/number'\nimport { NumberControlValue } from '../runtimes/react/controls/number'\nimport {\n CheckboxControlDefinition,\n ColorControlDefinition,\n ComboboxControlDefinition,\n ImageControlDefinition,\n LinkControlDefinition,\n ListControlDefinition,\n SelectControlDefinition,\n ShapeControlDefinition,\n SlotControlDefinition,\n TextAreaControlDefinition,\n TextInputControlDefinition,\n StyleControlDefinition,\n StyleControlType,\n} from '../controls'\nimport { TextInputControlValue } from '../runtimes/react/controls/text-input'\nimport { TextAreaControlValue } from '../runtimes/react/controls/text-area'\nimport { ColorControlValue } from '../runtimes/react/controls/color'\nimport { SelectControlValue } from '../runtimes/react/controls/select'\nimport { CheckboxControlValue } from '../runtimes/react/controls/checkbox'\nimport { ResolveImageControlValue } from '../runtimes/react/controls/image'\nimport { ShapeControlValue } from '../runtimes/react/controls/shape'\nimport { ListControlValue } from '../runtimes/react/controls/list'\nimport { ComboboxControlValue } from '../runtimes/react/controls/combobox'\nimport { LinkControlValue } from '../runtimes/react/controls/link'\nimport { SlotControlValue } from '../runtimes/react/controls/slot'\nimport { RichTextControlDefinition, RichTextDTO } from '../controls/rich-text'\nimport { RichTextControlValue } from '../runtimes/react/controls/rich-text'\n\nexport type { Data }\n\n// See https://github.com/microsoft/TypeScript/issues/15300\nexport type IndexSignatureHack<T> = T extends Record<string, any>\n ? { [K in keyof T]: IndexSignatureHack<T[K]> }\n : T\n\nexport type Device = 'desktop' | 'tablet' | 'mobile'\n\nexport type DeviceOverride<T> = { deviceId: Device; value: T }\n\nexport type ResponsiveValue<T> = DeviceOverride<T>[]\n\nexport type ResponsiveValueType<T> = T extends ResponsiveValue<infer U> ? U : never\n\ntype Color = { swatchId: string; alpha: number }\n\ntype IconName =\n | 'HeightAuto16'\n | 'HeightMatch16'\n | 'VerticalAlignStart16'\n | 'VerticalAlignMiddle16'\n | 'VerticalAlignEnd16'\n | 'VerticalAlignSpaceBetween16'\n | 'ButtonPill16'\n | 'ButtonRounded16'\n | 'ButtonSquare16'\n | 'SizeSmall16'\n | 'SizeMedium16'\n | 'SizeLarge16'\n | 'ArrowInside16'\n | 'ArrowCenter16'\n | 'ArrowOutside16'\n | 'CountdownSolid16'\n | 'CountdownSolidSplit16'\n | 'CountdownOutline16'\n | 'CountdownOutlineSplit16'\n | 'CountdownNaked16'\n | 'Sun16'\n | 'Moon16'\n | 'AlignLeft16'\n | 'AlignCenter16'\n | 'AlignRight16'\n | 'Star16'\n | 'StarCircle16'\n | 'StarRoundedSquare16'\n | 'StarSquare16'\n\nexport type Gap = { value: number; unit: 'px' }\n\nexport type Length = { value: number; unit: 'px' | '%' }\n\ntype OpenPageLink = {\n type: 'OPEN_PAGE'\n payload: { pageId: string | null | undefined; openInNewTab: boolean }\n}\n\ntype OpenURLLink = { type: 'OPEN_URL'; payload: { url: string; openInNewTab: boolean } }\n\ntype SendEmailLink = {\n type: 'SEND_EMAIL'\n payload: { to: string; subject?: string; body?: string }\n}\n\ntype CallPhoneLink = { type: 'CALL_PHONE'; payload: { phoneNumber: string } }\n\ntype ScrollToElementLink = {\n type: 'SCROLL_TO_ELEMENT'\n payload: {\n elementIdConfig: { elementKey: string; propName: string } | null | undefined\n block: 'start' | 'center' | 'end'\n }\n}\n\ntype Link = OpenPageLink | OpenURLLink | SendEmailLink | CallPhoneLink | ScrollToElementLink\n\ntype TextStyle = {\n fontFamily?: string | null | undefined\n letterSpacing: number | null | undefined\n fontSize: { value: number; unit: 'px' } | null | undefined\n fontWeight: number | null | undefined\n textTransform: 'uppercase'[]\n fontStyle: 'italic'[]\n}\n\nexport const Types = {\n Backgrounds: 'Backgrounds',\n Border: 'Border',\n BorderRadius: 'BorderRadius',\n Checkbox: 'Checkbox',\n Date: 'Date',\n ElementID: 'ElementID',\n Font: 'Font',\n GapX: 'GapX',\n GapY: 'GapY',\n Grid: 'Grid',\n Image: 'Image',\n Images: 'Images',\n Link: 'Link',\n List: 'List',\n Margin: 'Margin',\n NavigationLinks: 'NavigationLinks',\n Number: 'Number',\n Padding: 'Padding',\n ResponsiveColor: 'ResponsiveColor',\n ResponsiveIconRadioGroup: 'ResponsiveIconRadioGroup',\n ResponsiveLength: 'ResponsiveLength',\n ResponsiveNumber: 'ResponsiveNumber',\n ResponsiveOpacity: 'ResponsiveOpacity',\n ResponsiveSelect: 'ResponsiveSelect',\n RichText: 'RichText',\n Shadows: 'Shadows',\n Shape: 'Shape',\n SocialLinks: 'SocialLinks',\n Table: 'Table',\n TableFormFields: 'TableFormFields',\n Typeahead: 'Typeahead',\n TextArea: 'TextArea',\n TextInput: 'TextInput',\n TextStyle: 'TextStyle',\n Video: 'Video',\n Width: 'Width',\n Style: StyleControlType,\n} as const\n\ntype Options<T> = T | ((props: Record<string, unknown>, deviceMode: Device) => T)\n\nexport type ResolveOptions<T extends Options<unknown>> = T extends Options<infer U> ? U : never\n\ntype ColorBackground = { type: 'color'; id: string; payload: Color | null }\n\ntype GradientStop = { id: string; location: number; color: Color | null }\n\ntype Gradient = { angle?: number; isRadial?: boolean; stops: GradientStop[] }\n\ntype GradientBackground = { type: 'gradient'; id: string; payload: Gradient }\n\ntype BackgroundImagePosition = { x: number; y: number }\n\ntype BackgroundImageSize = 'cover' | 'contain' | 'auto'\n\ntype BackgroundImageRepeat = 'no-repeat' | 'repeat-x' | 'repeat-y' | 'repeat'\n\ntype BackgroundImage = {\n imageId: string\n position: BackgroundImagePosition\n size?: BackgroundImageSize\n repeat?: BackgroundImageRepeat\n opacity?: number\n parallax?: number\n}\n\ntype ImageBackground = { type: 'image'; id: string; payload: BackgroundImage }\n\ntype BackgroundVideoAspectRatio = 'wide' | 'standard'\n\ntype BackgroundVideo = {\n url?: string\n maskColor?: Color | null\n opacity?: number\n zoom?: number\n aspectRatio?: BackgroundVideoAspectRatio\n parallax?: number\n}\n\ntype VideoBackground = { type: 'video'; id: string; payload: BackgroundVideo }\n\ntype Background = ColorBackground | GradientBackground | ImageBackground | VideoBackground\n\nexport type BackgroundsValue = ResponsiveValue<Background[]>\n\ntype BackgroundsOptions = Options<Record<string, never>>\n\ntype BackgroundsDescriptor<_T = BackgroundsValue> = {\n type: typeof Types.Backgrounds\n options: BackgroundsOptions\n}\n\nexport function Backgrounds(options: BackgroundsOptions = {}): BackgroundsDescriptor {\n return { type: Types.Backgrounds, options }\n}\n\ntype BorderSideStyle = 'dashed' | 'dotted' | 'solid'\n\nexport type BorderSide = {\n width: number | null | undefined\n style: BorderSideStyle\n color?: Color | null\n}\n\ntype Border = {\n [K in 'top' | 'right' | 'bottom' | 'left' as `border${Capitalize<K>}`]:\n | BorderSide\n | null\n | undefined\n}\n\nexport type BorderValue = ResponsiveValue<Border>\n\nexport const BorderPropControllerFormat = {\n ClassName: 'makeswift::prop-controllers::border::format::class-name',\n ResponsiveValue: 'makeswift::prop-controllers:border::format::responsive-value',\n} as const\n\nexport type BorderPropControllerFormat =\n typeof BorderPropControllerFormat[keyof typeof BorderPropControllerFormat]\n\ntype BorderOptions = { format?: BorderPropControllerFormat }\n\nexport type BorderDescriptor<_T = BorderValue, U extends BorderOptions = BorderOptions> = {\n type: typeof Types.Border\n options: U\n}\n\nexport function Border<T extends BorderOptions>(\n options: T & BorderOptions = {} as T,\n): BorderDescriptor<BorderValue, T> {\n return { type: Types.Border, options }\n}\n\nBorder.Format = BorderPropControllerFormat\n\ntype BorderRadius = {\n [K in 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' as `border${Capitalize<K>}Radius`]:\n | Length\n | null\n | undefined\n}\n\nexport type BorderRadiusValue = ResponsiveValue<BorderRadius>\n\nexport const BorderRadiusPropControllerFormat = {\n ClassName: 'makeswift::prop-controllers::border-radius::format::class-name',\n ResponsiveValue: 'makeswift::prop-controllers::border-radius::format::responsive-value',\n} as const\n\nexport type BorderRadiusPropControllerFormat =\n typeof BorderRadiusPropControllerFormat[keyof typeof BorderRadiusPropControllerFormat]\n\ntype BorderRadiusOptions = { format?: BorderRadiusPropControllerFormat }\n\nexport type BorderRadiusDescriptor<\n _T = BorderRadiusValue,\n U extends BorderRadiusOptions = BorderRadiusOptions,\n> = {\n type: typeof Types.BorderRadius\n options: U\n}\n\nexport function BorderRadius<T extends BorderRadiusOptions>(\n options: T & BorderRadiusOptions = {} as T,\n): BorderRadiusDescriptor<BorderRadiusValue, T> {\n return { type: Types.BorderRadius, options }\n}\n\nBorderRadius.Format = BorderRadiusPropControllerFormat\n\nexport type CheckboxValue = boolean\n\nexport type CheckboxOptions = Options<{\n preset?: CheckboxValue\n label: string\n hidden?: boolean\n}>\n\nexport type CheckboxDescriptor<_T = CheckboxValue> = {\n type: typeof Types.Checkbox\n options: CheckboxOptions\n}\n\nexport function Checkbox(options: CheckboxOptions): CheckboxDescriptor {\n return { type: Types.Checkbox, options }\n}\n\nexport type DateValue = string\n\nexport type DateOptions = Options<{ preset?: DateValue }>\n\nexport type DateDescriptor<_T = DateValue> = { type: typeof Types.Date; options: DateOptions }\n\nexport function Date(options: DateOptions = {}): DateDescriptor {\n return { type: Types.Date, options }\n}\n\nexport type ElementIDValue = string\n\ntype ElementIDOptions = Options<Record<string, never>>\n\ntype ElementIDDescriptor<_T = ElementIDValue> = {\n type: typeof Types.ElementID\n options: ElementIDOptions\n}\n\nexport function ElementID(options: ElementIDOptions = {}): ElementIDDescriptor {\n return { type: Types.ElementID, options }\n}\n\nexport type FontValue = ResponsiveValue<string>\n\ntype FontOptions = Options<{ preset?: FontValue; label?: string }>\n\ntype FontDescriptor<_T = FontValue> = { type: typeof Types.Font; options: FontOptions }\n\nexport function Font(options: FontOptions = {}): FontDescriptor {\n return { type: Types.Font, options }\n}\n\nexport type GapXValue = ResponsiveValue<Gap>\n\nexport type GapXOptions = Options<{\n preset?: GapXValue\n label?: string\n defaultValue?: Gap\n min?: number\n max?: number\n step?: number\n hidden?: boolean\n}>\n\nexport type GapXDescriptor<_T = GapXValue> = { type: typeof Types.GapX; options: GapXOptions }\n\nexport function GapX(options: GapXOptions = {}): GapXDescriptor {\n return { type: Types.GapX, options }\n}\n\nexport type GapYValue = ResponsiveValue<Gap>\n\nexport type GapYOptions = Options<{\n preset?: GapYValue\n label?: string\n defaultValue?: Gap\n step?: number\n min?: number\n max?: number\n hidden?: boolean\n}>\n\nexport type GapYDescriptor<_T = GapYValue> = { type: typeof Types.GapY; options: GapYOptions }\n\nexport function GapY(options: GapYOptions = {}): GapYDescriptor {\n return { type: Types.GapY, options }\n}\n\ntype GridColumn = { count: number; spans: number[][] }\n\nexport type GridValue = { elements: Element[]; columns: ResponsiveValue<GridColumn> }\n\ntype GridOptions = Options<Record<string, never>>\n\ntype GridDescriptor<_T = GridValue> = { type: typeof Types.Grid; options: GridOptions }\n\nexport function Grid(options: GridOptions = {}): GridDescriptor {\n return { type: Types.Grid, options }\n}\n\nexport type ImageValue = string\n\nexport type ImageOptions = Options<{ label?: string; hidden?: boolean }>\n\nexport type ImageDescriptor<_T = ImageValue> = { type: typeof Types.Image; options: ImageOptions }\n\nexport function Image(options: ImageOptions = {}): ImageDescriptor {\n return { type: Types.Image, options }\n}\n\nexport type ImagesValue = { key: string; props: { link?: Link; file?: string; altText?: string } }[]\n\ntype ImagesOptions = Options<{ preset?: ImagesValue }>\n\ntype ImagesDescriptor<_T = ImagesValue> = { type: typeof Types.Images; options: ImagesOptions }\n\nexport function Images(options: ImagesOptions = {}): ImagesDescriptor {\n return { type: Types.Images, options }\n}\n\nexport type LinkValue = Link\n\nexport type LinkOptions = Options<{\n preset?: LinkValue\n label?: string\n defaultValue?: Link\n options?: { value: Link['type']; label: string }[]\n hidden?: boolean\n}>\n\nexport type LinkDescriptor<_T = LinkValue> = { type: typeof Types.Link; options: LinkOptions }\n\nexport function Link(options: LinkOptions = {}): LinkDescriptor {\n return { type: Types.Link, options }\n}\n\ntype ListValueItem<T extends Data> = { id: string; value?: T }\n\nexport type ListValue<T extends Data = Data> = ListValueItem<T>[]\n\nexport type ListOptions<T extends Data> = {\n type: PanelDescriptor<T>\n label?: string\n getItemLabel?: ((value: T | undefined) => string) | ((value: T | undefined) => Promise<string>)\n preset?: ListValue<T>\n defaultValue?: ListValue<T>\n}\n\nexport type ListDescriptor<T extends ListValue = ListValue> = {\n type: typeof Types.List\n options: ListOptions<T extends ListValue<infer U> ? U : never>\n}\n\nexport function List<T extends Data>(options: ListOptions<T>): ListDescriptor<ListValue<T>> {\n return { type: Types.List, options }\n}\n\ntype MarginSide = { value: number; unit: 'px' } | 'auto'\n\ntype Margin = {\n [K in 'top' | 'right' | 'bottom' | 'left' as `margin${Capitalize<K>}`]:\n | MarginSide\n | null\n | undefined\n}\n\nexport type MarginValue = ResponsiveValue<Margin>\n\nexport const MarginPropControllerFormat = {\n ClassName: 'makeswift::prop-controllers::margin::format::class-name',\n ResponsiveValue: 'makeswift::prop-controllers::margin::format::responsive-value',\n} as const\n\nexport type MarginPropControllerFormat =\n typeof MarginPropControllerFormat[keyof typeof MarginPropControllerFormat]\n\ntype MarginOptions = { preset?: MarginValue; format?: MarginPropControllerFormat }\n\nexport type MarginDescriptor<_T = MarginValue, U extends MarginOptions = MarginOptions> = {\n type: typeof Types.Margin\n options: U\n}\n\nexport function Margin<T extends MarginOptions>(\n options: T & MarginOptions = {} as T,\n): MarginDescriptor<MarginValue, T> {\n return { type: Types.Margin, options }\n}\n\nMargin.Format = MarginPropControllerFormat\n\ntype ButtonVariant = 'flat' | 'outline' | 'shadow' | 'clear' | 'blocky' | 'bubbly' | 'skewed'\n\ntype ButtonShape = 'pill' | 'rounded' | 'square'\n\ntype ButtonSize = 'small' | 'medium' | 'large'\n\nexport type NavigationButton = {\n id: string\n type: 'button'\n payload: {\n label: string\n link?: Link\n variant?: ResponsiveValue<ButtonVariant>\n shape?: ResponsiveValue<ButtonShape>\n size?: ResponsiveValue<ButtonSize>\n textColor?: ResponsiveValue<Color>\n color?: ResponsiveValue<Color>\n textStyle?: ResponsiveValue<TextStyle>\n }\n}\n\ntype NavigationDropdownCaretType = 'caret' | 'plus' | 'arrow-down' | 'chevron-down'\n\ntype NavigationDropdownLink = {\n id: string\n payload: {\n label: string\n link?: Link\n color?: ResponsiveValue<Color>\n textStyle?: ResponsiveValue<TextStyle>\n }\n}\n\ntype NavigationDropdown = {\n id: string\n type: 'dropdown'\n payload: {\n label: string\n caret?: NavigationDropdownCaretType\n links?: NavigationDropdownLink[]\n variant?: ResponsiveValue<ButtonVariant>\n shape?: ResponsiveValue<ButtonShape>\n size?: ResponsiveValue<ButtonSize>\n textColor?: ResponsiveValue<Color>\n color?: ResponsiveValue<Color>\n textStyle?: ResponsiveValue<TextStyle>\n }\n}\n\nexport type NavigationLinksValue = (NavigationButton | NavigationDropdown)[]\n\ntype NavigationLinksOptions = Options<Record<string, never>>\n\ntype NavigationLinksDescriptor<_T = NavigationLinksValue> = {\n type: typeof Types.NavigationLinks\n options: NavigationLinksOptions\n}\n\nexport function NavigationLinks(options: NavigationLinksOptions = {}): NavigationLinksDescriptor {\n return { type: Types.NavigationLinks, options }\n}\n\nexport type NumberValue = number\n\nexport type NumberOptions = Options<{\n preset?: NumberValue\n label?: string\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n suffix?: string\n hidden?: boolean\n}>\n\nexport type NumberDescriptor<_T = NumberValue> = {\n type: typeof Types.Number\n options: NumberOptions\n}\n\nexport function Number(options: NumberOptions = {}): NumberDescriptor {\n return { type: Types.Number, options }\n}\n\ntype PaddingSide = { value: number; unit: 'px' }\n\ntype Padding = {\n [K in 'top' | 'right' | 'bottom' | 'left' as `padding${Capitalize<K>}`]:\n | PaddingSide\n | null\n | undefined\n}\n\nexport type PaddingValue = ResponsiveValue<Padding>\n\nexport const PaddingPropControllerFormat = {\n ClassName: 'makeswift::prop-controllers::padding::format::class-name',\n ResponsiveValue: 'makeswift::prop-controllers::padding::format::responsive-value',\n} as const\n\nexport type PaddingPropControllerFormat =\n typeof PaddingPropControllerFormat[keyof typeof PaddingPropControllerFormat]\n\ntype PaddingOptions = { preset?: PaddingValue; format?: PaddingPropControllerFormat }\n\nexport type PaddingDescriptor<_T = PaddingValue, U extends PaddingOptions = PaddingOptions> = {\n type: typeof Types.Padding\n options: U\n}\n\nexport function Padding<T extends PaddingOptions>(\n options: T & PaddingOptions = {} as T,\n): PaddingDescriptor<PaddingValue, T> {\n return { type: Types.Padding, options }\n}\n\nPadding.Format = PaddingPropControllerFormat\n\nexport type ResponsiveColorValue = ResponsiveValue<Color>\n\ntype ResponsiveColorOptions = Options<{ label?: string; placeholder?: string; hidden?: boolean }>\n\nexport type ResponsiveColorDescriptor<_T = ResponsiveColorValue> = {\n type: typeof Types.ResponsiveColor\n options: ResponsiveColorOptions\n}\n\nexport function ResponsiveColor(options: ResponsiveColorOptions = {}): ResponsiveColorDescriptor {\n return { type: Types.ResponsiveColor, options }\n}\n\nexport type IconRadioGroupOption<T extends string> = { value: T; label: string; icon: IconName }\n\nexport type ResponsiveIconRadioGroupValue<T extends string = string> = ResponsiveValue<T>\n\nexport type ResponsiveIconRadioGroupOptions<T extends string = string, U extends T = T> = Options<{\n label?: string\n options: IconRadioGroupOption<T>[]\n defaultValue?: U\n hidden?: boolean\n}>\n\nexport type ResponsiveIconRadioGroupDescriptor<\n T extends ResponsiveIconRadioGroupValue<string> = ResponsiveIconRadioGroupValue<string>,\n> = {\n type: typeof Types.ResponsiveIconRadioGroup\n options: ResponsiveIconRadioGroupOptions<ResponsiveValueType<T>>\n}\n\n// HACK(miguel): We have to use a layer of indirection with `_T` and `T` because otherwise the\n// values provided would undergo type widening. For some reason, the extra layer of indirection\n// reuslts in TypeScript not widening types. Note, this only happens when the returned value of this\n// function is passed to another as an argument, which is common with the `registerComponent` API.\nexport function ResponsiveIconRadioGroup<_T extends string, T extends _T, U extends T>(\n options: ResponsiveIconRadioGroupOptions<T, U>,\n): ResponsiveIconRadioGroupDescriptor<ResponsiveIconRadioGroupValue<T>> {\n return { type: Types.ResponsiveIconRadioGroup, options }\n}\n\nexport type ResponsiveLengthValue = ResponsiveValue<Length>\n\nexport type LengthOption =\n | { value: 'px'; label: 'Pixels'; icon: 'Px16' }\n | { value: '%'; label: 'Percentage'; icon: 'Percent16' }\n\nexport type ResponsiveLengthOptions = Options<{\n label?: string\n options?: LengthOption[]\n defaultValue?: Length\n hidden?: boolean\n}>\n\nexport type ResponsiveLengthDescriptor<_T = ResponsiveLengthValue> = {\n type: typeof Types.ResponsiveLength\n options: ResponsiveLengthOptions\n}\n\nexport function ResponsiveLength(\n options: ResponsiveLengthOptions = {},\n): ResponsiveLengthDescriptor {\n return { type: Types.ResponsiveLength, options }\n}\n\nexport type ResponsiveNumberValue = ResponsiveValue<number>\n\nexport type ResponsiveNumberOptions = Options<{\n label?: string\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n suffix?: string\n hidden?: boolean\n}>\n\nexport type ResponsiveNumberDescriptor<_T = ResponsiveNumberValue> = {\n type: typeof Types.ResponsiveNumber\n options: ResponsiveNumberOptions\n}\n\nexport function ResponsiveNumber(\n options: ResponsiveNumberOptions = {},\n): ResponsiveNumberDescriptor {\n return { type: Types.ResponsiveNumber, options }\n}\n\nexport type ResponsiveOpacityValue = ResponsiveValue<number>\n\ntype ResponsiveOpacityOptions = Options<Record<string, never>>\n\ntype ResponsiveOpacityDescriptor<_T = ResponsiveOpacityValue> = {\n type: typeof Types.ResponsiveOpacity\n options: ResponsiveOpacityOptions\n}\n\nexport function ResponsiveOpacity(\n options: ResponsiveOpacityOptions = {},\n): ResponsiveOpacityDescriptor {\n return { type: Types.ResponsiveOpacity, options }\n}\n\nexport type ResponsiveSelectValue<T extends string = string> = ResponsiveValue<T>\n\nexport type SelectLabelOrientation = 'vertical' | 'horizontal'\n\nexport type SelectOption<T extends string> = { value: T; label: string }\n\nexport type ResponsiveSelectOptions<T extends string = string, U extends T = T> = Options<{\n label?: string\n labelOrientation?: SelectLabelOrientation\n options: SelectOption<T>[]\n defaultValue?: U\n hidden?: boolean\n}>\n\nexport type ResponsiveSelectDescriptor<\n T extends ResponsiveSelectValue<string> = ResponsiveSelectValue<string>,\n> = {\n type: typeof Types.ResponsiveSelect\n options: ResponsiveSelectOptions<ResponsiveValueType<T>>\n}\n\n// HACK(miguel): We have to use a layer of indirection with `_T` and `T` because otherwise the\n// values provided would undergo type widening. For some reason, the extra layer of indirection\n// reuslts in TypeScript not widening types. Note, this only happens when the returned value of this\n// function is passed to another as an argument, which is common with the `registerComponent` API.\nexport function ResponsiveSelect<_T extends string, T extends _T, U extends T>(\n options: ResponsiveSelectOptions<T, U>,\n): ResponsiveSelectDescriptor<ResponsiveSelectValue<T>> {\n return { type: Types.ResponsiveSelect, options }\n}\n\nexport type RichTextValue = IndexSignatureHack<RichTextDTO>\n\nexport type RichTextOptions = Options<{ preset?: RichTextValue }>\n\nexport type RichTextDescriptor<_T extends Data = RichTextValue> = {\n type: typeof Types.RichText\n options: RichTextOptions\n}\n\nexport function RichText(options: RichTextOptions = {}): RichTextDescriptor {\n return { type: Types.RichText, options }\n}\n\ntype Shadow = {\n color?: Color | null\n blurRadius?: number\n spreadRadius?: number\n offsetX?: number\n offsetY?: number\n inset?: boolean\n}\n\ntype Shadows = { id: string; payload: Shadow }[]\n\nexport type ShadowsValue = ResponsiveValue<Shadows>\n\nexport const ShadowsPropControllerFormat = {\n ClassName: 'makeswift::prop-controllers::shadows::format::class-name',\n ResponsiveValue: 'makeswift::prop-controllers::shadows::format::responsive-value',\n} as const\n\nexport type ShadowsPropControllerFormat =\n typeof ShadowsPropControllerFormat[keyof typeof ShadowsPropControllerFormat]\n\ntype ShadowsOptions = { format?: ShadowsPropControllerFormat }\n\nexport type ShadowsDescriptor<_T = ShadowsValue, U extends ShadowsOptions = ShadowsOptions> = {\n type: typeof Types.Shadows\n options: U\n}\n\nexport function Shadows<T extends ShadowsOptions>(\n options: T & ShadowsOptions = {} as T,\n): ShadowsDescriptor<ShadowsValue, T> {\n return { type: Types.Shadows, options }\n}\n\nShadows.Format = ShadowsPropControllerFormat\n\nexport type ShapeValue<T extends Data = Data> = Record<string, T>\n\ntype ShapeOptions<T extends Record<string, PanelDescriptor>> = {\n type: T\n preset?: { [K in keyof T]?: DescriptorValueType<T[K]> }\n}\n\nexport type ShapeDescriptor<\n _T extends Record<string, Data>,\n U extends Record<string, PanelDescriptor>,\n> = {\n type: typeof Types.Shape\n options: ShapeOptions<U>\n}\n\nexport function Shape<T extends Record<string, PanelDescriptor>>(\n options: ShapeOptions<T>,\n): ShapeDescriptor<{ [K in keyof T]?: DescriptorValueType<T[K]> }, T> {\n return { type: Types.Shape, options }\n}\n\ntype SocialLinkType =\n | 'angellist'\n | 'codepen'\n | 'dribbble'\n | 'facebook'\n | 'github'\n | 'instagram'\n | 'linkedin'\n | 'medium'\n | 'pinterest'\n | 'reddit'\n | 'rss'\n | 'snapchat'\n | 'soundcloud'\n | 'spotify'\n | 'telegram'\n | 'tumblr'\n | 'twitch'\n | 'twitter'\n | 'vimeo'\n | 'whatsapp'\n | 'yelp'\n | 'youtube'\n\ntype SocialLink = { type: SocialLinkType; url: string }\n\ntype SocialLinksLink = { id: string; payload: SocialLink }\n\nexport type SocialLinksValue = { links: SocialLinksLink[]; openInNewTab: boolean }\n\ntype SocialLinksOptions = Options<{ preset?: SocialLinksValue }>\n\ntype SocialLinksDescriptor<_T = SocialLinksValue> = {\n type: typeof Types.SocialLinks\n options: SocialLinksOptions\n}\n\nexport function SocialLinks(options: SocialLinksOptions = {}): SocialLinksDescriptor {\n return { type: Types.SocialLinks, options }\n}\n\nexport type TableValue = string\n\ntype TableOptions = Options<{ preset?: TableValue }>\n\ntype TableDescriptor<_T = TableValue> = { type: typeof Types.Table; options: TableOptions }\n\nexport function Table(options: TableOptions = {}): TableDescriptor {\n return { type: Types.Table, options }\n}\n\ntype TableFormField = {\n id: string\n tableColumnId: string\n label?: string\n placeholder?: string\n defaultValue?: string | boolean | string[]\n required?: boolean\n hidden?: boolean\n type?: 'select' | 'radio'\n hideLabel?: boolean\n autofill?: boolean\n}\n\ntype Grid = { count: number; spans: number[][] }\n\nexport type TableFormFieldsValue = { fields: TableFormField[]; grid: ResponsiveValue<Grid> }\n\ntype TableFormFieldsOptions = Options<{ preset?: TableFormFieldsValue }>\n\nexport type TableFormFieldsDescriptor<_T = TableFormFieldsValue> = {\n type: typeof Types.TableFormFields\n options: TableFormFieldsOptions\n}\n\nexport function TableFormFields(options: TableFormFieldsOptions = {}): TableFormFieldsDescriptor {\n return { type: Types.TableFormFields, options }\n}\n\nexport type TypeaheadValue<T extends Data = Data> = {\n id: string\n label: string\n value: T\n}\n\nexport type TypeaheadOptions<T extends Data> = {\n getItems: (query: string) => Promise<TypeaheadValue<T>[]>\n label?: string\n preset?: TypeaheadValue<T>\n defaultValue?: TypeaheadValue<T>\n}\n\nexport type TypeaheadDescriptor<T extends TypeaheadValue = TypeaheadValue> = {\n type: typeof Types.Typeahead\n options: TypeaheadOptions<T extends TypeaheadValue<infer U> ? U : never>\n}\n\nexport function Typeahead<T extends Data>(\n options: TypeaheadOptions<T>,\n): TypeaheadDescriptor<TypeaheadValue<T>> {\n return { type: Types.Typeahead, options }\n}\n\nexport type TextAreaValue = string\n\ntype TextAreaOptions = Options<{ preset?: TextAreaValue; label?: string; rows?: number }>\n\ntype TextAreaDescriptor<_T = TextAreaValue> = {\n type: typeof Types.TextArea\n options: TextAreaOptions\n}\n\nexport function TextArea(options: TextAreaOptions = {}): TextAreaDescriptor {\n return { type: Types.TextArea, options }\n}\n\nexport type TextInputValue = string\n\nexport type TextInputOptions = Options<{ label?: string; placeholder?: string; hidden?: boolean }>\n\nexport type TextInputDescriptor<_T = TextInputValue> = {\n type: typeof Types.TextInput\n options: TextInputOptions\n}\n\nexport function TextInput(options: TextInputOptions = {}): TextInputDescriptor {\n return { type: Types.TextInput, options }\n}\n\nexport type TextStyleValue = ResponsiveValue<TextStyle>\n\nexport type TextStyleOptions = Options<{\n preset?: TextStyleValue\n label?: string\n hidden?: boolean\n}>\n\nexport type TextStyleDescriptor<_T = TextStyleValue> = {\n type: typeof Types.TextStyle\n options: TextStyleOptions\n}\n\nexport function TextStyle(options: TextStyleOptions = {}): TextStyleDescriptor {\n return { type: Types.TextStyle, options }\n}\n\ntype Video = {\n url?: string\n muted?: boolean\n playing?: boolean\n loop?: boolean\n controls?: boolean\n}\n\nexport type VideoValue = Video\n\ntype VideoOptions = Options<{ preset?: VideoValue }>\n\ntype VideoDescriptor<_T = VideoValue> = { type: typeof Types.Video; options: VideoOptions }\n\nexport function Video(options: VideoOptions = {}): VideoDescriptor {\n return { type: Types.Video, options }\n}\n\nexport type WidthValue = ResponsiveValue<Length>\n\nexport const WidthPropControllerFormat = {\n ClassName: 'makeswift::prop-controllers::width::format::class-name',\n ResponsiveValue: 'makeswift::prop-controllers::width::format::responsive-value',\n} as const\n\ntype WidthControlValueFormat =\n typeof WidthPropControllerFormat[keyof typeof WidthPropControllerFormat]\n\ntype WidthOptions = {\n preset?: WidthValue\n defaultValue?: Length\n format?: WidthControlValueFormat\n}\n\nexport type WidthDescriptor<_T = WidthValue, U extends WidthOptions = WidthOptions> = {\n type: typeof Types.Width\n options: U\n}\n\nexport function Width<T extends WidthOptions>(\n options: T & WidthOptions = {} as T,\n): WidthDescriptor<WidthValue, T> {\n return { type: Types.Width, options }\n}\n\nWidth.Format = WidthPropControllerFormat\n\nexport type Descriptor<T extends Data = Data> =\n | BackgroundsDescriptor<T>\n | BorderDescriptor<T>\n | BorderRadiusDescriptor<T>\n | CheckboxDescriptor<T>\n | DateDescriptor<T>\n | ElementIDDescriptor<T>\n | FontDescriptor<T>\n | GapXDescriptor<T>\n | GapYDescriptor<T>\n | GridDescriptor<T>\n | ImageDescriptor<T>\n | ImagesDescriptor<T>\n | LinkDescriptor<T>\n | ListDescriptor<T extends ListValue ? T : ListValue>\n | MarginDescriptor<T>\n | NavigationLinksDescriptor<T>\n | NumberDescriptor<T>\n | PaddingDescriptor<T>\n | ResponsiveColorDescriptor<T>\n | ResponsiveIconRadioGroupDescriptor<\n T extends ResponsiveIconRadioGroupValue<string> ? T : ResponsiveIconRadioGroupValue<string>\n >\n | ResponsiveLengthDescriptor<T>\n | ResponsiveNumberDescriptor<T>\n | ResponsiveOpacityDescriptor<T>\n | ResponsiveSelectDescriptor<\n T extends ResponsiveSelectValue<string> ? T : ResponsiveSelectValue<string>\n >\n | RichTextDescriptor<T>\n | ShadowsDescriptor<T>\n | ShapeDescriptor<T extends ShapeValue ? T : ShapeValue, any>\n | SocialLinksDescriptor<T>\n | TableDescriptor<T>\n | TableFormFieldsDescriptor<T>\n | TypeaheadDescriptor<T extends TypeaheadValue ? T : TypeaheadValue>\n | TextAreaDescriptor<T>\n | TextInputDescriptor<T>\n | TextStyleDescriptor<T>\n | VideoDescriptor<T>\n | WidthDescriptor<T>\n | StyleControlDefinition\n | NumberControlDefinition\n | CheckboxControlDefinition\n | TextInputControlDefinition\n | TextAreaControlDefinition\n | SelectControlDefinition\n | ColorControlDefinition\n | ImageControlDefinition\n | ComboboxControlDefinition\n | ShapeControlDefinition\n | ListControlDefinition\n | LinkControlDefinition\n | SlotControlDefinition\n | RichTextControlDefinition\n\nexport type PanelDescriptorType =\n | typeof Types.Backgrounds\n | typeof Types.ResponsiveIconRadioGroup\n | typeof Types.Margin\n | typeof Types.Padding\n | typeof Types.Border\n | typeof Types.Shadows\n | typeof Types.GapY\n | typeof Types.GapX\n | typeof Types.BorderRadius\n | typeof Types.Checkbox\n | typeof Types.TextInput\n | typeof Types.Link\n | typeof Types.List\n | typeof Types.Shape\n | typeof Types.ResponsiveSelect\n | typeof Types.ResponsiveColor\n | typeof Types.TextStyle\n | typeof Types.Images\n | typeof Types.ResponsiveNumber\n | typeof Types.Number\n | typeof Types.Date\n | typeof Types.Font\n | typeof Types.TextArea\n | typeof Types.Table\n | typeof Types.Typeahead\n | typeof Types.RichText\n | typeof Types.Image\n | typeof Types.ResponsiveOpacity\n | typeof Types.SocialLinks\n | typeof Types.Video\n | typeof Types.NavigationLinks\n\nexport type PanelDescriptor<T extends Data = Data> = Extract<\n Descriptor<T>,\n { type: PanelDescriptorType }\n>\n\nexport type DescriptorValueType<T extends Descriptor> = T extends NumberControlDefinition\n ? NumberControlValue<T>\n : T extends CheckboxControlDefinition\n ? CheckboxControlValue<T>\n : T extends TextInputControlDefinition\n ? TextInputControlValue<T>\n : T extends TextAreaControlDefinition\n ? TextAreaControlValue<T>\n : T extends SelectControlDefinition\n ? SelectControlValue<T>\n : T extends ColorControlDefinition\n ? ColorControlValue<T>\n : T extends StyleControlDefinition\n ? StyleControlFormattedValue\n : T extends ImageControlDefinition\n ? ResolveImageControlValue<T>\n : T extends ComboboxControlDefinition\n ? ComboboxControlValue<T>\n : T extends ShapeControlDefinition\n ? ShapeControlValue<T>\n : T extends ListControlDefinition\n ? ListControlValue<T>\n : T extends LinkControlDefinition\n ? LinkControlValue<T>\n : T extends SlotControlDefinition\n ? SlotControlValue\n : T extends RichTextControlDefinition\n ? RichTextControlValue\n : T['type'] extends typeof Types.ResponsiveColor\n ? ResponsiveColor | null | undefined\n : T['type'] extends typeof Types.Width\n ? ResolveWidthControlValue<T>\n : T['type'] extends typeof Types.Padding\n ? ResolvePaddingControlValue<T>\n : T['type'] extends typeof Types.Margin\n ? ResolveMarginControlValue<T>\n : T['type'] extends typeof Types.BorderRadius\n ? ResolveBorderRadiusControlValue<T>\n : T['type'] extends typeof Types.Shadows\n ? ResolveShadowsControlValue<T>\n : T['type'] extends typeof Types.Border\n ? ResolveBorderControlValue<T>\n : T extends Descriptor<infer U>\n ? U | undefined\n : never\n\nexport type PanelDescriptorValueType<T extends PanelDescriptor> = T extends PanelDescriptor<infer U>\n ? U\n : never\n"],"names":["Image","controlCopy","linkCopy","copy","backgroundsCopy","gridCopy","navigationLinksCopy","shadowsCopy","imageCopy","imagesCopy","responsiveColorCopy","tableFormFieldsCopy","tableCopy","borderCopy","richTextCopy","elementIdCopy","propControllerCopy"],"mappings":"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"}
1
+ {"version":3,"file":"descriptors.es.js","sources":["../src/state/modules/builder-edit-mode.ts","../src/controls/color.ts","../src/controls/image.ts","../src/controls/link.ts","../src/prop-controllers/instances.ts","../src/controls/list.ts","../src/controls/shape.ts","../src/controls/style.ts","../src/controls/slot.ts","../src/prop-controllers/copy/backgrounds.ts","../src/prop-controllers/copy/grid.ts","../src/prop-controllers/copy/link.ts","../src/prop-controllers/copy/navigation-links.ts","../src/prop-controllers/copy/shadows.ts","../src/prop-controllers/copy/image.ts","../src/prop-controllers/copy/images.ts","../src/prop-controllers/copy/responsive-color.ts","../src/prop-controllers/copy/table-form-fields.ts","../src/prop-controllers/copy/table.ts","../src/prop-controllers/copy/border.ts","../src/prop-controllers/copy/rich-text.ts","../src/prop-controllers/copy/element-id.ts","../src/prop-controllers/copy.ts","../src/controls/control.ts","../src/controls/rich-text/dto-types.ts","../src/controls/rich-text/types.ts","../src/controls/rich-text/translation.ts","../src/controls/rich-text/rich-text.ts","../src/prop-controllers/descriptors.ts"],"sourcesContent":["import { Action, ActionTypes } from '../actions'\n\nexport const BuilderEditMode = {\n BUILD: 'build',\n CONTENT: 'content',\n INTERACT: 'interact',\n} as const\n\nexport type BuilderEditMode = typeof BuilderEditMode[keyof typeof BuilderEditMode]\n\nexport type State = BuilderEditMode | null\n\nexport function getInitialState(): State {\n return null\n}\n\nexport function reducer(state: State = getInitialState(), action: Action): State {\n switch (action.type) {\n case ActionTypes.SET_BUILDER_EDIT_MODE:\n return action.payload.editMode\n\n default:\n return state\n }\n}\n","import { CopyContext } from '../state/react-page'\nimport { ColorData } from './types'\n\nexport type ColorControlData = ColorData\n\nexport const ColorControlType = 'makeswift::controls::color'\n\ntype ColorControlConfig = {\n label?: string\n labelOrientation?: 'horizontal' | 'vertical'\n defaultValue?: string\n hideAlpha?: boolean\n}\n\nexport type ColorControlDefinition<C extends ColorControlConfig = ColorControlConfig> = {\n type: typeof ColorControlType\n config: C\n}\n\nexport function Color<C extends ColorControlConfig>(config = {} as C): ColorControlDefinition<C> {\n return { type: ColorControlType, config }\n}\n\nexport function copyColorData(\n value: ColorData | undefined,\n context: CopyContext,\n): ColorData | undefined {\n if (value == null) return value\n\n return {\n ...value,\n swatchId: context.replacementContext.swatchIds.get(value.swatchId) ?? value.swatchId,\n }\n}\n","import { CopyContext, ReplacementContext } from '../state/react-page'\n\nexport type ImageControlData = string\n\nexport const ImageControlType = 'makeswift::controls::image'\n\nexport const ImageControlValueFormat = {\n URL: 'makeswift::controls::image::format::url',\n WithDimensions: 'makeswift::controls::image::format::with-dimensions',\n} as const\n\ntype ImageControlValueFormat = typeof ImageControlValueFormat[keyof typeof ImageControlValueFormat]\n\ntype ImageControlConfig = { label?: string; format?: ImageControlValueFormat }\n\nexport type ImageControlDefinition<T extends ImageControlConfig = ImageControlConfig> = {\n type: typeof ImageControlType\n config: T\n}\n\nexport function Image<T extends ImageControlConfig>(\n config: T = {} as T,\n): ImageControlDefinition<T> {\n return { type: ImageControlType, config }\n}\n\nImage.Format = ImageControlValueFormat\n\nexport function copyImageData(\n value: ImageControlData | undefined,\n context: CopyContext,\n): ImageControlData | undefined {\n if (value == null) return value\n\n return context.replacementContext.fileIds.get(value) ?? value\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('image copy', () => {\n test('image is replaced by a one in replacement context', () => {\n // Arrange\n const data: ImageControlData = 'file-id'\n const expected = 'testing'\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n fileIds: new Map([['file-id', 'testing']]),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copyImageData(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext, ReplacementContext } from '../state/react-page'\n\ntype OpenPageLink = {\n type: 'OPEN_PAGE'\n payload: { pageId: string | null | undefined; openInNewTab: boolean }\n}\n\ntype OpenURLLink = { type: 'OPEN_URL'; payload: { url: string; openInNewTab: boolean } }\n\ntype SendEmailLink = {\n type: 'SEND_EMAIL'\n payload: { to: string; subject?: string; body?: string }\n}\n\ntype CallPhoneLink = { type: 'CALL_PHONE'; payload: { phoneNumber: string } }\n\ntype ScrollToElementLink = {\n type: 'SCROLL_TO_ELEMENT'\n payload: {\n elementIdConfig: { elementKey: string; propName: string } | null | undefined\n block: 'start' | 'center' | 'end'\n }\n}\n\nexport type LinkControlData =\n | OpenPageLink\n | OpenURLLink\n | SendEmailLink\n | CallPhoneLink\n | ScrollToElementLink\n\nexport const LinkControlType = 'makeswift::controls::link'\n\ntype LinkControlConfig = {\n label?: string\n}\n\nexport type LinkControlDefinition<C extends LinkControlConfig = LinkControlConfig> = {\n type: typeof LinkControlType\n config: C\n}\n\nexport function Link<C extends LinkControlConfig>(config: C = {} as C): LinkControlDefinition<C> {\n return { type: LinkControlType, config }\n}\n\nexport function copyLinkData(\n value: LinkControlData | undefined,\n context: CopyContext,\n): LinkControlData | undefined {\n if (value == null) return value\n\n if (value.type === 'OPEN_PAGE') {\n const pageId = value.payload.pageId\n\n if (pageId != null) {\n return {\n ...value,\n payload: {\n ...value.payload,\n pageId: context.replacementContext.pageIds.get(pageId) ?? pageId,\n },\n }\n }\n }\n\n return value\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('link', () => {\n test('page id is replaced by one in replacement context', () => {\n // Arrange\n const data: LinkControlData = {\n type: 'OPEN_PAGE',\n payload: {\n pageId: 'UGFnZTpmNTdmMjQ2MS0wMGY3LTQzZWUtYmIwOS03ODdiNTUyYzUyYWQ=',\n openInNewTab: false,\n },\n }\n const expected = JSON.parse(\n JSON.stringify(data).replace(\n 'UGFnZTpmNTdmMjQ2MS0wMGY3LTQzZWUtYmIwOS03ODdiNTUyYzUyYWQ=',\n 'testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n pageIds: new Map([['UGFnZTpmNTdmMjQ2MS0wMGY3LTQzZWUtYmIwOS03ODdiNTUyYzUyYWQ=', 'testing']]),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n fileIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copyLinkData(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { Editor, Transforms } from 'slate'\nimport { Descriptor, RichTextDescriptor, TableFormFieldsDescriptor, Types } from './descriptors'\nimport { BuilderEditMode } from '../state/modules/builder-edit-mode'\nimport { BoxModel } from '../state/modules/box-models'\nimport {\n ListControl,\n ListControlMessage,\n ListControlType,\n RichTextControl,\n RichTextControlMessage,\n RichTextControlType,\n ShapeControl,\n ShapeControlMessage,\n ShapeControlType,\n richTextDAOToDTO,\n RichTextDTO,\n SlotControl,\n SlotControlMessage,\n SlotControlType,\n StyleControl,\n StyleControlType,\n StyleControlMessage,\n} from '../controls'\nimport { ReactEditor } from 'slate-react'\n\nexport const RichTextPropControllerMessageType = {\n CHANGE_BUILDER_EDIT_MODE: 'CHANGE_BUILDER_EDIT_MODE',\n INITIALIZE_EDITOR: 'INITIALIZE_EDITOR',\n CHANGE_EDITOR_VALUE: 'CHANGE_EDITOR_VALUE',\n FOCUS: 'FOCUS',\n BLUR: 'BLUR',\n UNDO: 'UNDO',\n REDO: 'REDO',\n CHANGE_BOX_MODEL: 'CHANGE_BOX_MODEL',\n} as const\n\ntype ChangeBuilderEditModeRichTextPropControllerMessage = {\n type: typeof RichTextPropControllerMessageType.CHANGE_BUILDER_EDIT_MODE\n editMode: BuilderEditMode\n}\n\ntype InitializeEditorRichTextPropControllerMessage = {\n type: typeof RichTextPropControllerMessageType.INITIALIZE_EDITOR\n value: RichTextDTO\n}\n\ntype ChangeEditorValueRichTextPropControllerMessage = {\n type: typeof RichTextPropControllerMessageType.CHANGE_EDITOR_VALUE\n value: RichTextDTO\n}\n\ntype FocusRichTextPropControllerMessage = { type: typeof RichTextPropControllerMessageType.FOCUS }\n\ntype BlurRichTextPropControllerMessage = { type: typeof RichTextPropControllerMessageType.BLUR }\n\ntype UndoRichTextPropControllerMessage = { type: typeof RichTextPropControllerMessageType.UNDO }\n\ntype RedoRichTextPropControllerMessage = { type: typeof RichTextPropControllerMessageType.REDO }\n\ntype ChangeBoxModelRichTextPropControllerMessage = {\n type: typeof RichTextPropControllerMessageType.CHANGE_BOX_MODEL\n payload: { boxModel: BoxModel | null }\n}\n\nexport type RichTextPropControllerMessage =\n | ChangeBuilderEditModeRichTextPropControllerMessage\n | InitializeEditorRichTextPropControllerMessage\n | ChangeEditorValueRichTextPropControllerMessage\n | FocusRichTextPropControllerMessage\n | BlurRichTextPropControllerMessage\n | UndoRichTextPropControllerMessage\n | RedoRichTextPropControllerMessage\n | ChangeBoxModelRichTextPropControllerMessage\n\nexport type PropControllerMessage =\n | RichTextPropControllerMessage\n | TableFormFieldsMessage\n | SlotControlMessage\n | RichTextControlMessage\n | ListControlMessage\n | ShapeControlMessage\n | StyleControlMessage\n\nexport type Send<T = PropControllerMessage> = (message: T) => void\n\nexport abstract class PropController<T = PropControllerMessage> {\n protected send: Send<T>\n\n constructor(send: Send<T>) {\n this.send = send\n }\n\n abstract recv(message: T): void\n}\n\nclass DefaultPropController extends PropController {\n recv = (_message: PropControllerMessage) => {\n // Do nothing.\n }\n}\n\nclass RichTextPropController extends PropController<RichTextPropControllerMessage> {\n private editor: Editor | null = null\n\n recv = (message: RichTextPropControllerMessage) => {\n if (!this.editor) return\n switch (message.type) {\n case RichTextPropControllerMessageType.CHANGE_BUILDER_EDIT_MODE: {\n switch (message.editMode) {\n case BuilderEditMode.BUILD:\n case BuilderEditMode.INTERACT:\n ReactEditor.deselect(this.editor)\n ReactEditor.blur(this.editor)\n }\n break\n }\n case RichTextPropControllerMessageType.FOCUS: {\n ReactEditor.focus(this.editor)\n Transforms.select(this.editor, {\n anchor: Editor.start(this.editor, []),\n focus: Editor.end(this.editor, []),\n })\n break\n }\n }\n }\n\n setSlateEditor(editor: Editor) {\n this.editor = editor\n\n this.send({\n type: RichTextPropControllerMessageType.INITIALIZE_EDITOR,\n value: richTextDAOToDTO(editor.children, editor.selection),\n })\n\n const _onChange = editor.onChange\n this.editor.onChange = options => {\n _onChange(options)\n\n // if onChange is local then it will include an operation(s)\n // that is the only case in which we want to push updates\n // this prevent infinite loops that can occur when collaborating\n if (options?.operation != null) {\n this.send({\n type: RichTextPropControllerMessageType.CHANGE_EDITOR_VALUE,\n value: richTextDAOToDTO(editor.children, editor.selection),\n })\n }\n }\n }\n\n focus() {\n this.send({ type: RichTextPropControllerMessageType.FOCUS })\n }\n\n blur() {\n this.send({ type: RichTextPropControllerMessageType.BLUR })\n }\n\n undo() {\n this.send({ type: RichTextPropControllerMessageType.UNDO })\n }\n\n redo() {\n this.send({ type: RichTextPropControllerMessageType.REDO })\n }\n\n changeBoxModel(boxModel: BoxModel | null): void {\n this.send({ type: RichTextPropControllerMessageType.CHANGE_BOX_MODEL, payload: { boxModel } })\n }\n}\n\nexport const TableFormFieldsMessageType = {\n TABLE_FORM_LAYOUT_CHANGE: 'TABLE_FORM_LAYOUT_CHANGE',\n TABLE_FORM_FIELD_LAYOUT_CHANGE: 'TABLE_FORM_FIELD_LAYOUT_CHANGE',\n} as const\n\ntype TableLayoutTableFormFieldsMessage = {\n type: typeof TableFormFieldsMessageType.TABLE_FORM_LAYOUT_CHANGE\n payload: { layout: BoxModel }\n}\n\ntype TableFieldLayoutTableFormFieldsMessage = {\n type: typeof TableFormFieldsMessageType.TABLE_FORM_FIELD_LAYOUT_CHANGE\n payload: { layout: BoxModel; index: number }\n}\n\nexport type TableFormFieldsMessage =\n | TableLayoutTableFormFieldsMessage\n | TableFieldLayoutTableFormFieldsMessage\n\nexport class TableFormFieldsPropController extends PropController<TableFormFieldsMessage> {\n recv = () => {}\n\n tableFormLayoutChange(payload: { layout: BoxModel }) {\n this.send({ type: TableFormFieldsMessageType.TABLE_FORM_LAYOUT_CHANGE, payload })\n }\n\n tableFormFieldLayoutChange(payload: { layout: BoxModel; index: number }) {\n this.send({ type: TableFormFieldsMessageType.TABLE_FORM_FIELD_LAYOUT_CHANGE, payload })\n }\n}\n\ntype DescriptorPropController<T extends Descriptor> = T extends { type: typeof Types.RichText }\n ? RichTextPropController\n : T extends { type: typeof RichTextControlType }\n ? RichTextControl\n : T extends { type: typeof Types.TableFormFields }\n ? TableFormFieldsPropController\n : DefaultPropController\n\nexport type DescriptorsPropControllers<T extends Record<string, Descriptor>> = {\n [K in keyof T]: undefined extends T[K]\n ? DescriptorPropController<Exclude<T[K], undefined>>\n : DescriptorPropController<T[K]>\n}\n\nexport type AnyPropController =\n | DefaultPropController\n | RichTextPropController\n | TableFormFieldsPropController\n | SlotControl\n | RichTextControl\n | ListControl\n | ShapeControl\n | StyleControl\n\nexport function createPropController(\n descriptor: RichTextDescriptor,\n send: Send<RichTextPropControllerMessage>,\n): RichTextPropController\nexport function createPropController(\n descriptor: TableFormFieldsDescriptor,\n send: Send<TableFormFieldsMessage>,\n): TableFormFieldsPropController\nexport function createPropController(descriptor: Descriptor, send: Send): DefaultPropController\nexport function createPropController<T extends PropControllerMessage>(\n descriptor: Descriptor,\n send: Send<T>,\n): AnyPropController {\n switch (descriptor.type) {\n case Types.RichText:\n return new RichTextPropController(send as Send<RichTextPropControllerMessage>)\n\n case Types.TableFormFields:\n return new TableFormFieldsPropController(send as Send<TableFormFieldsMessage>)\n\n case SlotControlType:\n return new SlotControl(send as Send<SlotControlMessage>)\n\n case RichTextControlType:\n return new RichTextControl(send as Send<RichTextControlMessage>)\n\n case ListControlType:\n return new ListControl(send as Send<ListControlMessage>, descriptor)\n\n case ShapeControlType:\n return new ShapeControl(send as Send<ShapeControlMessage>, descriptor)\n\n case StyleControlType:\n return new StyleControl(send as Send<StyleControlMessage>)\n\n default:\n return new DefaultPropController(send as Send)\n }\n}\n","import {\n AnyPropController,\n createPropController,\n PropController,\n PropControllerMessage,\n Send,\n} from '../prop-controllers/instances'\nimport { CopyContext } from '../state/react-page'\nimport { ControlDefinition, ControlDefinitionData } from './control'\n\nimport { copy as controlCopy } from './control'\n\nexport const ListControlType = 'makeswift::controls::list'\n\ntype ListControlConfig<T extends ControlDefinition = ControlDefinition> = {\n type: T\n label?: string\n /**\n * @todos\n * - Make `item` the control's transformed \"value\" instead of \"data.\"\n */\n getItemLabel?(item: ControlDefinitionData<T> | undefined): string\n}\n\nexport type ListControlDefinition<C extends ListControlConfig = ListControlConfig> = {\n type: typeof ListControlType\n config: C\n}\n\nexport function List<T extends ControlDefinition, C extends ListControlConfig<T>>(\n config: C & { type: T },\n): ListControlDefinition<C> {\n return { type: ListControlType, config }\n}\n\nexport type ListControlItemData<T extends ListControlDefinition> = {\n id: string\n type: T['config']['type']['type']\n value: ControlDefinitionData<T['config']['type']>\n}\n\nexport const ListControlMessageType = {\n LIST_CONTROL_ITEM_CONTROL_MESSAGE: 'makeswift::controls::list::message::item-control-message',\n} as const\n\ntype ListControlItemControlMessage = {\n type: typeof ListControlMessageType.LIST_CONTROL_ITEM_CONTROL_MESSAGE\n payload: { message: PropControllerMessage; itemId: string }\n}\n\nexport type ListControlMessage = ListControlItemControlMessage\n\nexport class ListControl<\n T extends ListControlDefinition = ListControlDefinition,\n> extends PropController<ListControlMessage> {\n controls: Map<string, AnyPropController>\n descriptor: ListControlDefinition\n send: Send<ListControlMessage>\n\n constructor(send: Send<ListControlMessage>, descriptor: T) {\n super(send)\n\n this.descriptor = descriptor\n this.send = send\n\n this.controls = new Map<string, AnyPropController>()\n }\n\n setItemsControl = (value: ListControlData<T> | undefined) => {\n const controls = new Map<string, AnyPropController>()\n\n if (value == null) return\n\n const shouldUpdate = () => {\n // If the length is different, should update\n if (value.length !== this.controls.size) return true\n // If this.controls does not have an itemId, should update\n if (!value.every(({ id }) => this.controls.has(id))) return true\n\n return false\n }\n\n if (!shouldUpdate()) return this.controls\n\n value.forEach(item => {\n const control = createPropController(this.descriptor.config.type, message =>\n this.send({\n type: ListControlMessageType.LIST_CONTROL_ITEM_CONTROL_MESSAGE,\n payload: { message, itemId: item.id },\n }),\n )\n\n controls.set(item.id, control)\n })\n\n this.controls = controls\n\n return this.controls\n }\n\n recv = (message: ListControlMessage) => {\n switch (message.type) {\n case ListControlMessageType.LIST_CONTROL_ITEM_CONTROL_MESSAGE: {\n const control = this.controls.get(message.payload.itemId)\n\n if (control == null) return\n\n // TODO: We're casting the type here as the arg0 type for control.recv is never\n const recv = control.recv as (arg0: PropControllerMessage) => void\n\n recv(message.payload.message)\n }\n }\n }\n}\n\nexport type ListControlData<T extends ListControlDefinition = ListControlDefinition> =\n ListControlItemData<T>[]\n\nexport function copyListData(\n definition: ListControlDefinition,\n value: ListControlData | undefined,\n context: CopyContext,\n): ListControlData | undefined {\n if (value == null) return value\n\n return (\n value &&\n value.map(item => ({\n ...item,\n value: controlCopy(definition.config.type, item.value, context),\n }))\n )\n}\n","import { PropControllerMessage } from '../prop-controllers'\nimport {\n AnyPropController,\n createPropController,\n PropController,\n Send,\n} from '../prop-controllers/instances'\nimport { CopyContext } from '../state/react-page'\nimport { ControlDefinition, ControlDefinitionData } from './control'\n\nimport { copy as controlCopy } from './control'\n\nexport const ShapeControlType = 'makeswift::controls::shape'\n\ntype ShapeControlConfig = {\n type: Record<string, ControlDefinition>\n}\n\nexport type ShapeControlDefinition<C extends ShapeControlConfig = ShapeControlConfig> = {\n type: typeof ShapeControlType\n config: C\n}\n\nexport function Shape<C extends ShapeControlConfig>(config: C): ShapeControlDefinition<C> {\n return { type: ShapeControlType, config }\n}\n\nexport type ShapeControlData<T extends ShapeControlDefinition = ShapeControlDefinition> = {\n [K in keyof T['config']['type']]?: ControlDefinitionData<T['config']['type'][K]>\n}\n\nexport const ShapeControlMessageType = {\n SHAPE_CONTROL_CHILD_CONTROL_MESSAGE: 'makeswift::controls::shape::message::child-control-message',\n} as const\n\ntype ShapeControlChildControlMessage = {\n type: typeof ShapeControlMessageType.SHAPE_CONTROL_CHILD_CONTROL_MESSAGE\n payload: { message: PropControllerMessage; key: string }\n}\n\nexport type ShapeControlMessage = ShapeControlChildControlMessage\n\nexport class ShapeControl<\n T extends ShapeControlDefinition = ShapeControlDefinition,\n> extends PropController<ShapeControlMessage> {\n controls: Map<string, AnyPropController>\n descriptor: ShapeControlDefinition\n send: Send<ShapeControlMessage>\n\n constructor(send: Send<ShapeControlMessage>, descriptor: T) {\n super(send)\n\n this.descriptor = descriptor\n this.send = send\n\n this.controls = new Map<string, AnyPropController>()\n this.setControls()\n }\n\n setControls = () => {\n const controls = new Map<string, AnyPropController>()\n const children = this.descriptor.config.type\n\n Object.keys(children).forEach(key => {\n const control = createPropController(children[key], message =>\n this.send({\n type: ShapeControlMessageType.SHAPE_CONTROL_CHILD_CONTROL_MESSAGE,\n payload: { message, key },\n }),\n )\n\n controls.set(key, control)\n })\n\n this.controls = controls\n\n return this.controls\n }\n\n recv = (message: ShapeControlMessage) => {\n switch (message.type) {\n case ShapeControlMessageType.SHAPE_CONTROL_CHILD_CONTROL_MESSAGE: {\n const control = this.controls.get(message.payload.key)\n\n if (control == null) return\n\n // TODO: We're casting the type here as the arg0 type for control.recv is never\n const recv = control.recv as (arg0: PropControllerMessage) => void\n\n recv(message.payload.message)\n }\n }\n }\n}\n\nexport function copyShapeData(\n definition: ShapeControlDefinition,\n value: ShapeControlData | undefined,\n context: CopyContext,\n): ShapeControlData | undefined {\n if (value == null) return value\n\n const newValue: ShapeControlData = {}\n\n for (const [key, itemDefinition] of Object.entries(definition.config.type)) {\n const prop = value[key]\n\n newValue[key] = controlCopy(itemDefinition, prop, context)\n }\n\n return newValue\n}\n","import { BorderRadiusPropertyData } from '../css/border-radius'\nimport type { LengthPercentageData } from '../css/length-percentage'\nimport { MarginPropertyData } from '../css/margin'\nimport { PaddingPropertyData } from '../css/padding'\nimport { ColorData, ResponsiveValue } from './types'\nimport { CopyContext, ReplacementContext } from '../state/react-page'\nimport { copyColorData } from './color'\nimport { PropController, Send } from '../prop-controllers/instances'\nimport { BoxModel } from '../state/modules/box-models'\n\n/** @see https://developer.mozilla.org/en-US/docs/Web/CSS/width */\nexport type WidthPropertyData = LengthPercentageData\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-style\n */\ntype BorderStyle = 'dotted' | 'dashed' | 'solid'\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-top#constituent_properties\n *\n * @todos\n * - Change `width` to be a `Length`\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderSideShorthandPropertyData = {\n width: number | null | undefined\n style: BorderStyle\n color?: ColorData | null\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border\n *\n * @todos\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderPropertyData = {\n borderTop: BorderSideShorthandPropertyData | null | undefined\n borderRight: BorderSideShorthandPropertyData | null | undefined\n borderBottom: BorderSideShorthandPropertyData | null | undefined\n borderLeft: BorderSideShorthandPropertyData | null | undefined\n}\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-family\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontFamilyPropertyData = string | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type LetterSpacingPropertyData = number | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-size\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontSizePropertyData =\n | {\n value: number\n unit: 'px'\n }\n | null\n | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type FontWeightPropertyData = number | null | undefined\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform\n *\n * @todos\n * - Match the type with specification\n */\nexport type TextTransformPropertyData = 'uppercase'[]\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/CSS/font-style\n *\n * @todos\n * - Match the type with specification\n */\nexport type FontStylePropertyData = 'italic'[]\n\n/**\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type TextStylePropertyData = {\n fontFamily?: FontFamilyPropertyData | null | undefined\n letterSpacing: LetterSpacingPropertyData | null | undefined\n fontSize: FontSizePropertyData | null | undefined\n fontWeight: FontWeightPropertyData | null | undefined\n textTransform: TextTransformPropertyData\n fontStyle: FontStylePropertyData\n}\n\n/**\n * Primitives like `string` and `number` are excluded from the style data because the relevant\n * panels from the Makeswift builder were originally implemented only to support object values, and\n * not CSS strings. For example, 100 pixels would be `{ value: 100, unit: 'px' }` but never `100` or\n * `'100px'`.\n */\nexport type StyleControlData = {\n width?: ResponsiveValue<Exclude<WidthPropertyData, string | number>>\n margin?: ResponsiveValue<{\n [K in keyof MarginPropertyData]: Exclude<MarginPropertyData[K], string | number> | 'auto'\n }>\n padding?: ResponsiveValue<{\n [K in keyof PaddingPropertyData]: Exclude<PaddingPropertyData[K], string | number>\n }>\n border?: ResponsiveValue<BorderPropertyData>\n borderRadius?: ResponsiveValue<{\n [K in keyof BorderRadiusPropertyData]: Exclude<BorderRadiusPropertyData[K], string | number>\n }>\n textStyle?: ResponsiveValue<TextStylePropertyData>\n}\n\nexport const StyleControlType = 'makeswift::controls::style'\n\nexport const StyleControlProperty = {\n Width: 'makeswift::controls::style::property::width',\n Margin: 'makeswift::controls::style::property::margin',\n Padding: 'makeswift::controls::style::property::padding',\n Border: 'makeswift::controls::style::property::border',\n BorderRadius: 'makeswift::controls::style::property::border-radius',\n TextStyle: 'makeswift::controls::style::property::text-style',\n} as const\n\nexport type StyleControlProperty = typeof StyleControlProperty[keyof typeof StyleControlProperty]\n\ntype StyleControlParams = { properties?: StyleControlProperty[] }\n\nexport type StyleControlConfig = { properties: StyleControlProperty[] }\n\nconst StyleControlDefaultProperties: StyleControlProperty[] = [\n StyleControlProperty.Width,\n StyleControlProperty.Margin,\n]\n\nconst AllStyleControlProperties: StyleControlProperty[] = [\n StyleControlProperty.Width,\n StyleControlProperty.Margin,\n StyleControlProperty.Padding,\n StyleControlProperty.Border,\n StyleControlProperty.BorderRadius,\n StyleControlProperty.TextStyle,\n]\n\nexport type StyleControlDefinition = {\n type: typeof StyleControlType\n config: StyleControlConfig\n}\n\n/**\n * @todos\n * - Add support for custom panel labels.\n * - Add support for default values. Internally, default values must be represented with the same\n * format as the underlying data so that controls can show these values.\n */\nexport function Style(params?: StyleControlParams): StyleControlDefinition {\n return {\n type: StyleControlType,\n config: { properties: params?.properties ?? StyleControlDefaultProperties },\n }\n}\n\nStyle.Default = StyleControlDefaultProperties\nStyle.All = AllStyleControlProperties\n\nStyle.Width = StyleControlProperty.Width\nStyle.Margin = StyleControlProperty.Margin\nStyle.Padding = StyleControlProperty.Padding\nStyle.Border = StyleControlProperty.Border\nStyle.BorderRadius = StyleControlProperty.BorderRadius\nStyle.TextStyle = StyleControlProperty.TextStyle\n\nexport const StyleControlMessageType = {\n CHANGE_BOX_MODEL: 'makeswift::controls::style::message::change-box-model',\n} as const\n\ntype StyleControlItemBoxModelChangeMessage = {\n type: typeof StyleControlMessageType.CHANGE_BOX_MODEL\n payload: { boxModel: BoxModel | null }\n}\n\nexport type StyleControlMessage = StyleControlItemBoxModelChangeMessage\n\nexport class StyleControl extends PropController<StyleControlMessage> {\n constructor(send: Send<StyleControlMessage>) {\n super(send)\n }\n\n changeBoxModel(boxModel: BoxModel | null): void {\n this.send({ type: StyleControlMessageType.CHANGE_BOX_MODEL, payload: { boxModel } })\n }\n\n recv() {}\n}\n\nexport function copyStyleData(\n value: StyleControlData | undefined,\n context: CopyContext,\n): StyleControlData | undefined {\n if (value == null) return value\n\n function copyResponsiveBorder(\n responsiveBorder: ResponsiveValue<BorderPropertyData> | undefined,\n ): ResponsiveValue<BorderPropertyData> | undefined {\n if (responsiveBorder == null) return undefined\n return responsiveBorder.map(deviceBorder => ({\n ...deviceBorder,\n value: copyBorder(deviceBorder.value),\n }))\n }\n\n function copyBorder(border: BorderPropertyData): BorderPropertyData {\n function copyBorderSide(side: BorderSideShorthandPropertyData | null | undefined) {\n if (side == null) return null\n\n if (side.color == null) return side\n\n return {\n ...side,\n color: copyColorData(side.color, context),\n }\n }\n\n return {\n borderTop: copyBorderSide(border.borderTop),\n borderBottom: copyBorderSide(border.borderBottom),\n borderRight: copyBorderSide(border.borderRight),\n borderLeft: copyBorderSide(border.borderLeft),\n }\n }\n\n return { ...value, border: copyResponsiveBorder(value.border) }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('style copy', () => {\n test('colors are replaced', () => {\n // Arrange\n const value: StyleControlData = {\n width: [\n {\n value: {\n unit: 'px',\n value: 100,\n },\n deviceId: 'desktop',\n },\n ],\n border: [\n {\n value: {\n borderTop: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJjMDkwZWJjLTZkZDUtNDY1NS1hMDY0LTg3ZDAxM2U4YTFhNA==',\n },\n style: 'solid',\n width: 9,\n },\n borderLeft: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJjMDkwZWJjLTZkZDUtNDY1NS1hMDY0LTg3ZDAxM2U4YTFhNA==',\n },\n style: 'solid',\n width: 9,\n },\n borderRight: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJjMDkwZWJjLTZkZDUtNDY1NS1hMDY0LTg3ZDAxM2U4YTFhNA==',\n },\n style: 'solid',\n width: 9,\n },\n borderBottom: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOmJjMDkwZWJjLTZkZDUtNDY1NS1hMDY0LTg3ZDAxM2U4YTFhNA==',\n },\n style: 'solid',\n width: 9,\n },\n },\n deviceId: 'desktop',\n },\n ],\n textStyle: [\n {\n value: {\n fontSize: {\n unit: 'px',\n value: 46,\n },\n fontStyle: [],\n fontFamily: 'Oswald',\n fontWeight: 400,\n letterSpacing: 5.2,\n textTransform: [],\n },\n deviceId: 'desktop',\n },\n ],\n borderRadius: [\n {\n value: {\n borderTopLeftRadius: {\n unit: 'px',\n value: 4,\n },\n borderTopRightRadius: {\n unit: 'px',\n value: 4,\n },\n borderBottomLeftRadius: {\n unit: 'px',\n value: 4,\n },\n borderBottomRightRadius: {\n unit: 'px',\n value: 4,\n },\n },\n deviceId: 'desktop',\n },\n ],\n }\n const expected = JSON.parse(\n JSON.stringify(value).replaceAll(\n 'U3dhdGNoOmJjMDkwZWJjLTZkZDUtNDY1NS1hMDY0LTg3ZDAxM2U4YTFhNA==',\n 'testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map([\n ['U3dhdGNoOmJjMDkwZWJjLTZkZDUtNDY1NS1hMDY0LTg3ZDAxM2U4YTFhNA==', 'testing'],\n ]),\n fileIds: new Map(),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copyStyleData(value, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { PropController } from '../prop-controllers/instances'\nimport { BoxModel } from '../state/modules/box-models'\nimport { CopyContext, Element } from '../state/react-page'\nimport { ResponsiveValue } from './types'\n\ntype SlotControlColumnData = { count: number; spans: number[][] }\n\nexport type SlotControlData = {\n elements: Element[]\n columns: ResponsiveValue<SlotControlColumnData>\n}\n\nexport const SlotControlType = 'makeswift::controls::slot'\n\nexport type SlotControlDefinition = {\n type: typeof SlotControlType\n}\n\nexport function Slot(): SlotControlDefinition {\n return { type: SlotControlType }\n}\n\nexport const SlotControlMessageType = {\n CONTAINER_BOX_MODEL_CHANGE: 'makeswift::controls::slot::message::container-box-model-change',\n ITEM_BOX_MODEL_CHANGE: 'makeswift::controls::slot::message::item-box-model-change',\n} as const\n\ntype SlotControlContainerBoxModelChangeMessage = {\n type: typeof SlotControlMessageType.CONTAINER_BOX_MODEL_CHANGE\n payload: { boxModel: BoxModel | null }\n}\n\ntype SlotControlItemBoxModelChangeMessage = {\n type: typeof SlotControlMessageType.ITEM_BOX_MODEL_CHANGE\n payload: { index: number; boxModel: BoxModel | null }\n}\n\nexport type SlotControlMessage =\n | SlotControlContainerBoxModelChangeMessage\n | SlotControlItemBoxModelChangeMessage\n\nexport class SlotControl extends PropController<SlotControlMessage> {\n recv = () => {}\n\n changeContainerBoxModel(boxModel: BoxModel | null): void {\n this.send({ type: SlotControlMessageType.CONTAINER_BOX_MODEL_CHANGE, payload: { boxModel } })\n }\n\n changeItemBoxModel(index: number, boxModel: BoxModel | null): void {\n this.send({ type: SlotControlMessageType.ITEM_BOX_MODEL_CHANGE, payload: { index, boxModel } })\n }\n}\n\nexport function copySlotData(\n value: SlotControlData | undefined,\n context: CopyContext,\n): SlotControlData | undefined {\n if (value == null) return value\n\n return {\n ...value,\n elements: value.elements.map(element => context.copyElement(element)),\n }\n}\n","import { CopyContext } from '../../state/react-page'\nimport { BackgroundsValue } from '../descriptors'\n\nexport function copy(\n value: BackgroundsValue | undefined,\n context: CopyContext,\n): BackgroundsValue | undefined {\n if (value == null) return value\n\n return value.map(override => ({\n ...override,\n value: override.value.map(backgroundItem => {\n switch (backgroundItem.type) {\n case 'color':\n return {\n ...backgroundItem,\n payload:\n backgroundItem.payload === null\n ? null\n : {\n ...backgroundItem.payload,\n swatchId:\n context.replacementContext.swatchIds.get(backgroundItem.payload.swatchId) ??\n backgroundItem.payload.swatchId,\n },\n }\n\n case 'gradient':\n return {\n ...backgroundItem,\n payload: {\n ...backgroundItem.payload,\n stops: backgroundItem.payload.stops.map(stop => ({\n ...stop,\n color:\n stop.color == null\n ? null\n : {\n ...stop.color,\n swatchId:\n context.replacementContext.swatchIds.get(stop.color.swatchId) ??\n stop.color.swatchId,\n },\n })),\n },\n }\n\n case 'image':\n return {\n ...backgroundItem,\n payload: {\n ...backgroundItem.payload,\n imageId:\n context.replacementContext.fileIds.get(backgroundItem.payload.imageId) ??\n backgroundItem.payload.imageId,\n },\n }\n\n default:\n return backgroundItem\n }\n }),\n }))\n}\n","import { CopyContext, Data } from '../../state/react-page'\nimport { GridValue } from '../descriptors'\n\nexport function copy(value: GridValue | undefined, context: CopyContext): Data | undefined {\n if (value == null) return undefined\n\n return {\n ...value,\n elements: value.elements.map(element => context.copyElement(element)),\n }\n}\n","import { CopyContext } from '../../state/react-page'\nimport { LinkValue } from '../descriptors'\n\nexport function copy(value: LinkValue | undefined, context: CopyContext): LinkValue | undefined {\n if (value == null) return value\n\n switch (value.type) {\n case 'OPEN_PAGE': {\n const pageId = value.payload.pageId\n\n if (pageId == null) return value\n\n return {\n ...value,\n payload: {\n ...value.payload,\n pageId: context.replacementContext.pageIds.get(pageId) ?? pageId,\n },\n }\n }\n\n case 'SCROLL_TO_ELEMENT': {\n const elementIdConfig = value.payload.elementIdConfig\n\n if (elementIdConfig == null) return value\n\n return {\n ...value,\n payload: {\n ...value.payload,\n elementIdConfig: {\n ...elementIdConfig,\n elementKey:\n context.replacementContext.elementKeys.get(elementIdConfig.elementKey) ??\n elementIdConfig.elementKey,\n },\n },\n }\n }\n\n default:\n return value\n }\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { copy as linkCopy } from './link'\nimport { NavigationLinksValue } from '../descriptors'\n\nexport function copy(\n value: NavigationLinksValue | undefined,\n context: CopyContext,\n): NavigationLinksValue | undefined {\n if (value == null) return value\n\n return value.map(copyNavigationLinksPanelItem)\n\n function copyNavigationLinksPanelItem(item: any): any {\n switch (item.type) {\n case 'button':\n case 'dropdown': {\n const { color, link } = item.payload\n\n return {\n ...item,\n payload: {\n ...item.payload,\n link: link != null ? linkCopy(link, context) : undefined,\n color:\n color != null\n ? color.map((override: { value: { swatchId: string } }) => ({\n ...override,\n value: {\n ...override.value,\n swatchId:\n context.replacementContext.swatchIds.get(override.value.swatchId) ??\n override.value.swatchId,\n },\n }))\n : undefined,\n },\n }\n }\n\n default:\n return item\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('navigation-links copy', () => {\n test('replace page id from replacement context', () => {\n // Arrange\n const data: NavigationLinksValue = [\n {\n id: 'e1cf2d04-012a-4481-832a-7b4dda62195e',\n type: 'button',\n payload: {\n link: {\n type: 'OPEN_PAGE',\n payload: {\n pageId: 'UGFnZTo2OGMzODZhNC1jYzRkLTQzMzUtYWZiMi05MDdhZGRkYzQ3YTM=',\n openInNewTab: true,\n },\n },\n label: 'Fellow Page',\n },\n },\n ]\n const expected = JSON.parse(\n JSON.stringify(data).replace(\n 'UGFnZTo2OGMzODZhNC1jYzRkLTQzMzUtYWZiMi05MDdhZGRkYzQ3YTM=',\n 'testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n fileIds: new Map(),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map([['UGFnZTo2OGMzODZhNC1jYzRkLTQzMzUtYWZiMi05MDdhZGRkYzQ3YTM=', 'testing']]),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { ShadowsValue } from '../descriptors'\n\nexport function copy(\n value: ShadowsValue | undefined,\n context: CopyContext,\n): ShadowsValue | undefined {\n if (value == null) return value\n\n return value.map(override => ({ ...override, value: override.value.map(copyShadowItem) }))\n\n function copyShadowItem(item: any): any {\n const { color } = item.payload\n\n if (color == null) return item\n\n return {\n ...item,\n payload: {\n ...item.payload,\n color: {\n ...color,\n swatchId: context.replacementContext.swatchIds.get(color.swatchId) ?? color.swatchId,\n },\n },\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('shadow copy', () => {\n test('replaces the swatch id', () => {\n // Arrange\n const data: ShadowsValue = [\n {\n value: [\n {\n id: '8575efe6-4d04-4361-b593-e559537c4c3c',\n payload: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n },\n offsetX: -5,\n offsetY: 8.7,\n blurRadius: 17,\n spreadRadius: 16,\n },\n },\n ],\n deviceId: 'desktop',\n },\n ]\n const expected = JSON.parse(\n JSON.stringify(data).replace(\n 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n 'testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map([\n ['U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==', 'testing'],\n ]),\n fileIds: new Map(),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { ImageValue } from '../descriptors'\n\nexport function copy(value: ImageValue | undefined, context: CopyContext): ImageValue | undefined {\n if (value == null) return value\n\n return context.replacementContext.fileIds.get(value) ?? value\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('image copy', () => {\n test('image is replaced by a one in replacement context', () => {\n // Arrange\n const data: ImageValue = 'file-id'\n const expected = JSON.parse(JSON.stringify(data).replace('file-id', 'testing'))\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n fileIds: new Map([['file-id', 'testing']]),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { ImagesValue } from '../descriptors'\n\nexport function copy(\n value: ImagesValue | undefined,\n context: CopyContext,\n): ImagesValue | undefined {\n if (value == null) return value\n\n return value.map(copyImagesPanelItem)\n\n function copyImagesPanelItem(imagesPanelItem: any): any {\n const { file } = imagesPanelItem.props\n\n if (file == null) return imagesPanelItem\n\n return {\n ...imagesPanelItem,\n props: {\n ...imagesPanelItem.props,\n file: context.replacementContext.fileIds.get(file) ?? file,\n },\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('images copy', () => {\n test('images are replaced by ones in replacement context', () => {\n // Arrange\n const data: ImagesValue = [\n {\n key: '0ae80f8f-9d4a-43bc-ae7c-007164a19d22',\n props: {\n file: 'RmlsZTo5ZmU3ZGUzMi1jY2E0LTRkMjktOWVlMC1jNTI2NDYxY2I1YjM=',\n },\n },\n {\n key: '161674c3-8710-4fd6-90e6-6096c4e9bb88',\n props: {\n file: 'RmlsZTo5ZmU3ZGUzMi1jY2E0LTRkMjktOWVlMC1jNTI2NDYxY2I1YjM=',\n },\n },\n ]\n const expected = JSON.parse(\n JSON.stringify(data).replaceAll(\n 'RmlsZTo5ZmU3ZGUzMi1jY2E0LTRkMjktOWVlMC1jNTI2NDYxY2I1YjM=',\n 'testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n fileIds: new Map([['RmlsZTo5ZmU3ZGUzMi1jY2E0LTRkMjktOWVlMC1jNTI2NDYxY2I1YjM=', 'testing']]),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext } from '../../state/react-page'\nimport { ResponsiveColorValue } from '../descriptors'\n\nexport function copy(\n value: ResponsiveColorValue | undefined,\n context: CopyContext,\n): ResponsiveColorValue | undefined {\n if (value == null) return value\n\n return value.map(override => ({ ...override, value: copyColorValue(override.value) }))\n\n function copyColorValue(colorValue: any): any {\n return {\n ...colorValue,\n swatchId:\n context.replacementContext.swatchIds.get(colorValue.swatchId) ?? colorValue.swatchId,\n }\n }\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { TableFormFieldsValue } from '../descriptors'\n\nexport function copy(\n value: TableFormFieldsValue | undefined,\n context: CopyContext,\n): TableFormFieldsValue | undefined {\n if (value == null) return value\n\n return { ...value, fields: value.fields.map(copyFormFieldsPanelItem) }\n\n function copyFormFieldsPanelItem(item: any): any {\n return {\n ...item,\n tableColumnId:\n context.replacementContext.tableColumnIds.get(item.tableColumnId) ?? item.tableColumnId,\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('table form fields copy', () => {\n test('replaces the table column id', () => {\n // Arrange\n const data: TableFormFieldsValue = {\n grid: [\n {\n value: {\n count: 12,\n spans: [[12], [12]],\n },\n deviceId: 'desktop',\n },\n ],\n fields: [\n {\n id: '8c4b3dcb-d9d2-4199-9a66-c35aa39248f0',\n label: 'hello',\n required: true,\n tableColumnId:\n 'U2luZ2xlTGluZVRleHRUYWJsZUNvbHVtbjphMzQ0Yzk3ZC04MTQ0LTRmMzctYjU2My1hODE5OTQ5OGMyYWI=',\n },\n ],\n }\n const expected = JSON.parse(\n JSON.stringify(data).replace(\n 'U2luZ2xlTGluZVRleHRUYWJsZUNvbHVtbjphMzQ0Yzk3ZC04MTQ0LTRmMzctYjU2My1hODE5OTQ5OGMyYWI=',\n 'testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n fileIds: new Map(),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map([\n [\n 'U2luZ2xlTGluZVRleHRUYWJsZUNvbHVtbjphMzQ0Yzk3ZC04MTQ0LTRmMzctYjU2My1hODE5OTQ5OGMyYWI=',\n 'testing',\n ],\n ]),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { TableValue } from '../descriptors'\n\nexport function copy(value: TableValue | undefined, context: CopyContext): TableValue | undefined {\n if (value == null) return value\n\n return context.replacementContext.tableIds.get(value) ?? value\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('table copy', () => {\n test('replaces the table id', () => {\n // Arrange\n const data: TableValue = 'VGFibGU6MTM5NDhlYzMtMjgwNS00Nzk0LTliNzctNDJkN2RhNmQxZWEy'\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map(),\n fileIds: new Map(),\n typographyIds: new Map(),\n tableIds: new Map([\n ['VGFibGU6MTM5NDhlYzMtMjgwNS00Nzk0LTliNzctNDJkN2RhNmQxZWEy', 'testing'],\n ]),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatch('testing')\n })\n })\n}\n","import { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { BorderValue } from '../descriptors'\n\nexport function copy(\n value: BorderValue | undefined,\n context: CopyContext,\n): BorderValue | undefined {\n if (value == null) return value\n\n return value.map(override => ({ ...override, value: copyBorderValue(override.value) }))\n\n function copyBorderValue({ borderTop, borderRight, borderBottom, borderLeft }: any): any {\n return {\n borderTop: borderTop && copyBorderSide(borderTop),\n borderRight: borderRight && copyBorderSide(borderRight),\n borderBottom: borderBottom && copyBorderSide(borderBottom),\n borderLeft: borderLeft && copyBorderSide(borderLeft),\n }\n }\n\n function copyBorderSide(borderSide: any): any {\n const { color } = borderSide\n\n if (color == null) return borderSide\n\n return {\n ...borderSide,\n color: {\n ...color,\n swatchId: context.replacementContext.swatchIds.get(color.swatchId) ?? color.swatchId,\n },\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n describe.concurrent('border copy', () => {\n test('replaces the swatch id', () => {\n // Arrange\n const data: BorderValue = [\n {\n value: {\n borderTop: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n },\n style: 'solid',\n width: 5,\n },\n borderLeft: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n },\n style: 'solid',\n width: 5,\n },\n borderRight: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n },\n style: 'solid',\n width: 5,\n },\n borderBottom: {\n color: {\n alpha: 1,\n swatchId: 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n },\n style: 'solid',\n width: 5,\n },\n },\n deviceId: 'desktop',\n },\n ]\n const expected: BorderValue = [\n {\n value: {\n borderTop: {\n color: {\n alpha: 1,\n swatchId: 'testing',\n },\n style: 'solid',\n width: 5,\n },\n borderLeft: {\n color: {\n alpha: 1,\n swatchId: 'testing',\n },\n style: 'solid',\n width: 5,\n },\n borderRight: {\n color: {\n alpha: 1,\n swatchId: 'testing',\n },\n style: 'solid',\n width: 5,\n },\n borderBottom: {\n color: {\n alpha: 1,\n swatchId: 'testing',\n },\n style: 'solid',\n width: 5,\n },\n },\n deviceId: 'desktop',\n },\n ]\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map([\n ['U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==', 'testing'],\n ]),\n fileIds: new Map(),\n typographyIds: new Map(),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { NodeJSON, InlineJSON, MarkJSON } from '../../controls'\nimport { CopyContext, ReplacementContext } from '../../state/react-page'\nimport { RichTextValue } from '../descriptors'\n\nexport function copy(\n value: RichTextValue | undefined,\n context: CopyContext,\n): RichTextValue | undefined {\n if (value == null) return value\n\n return { ...value, document: value.document ? copyNode(value.document) : value.document }\n\n function copyNode<T extends NodeJSON>(node: T): T {\n switch (node.object) {\n case 'document':\n case 'block':\n case 'inline':\n // @ts-expect-error: TypeScript can't refine the generic type T, even though it can\n // refine NodeJSON.\n return copyInline(node)\n\n case 'text':\n return { ...node, marks: node.marks?.map(copyMark) }\n\n default:\n return node\n }\n }\n\n function copyInline(inline: InlineJSON): InlineJSON {\n switch (inline.type) {\n case 'link':\n return {\n ...inline,\n nodes: inline.nodes?.map(copyNode),\n data: inline.data ? copyLinkData(inline.data as any) : inline.data,\n }\n\n default:\n return { ...inline, nodes: inline.nodes?.map(copyNode) }\n }\n }\n\n function copyLinkData(data: any): any {\n switch (data.type) {\n case 'OPEN_PAGE': {\n const pageId = data.payload.pageId\n\n if (pageId == null) return data\n\n return {\n ...data,\n payload: {\n ...data.payload,\n pageId: context.replacementContext.pageIds.get(pageId) ?? data.payload.pageId,\n },\n }\n }\n\n case 'SCROLL_TO_ELEMENT': {\n const elementIdConfig = data.payload.elementIdConfig\n\n if (elementIdConfig == null) return data\n\n return {\n ...data,\n payload: {\n ...data.payload,\n elementIdConfig: {\n ...elementIdConfig,\n elementKey:\n context.replacementContext.elementKeys.get(elementIdConfig.elementKey) ??\n elementIdConfig.elementKey,\n },\n },\n }\n }\n\n default:\n return data\n }\n }\n\n function copyMark(mark: MarkJSON): MarkJSON {\n switch (mark.type) {\n case 'typography': {\n const typographyId = mark.data?.value.id\n\n return {\n ...mark,\n data: {\n ...mark.data,\n value: {\n ...mark.data?.value,\n id: context.replacementContext.typographyIds.get(typographyId) ?? typographyId,\n style: mark.data?.value.style.map((override: any) => ({\n ...override,\n value: {\n ...override.value,\n color:\n override.value.color == null\n ? override.value.color\n : {\n ...override.value.color,\n swatchId:\n context.replacementContext.swatchIds.get(\n override.value.color?.swatchId,\n ) ?? override.value.color?.swatchId,\n },\n },\n })),\n },\n },\n }\n }\n\n default:\n return mark\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, test, expect } = import.meta.vitest\n\n describe.concurrent('rich text copy', () => {\n test('replaces the swatch id', () => {\n // Arrange\n const data: RichTextValue = {\n object: 'value',\n document: {\n data: {},\n nodes: [\n {\n data: {},\n type: 'paragraph',\n nodes: [\n {\n text: 'Hello world',\n marks: [\n {\n data: {\n value: {\n id: 'VHlwb2dyYXBoeTo5ODE1NWY0Ni1mNmQzLTQ1M2YtODk5OC02ZWY5NzJhNTBlY2U=',\n style: [\n {\n value: {\n color: {\n alpha: 1,\n swatchId:\n 'U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==',\n },\n fontSize: {\n unit: 'px',\n value: 23,\n },\n lineHeight: 2.5,\n strikethrough: true,\n },\n deviceId: 'desktop',\n },\n ],\n },\n },\n type: 'typography',\n object: 'mark',\n },\n ],\n object: 'text',\n },\n ],\n object: 'block',\n },\n ],\n object: 'document',\n },\n selection: {\n focus: {\n path: [0, 0],\n object: 'point',\n offset: 0,\n },\n anchor: {\n path: [0, 0],\n object: 'point',\n offset: 0,\n },\n object: 'selection',\n isFocused: false,\n },\n }\n const expected = JSON.parse(\n JSON.stringify(data)\n .replace('U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==', 'swatch-testing')\n .replace(\n 'VHlwb2dyYXBoeTo5ODE1NWY0Ni1mNmQzLTQ1M2YtODk5OC02ZWY5NzJhNTBlY2U=',\n 'typography-testing',\n ),\n )\n\n const replacementContext = {\n elementHtmlIds: new Set(),\n elementKeys: new Map(),\n swatchIds: new Map([\n ['U3dhdGNoOjgwMmNmZGMyLTc5ZDgtNDkyNy1hMDUwLWE1NmM1M2EzYzE0Mg==', 'swatch-testing'],\n ]),\n fileIds: new Map(),\n typographyIds: new Map([\n [\n 'VHlwb2dyYXBoeTo5ODE1NWY0Ni1mNmQzLTQ1M2YtODk5OC02ZWY5NzJhNTBlY2U=',\n 'typography-testing',\n ],\n ]),\n tableIds: new Map(),\n tableColumnIds: new Map(),\n pageIds: new Map(),\n globalElementIds: new Map(),\n globalElementData: new Map(),\n }\n\n // Act\n const result = copy(data, {\n replacementContext: replacementContext as ReplacementContext,\n copyElement: node => node,\n })\n\n // Assert\n expect(result).toMatchObject(expected)\n })\n })\n}\n","import { CopyContext } from '../../state/react-page'\n\nexport function copy(value: string | undefined, context: CopyContext): string | undefined {\n if (value == null) return value\n\n if (context.replacementContext.elementHtmlIds.has(value)) return undefined\n\n context.replacementContext.elementHtmlIds.add(value)\n\n return value\n}\n","import { Descriptor } from './descriptors'\nimport { copy as backgroundsCopy } from './copy/backgrounds'\nimport { copy as gridCopy } from './copy/grid'\nimport { copy as navigationLinksCopy } from './copy/navigation-links'\nimport { copy as linkCopy } from './copy/link'\nimport { copy as shadowsCopy } from './copy/shadows'\nimport { copy as imageCopy } from './copy/image'\nimport { copy as imagesCopy } from './copy/images'\nimport { copy as responsiveColorCopy } from './copy/responsive-color'\nimport { copy as tableFormFieldsCopy } from './copy/table-form-fields'\nimport { copy as tableCopy } from './copy/table'\nimport { copy as borderCopy } from './copy/border'\nimport { copy as richTextCopy } from './copy/rich-text'\nimport { copy as elementIdCopy } from './copy/element-id'\nimport { CopyContext } from '../state/react-page'\n\n// @note: note typing value, because would then have to type narrow `Data` per case\nexport function copy(descriptor: Descriptor, value: any, context: CopyContext) {\n switch (descriptor.type) {\n case 'Backgrounds':\n return backgroundsCopy(value, context)\n case 'Grid':\n return gridCopy(value, context)\n case 'NavigationLinks':\n return navigationLinksCopy(value, context)\n case 'Link':\n return linkCopy(value, context)\n case 'Shadows':\n return shadowsCopy(value, context)\n case 'Image':\n return imageCopy(value, context)\n case 'Images':\n return imagesCopy(value, context)\n case 'ResponsiveColor':\n return responsiveColorCopy(value, context)\n case 'TableFormFields':\n return tableFormFieldsCopy(value, context)\n case 'Table':\n return tableCopy(value, context)\n case 'Border':\n return borderCopy(value, context)\n case 'RichText':\n return richTextCopy(value, context)\n case 'ElementID':\n return elementIdCopy(value, context)\n default:\n return value\n }\n}\n\nexport function copyElementReference(value: string, context: CopyContext) {\n return context.replacementContext.globalElementIds.get(value) || value\n}\n","import { CheckboxControlData, CheckboxControlDefinition } from './checkbox'\nimport { ColorControlData, ColorControlDefinition, ColorControlType, copyColorData } from './color'\nimport { ComboboxControlData, ComboboxControlDefinition } from './combobox'\nimport { ImageControlData, ImageControlDefinition, copyImageData, ImageControlType } from './image'\nimport { LinkControlData, LinkControlDefinition, copyLinkData, LinkControlType } from './link'\nimport { ListControlData, ListControlDefinition, copyListData, ListControlType } from './list'\nimport { NumberControlData, NumberControlDefinition } from './number'\nimport { SelectControlData, SelectControlDefinition } from './select'\nimport { ShapeControlData, ShapeControlDefinition, copyShapeData, ShapeControlType } from './shape'\nimport { TextAreaControlData, TextAreaControlDefinition } from './text-area'\nimport { TextInputControlData, TextInputControlDefinition } from './text-input'\nimport { copyStyleData, StyleControlData, StyleControlDefinition, StyleControlType } from './style'\nimport { copySlotData, SlotControlDefinition, SlotControlType } from './slot'\n\nimport { Descriptor, IndexSignatureHack, Types } from '../prop-controllers/descriptors'\nimport { copy as propControllerCopy } from '../prop-controllers/copy'\nimport { CopyContext } from '../state/react-page'\nimport { RichTextControlData, RichTextControlDefinition } from './rich-text'\n\nexport type ControlDefinition =\n | CheckboxControlDefinition\n | NumberControlDefinition\n | TextInputControlDefinition\n | TextAreaControlDefinition\n | SelectControlDefinition\n | ColorControlDefinition\n | ImageControlDefinition\n | ComboboxControlDefinition\n | ShapeControlDefinition\n | ListControlDefinition<any>\n | LinkControlDefinition\n | SlotControlDefinition\n | ShapeControlDefinition\n | RichTextControlDefinition\n | StyleControlDefinition\n\nexport type ControlDefinitionData<T extends ControlDefinition> = T extends CheckboxControlDefinition\n ? CheckboxControlData\n : T extends NumberControlDefinition\n ? NumberControlData\n : T extends TextInputControlDefinition\n ? TextInputControlData\n : T extends TextAreaControlDefinition\n ? TextAreaControlData\n : T extends SelectControlDefinition\n ? SelectControlData<T>\n : T extends ColorControlDefinition\n ? ColorControlData\n : T extends ImageControlDefinition\n ? ImageControlData\n : T extends ComboboxControlDefinition\n ? ComboboxControlData<T>\n : T extends ShapeControlDefinition\n ? ShapeControlData<T>\n : T extends ListControlDefinition\n ? ListControlData<T>\n : T extends LinkControlDefinition\n ? LinkControlData\n : T extends RichTextControlDefinition\n ? IndexSignatureHack<RichTextControlData>\n : T extends StyleControlDefinition\n ? StyleControlData\n : never\n\nexport function copy(definition: Descriptor | ControlDefinition, value: any, context: CopyContext) {\n switch (definition.type) {\n case Types.Backgrounds:\n case Types.Grid:\n case Types.NavigationLinks:\n case Types.Link:\n case Types.Shadows:\n case Types.Image:\n case Types.Images:\n case Types.ResponsiveColor:\n case Types.TableFormFields:\n case Types.Table:\n case Types.Border:\n case Types.RichText:\n case Types.ElementID:\n return propControllerCopy(definition, value, context)\n case ColorControlType:\n return copyColorData(value, context)\n case ImageControlType:\n return copyImageData(value, context)\n case LinkControlType:\n return copyLinkData(value, context)\n case ShapeControlType:\n return copyShapeData(definition, value, context)\n case ListControlType:\n return copyListData(definition, value, context)\n case StyleControlType:\n return copyStyleData(value, context)\n case SlotControlType:\n return copySlotData(value, context)\n default:\n return value\n }\n}\n","import { BlockType, InlineType } from './types'\n\nexport const ObjectType = {\n Value: 'value',\n Text: 'text',\n Inline: 'inline',\n Block: 'block',\n Document: 'document',\n Leaf: 'leaf',\n Selection: 'selection',\n Mark: 'mark',\n Range: 'range',\n Decoration: 'decoration',\n Annotation: 'annotation',\n Point: 'point',\n Operation: 'operation',\n} as const\n\nexport type ObjectType = typeof ObjectType[keyof typeof ObjectType]\n\nexport interface ValueJSON {\n object?: typeof ObjectType.Value | undefined\n document?: DocumentJSON | undefined\n selection?: SelectionJSON | undefined\n annotations?: { [key: string]: AnnotationJSON } | undefined\n data?: { [key: string]: any } | undefined\n}\nexport type RichTextDTO = ValueJSON\n\nexport interface DocumentJSON {\n object?: typeof ObjectType.Document | undefined\n nodes?: NodeJSON[] | undefined\n key?: string | undefined\n data?: { [key: string]: any } | undefined\n}\n\nexport interface BlockJSON {\n object?: typeof ObjectType.Block | undefined\n type: typeof BlockType[keyof typeof BlockType]\n key?: string | undefined\n nodes?: Array<BlockJSON | InlineJSON | TextJSON> | undefined\n data?: { [key: string]: any } | undefined\n}\n\nexport interface InlineJSON {\n object?: typeof ObjectType.Inline | undefined\n type: typeof InlineType[keyof typeof InlineType]\n key?: string | undefined\n nodes?: Array<InlineJSON | TextJSON> | undefined\n data?: { [key: string]: any } | undefined\n}\n\nexport interface TextJSON {\n object?: typeof ObjectType.Text | undefined\n key?: string | undefined\n text?: string | undefined\n marks?: MarkJSON[] | undefined\n}\n\nexport interface LeafJSON {\n object?: typeof ObjectType.Leaf | undefined\n marks?: MarkJSON[] | undefined\n text?: string | undefined\n}\nexport type NodeJSON = DocumentJSON | BlockJSON | InlineJSON | TextJSON\n\nexport interface SelectionJSON {\n object?: typeof ObjectType.Selection | undefined\n anchor?: PointJSON | undefined\n focus?: PointJSON | undefined\n isFocused?: boolean | undefined\n marks?: MarkJSON[] | undefined\n}\n\nexport interface MarkJSON {\n object?: typeof ObjectType.Mark | undefined\n type: string\n data?: { [key: string]: any } | undefined\n}\n\nexport interface RangeJSON {\n object?: typeof ObjectType.Range | undefined\n anchor?: PointJSON | undefined\n focus?: PointJSON | undefined\n}\n\nexport interface DecorationJSON {\n object?: typeof ObjectType.Decoration | undefined\n anchor?: PointJSON | undefined\n focus?: PointJSON | undefined\n type?: string | undefined\n data?: { [key: string]: any } | undefined\n}\n\nexport interface AnnotationJSON {\n object?: typeof ObjectType.Annotation | undefined\n key: string\n type: string\n data?: { [key: string]: any } | undefined\n anchor?: PointJSON | undefined\n focus?: PointJSON | undefined\n}\n\nexport interface PointJSON {\n object?: typeof ObjectType.Point | undefined\n key?: string | undefined\n offset?: number | undefined\n path?: number[] | undefined\n}\n\nexport interface OperationJSON {\n object?: typeof ObjectType.Operation | undefined\n type: string\n text?: string | undefined\n target?: number | undefined\n properties?: NodeJSON | ValueJSON | SelectionJSON | AnnotationJSON | undefined\n position?: number | undefined\n path?: number[] | undefined\n offset?: number | undefined\n node?: Node | undefined\n newProperties?: NodeJSON | ValueJSON | SelectionJSON | MarkJSON | AnnotationJSON | undefined\n newPath?: number[] | undefined\n mark?: MarkJSON | undefined\n data?: { [key: string]: any } | undefined\n annotation?: AnnotationJSON | undefined\n}\n","import { BaseEditor, Descendant } from 'slate'\nimport { ReactEditor } from 'slate-react'\nimport { LinkControlData } from '../link'\nimport { ResponsiveValue } from '../types'\n\nexport type RichTextTypography = {\n id?: string\n style: Array<{\n deviceId: string\n value: {\n fontFamily?: string\n lineHeight?: number\n letterSpacing?: number\n fontWeight?: number\n textAlign?: string\n uppercase?: boolean\n underline?: boolean\n strikethrough?: boolean\n italic?: boolean\n fontSize?: { value: number | null; unit: string | null }\n color?: { swatchId: string | null; alpha: number | null }\n }\n }>\n}\n\nexport type Text = {\n text: string\n typography?: RichTextTypography\n slice?: boolean\n}\n\nexport const RootBlockType = {\n Paragraph: 'paragraph',\n Heading1: 'heading-one',\n Heading2: 'heading-two',\n Heading3: 'heading-three',\n Heading4: 'heading-four',\n Heading5: 'heading-five',\n Heading6: 'heading-six',\n BlockQuote: 'blockquote',\n UnorderedList: 'unordered-list',\n OrderedList: 'ordered-list',\n} as const\n\nexport type RootBlockType = typeof RootBlockType[keyof typeof RootBlockType]\n\nexport const BlockType = {\n Paragraph: 'paragraph',\n Heading1: 'heading-one',\n Heading2: 'heading-two',\n Heading3: 'heading-three',\n Heading4: 'heading-four',\n Heading5: 'heading-five',\n Heading6: 'heading-six',\n BlockQuote: 'blockquote',\n UnorderedList: 'unordered-list',\n OrderedList: 'ordered-list',\n ListItem: 'list-item',\n ListItemChild: 'list-item-child',\n} as const\n\nexport type BlockType = typeof BlockType[keyof typeof BlockType]\n\nexport type ParagraphElement = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Paragraph\n}\n\nexport type Heading1Element = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Heading1\n}\n\nexport type Heading2Element = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Heading2\n}\n\nexport type Heading3Element = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Heading3\n}\n\nexport type Heading4Element = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Heading4\n}\n\nexport type Heading5Element = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Heading5\n}\n\nexport type Heading6Element = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.Heading6\n}\n\nexport type BlockQuoteElement = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.BlockQuote\n}\n\nexport type UnorderedListElement = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.UnorderedList\n}\n\nexport type OrderedListElement = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.OrderedList\n}\n\nexport type ListElement = OrderedListElement | UnorderedListElement\n\nexport type ListItemElement = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.ListItem\n}\n\nexport type ListItemChildElement = {\n textAlign?: ResponsiveBlockTextAlignment\n children: Array<Element | Text>\n type: typeof BlockType.ListItemChild\n}\n\nexport const InlineType = {\n Code: 'code',\n SuperScript: 'superscript',\n SubScript: 'subscript',\n Link: 'link',\n} as const\n\nexport type InlineType = typeof InlineType[keyof typeof InlineType]\n\nexport const BlockTextAlignment = {\n Left: 'left',\n Center: 'center',\n Right: 'right',\n Justify: 'justify',\n} as const\n\nexport type BlockTextAlignment = typeof BlockTextAlignment[keyof typeof BlockTextAlignment]\n\nexport type ResponsiveBlockTextAlignment = ResponsiveValue<BlockTextAlignment>\n\nexport type CodeElement = {\n children: Array<Text | Inline>\n type: typeof InlineType.Code\n}\n\nexport type SuperElement = {\n children: Array<Text | Inline>\n type: typeof InlineType.SuperScript\n}\n\nexport type SubElement = {\n children: Array<Text | Inline>\n type: typeof InlineType.SubScript\n}\n\nexport type LinkElement = {\n children: Array<Text | Inline>\n type: typeof InlineType.Link\n link: LinkControlData\n}\n\nexport type RootBlock =\n | ParagraphElement\n | Heading1Element\n | Heading2Element\n | Heading3Element\n | Heading4Element\n | Heading5Element\n | Heading6Element\n | BlockQuoteElement\n | ListElement\n\nexport type Block = RootBlock | ListItemElement | ListItemChildElement\n\nexport type Inline = CodeElement | SuperElement | SubElement | LinkElement\n\nexport type Element = Block | Inline\n\nexport type RichTextDAO = Descendant[]\n\ndeclare module 'slate' {\n interface CustomTypes {\n Editor: BaseEditor & ReactEditor\n Element: Element\n Text: Text\n }\n}\n","import { Descendant, Text, Selection } from 'slate'\nimport { LinkControlData } from '../link'\nimport { BlockType, Inline, InlineType, RichTextDAO } from './types'\nimport {\n BlockJSON,\n InlineJSON,\n NodeJSON,\n SelectionJSON,\n TextJSON,\n RichTextDTO,\n ObjectType,\n} from './dto-types'\n\nfunction toTextDAO(node: TextJSON): Text[] {\n const typographyMark = node.marks?.find(mark => mark.type === 'typography')\n\n return [\n {\n text: node.text ?? '',\n typography: typographyMark?.data?.value ?? undefined,\n },\n ]\n}\n\nfunction toInlineDAO(node: InlineJSON): Inline[] {\n switch (node.type) {\n case InlineType.Link:\n return [\n {\n children: node.nodes?.flatMap(toInlineOrTextDAO) ?? [],\n [node.type]: node.data as LinkControlData,\n type: node.type,\n },\n ]\n case InlineType.Code:\n case InlineType.SubScript:\n case InlineType.SuperScript:\n return [\n {\n children: node.nodes?.flatMap(toInlineOrTextDAO) ?? [],\n type: node.type,\n },\n ]\n default:\n return []\n }\n}\n\nfunction toInlineOrTextDAO(node: InlineJSON | TextJSON): Array<Inline | Text> {\n switch (node.object) {\n case ObjectType.Inline:\n return toInlineDAO(node)\n case ObjectType.Text:\n return toTextDAO(node)\n default:\n return []\n }\n}\n\nfunction toNodeDAO(node: NodeJSON): Descendant[] {\n switch (node.object) {\n case ObjectType.Inline:\n case ObjectType.Text:\n return toInlineOrTextDAO(node)\n case ObjectType.Block:\n return [\n {\n type: node.type,\n textAlign: node?.data && 'textAlign' in node.data ? node?.data.textAlign : undefined,\n children: node.nodes?.flatMap(toNodeDAO) ?? [],\n },\n ]\n default:\n return []\n }\n}\n\nexport function richTextDTOtoSelection(data: RichTextDTO): Selection {\n if (\n data.selection?.anchor?.offset != null &&\n data.selection.anchor.path != null &&\n data.selection?.focus?.offset != null &&\n data.selection.focus.path != null\n )\n return {\n anchor: {\n offset: data.selection.anchor.offset,\n path: data.selection.anchor.path,\n },\n focus: {\n offset: data.selection.focus.offset,\n path: data.selection.focus.path,\n },\n }\n\n return null\n}\n\nexport function richTextDTOtoDAO(data: RichTextDTO): RichTextDAO {\n return data.document?.nodes?.flatMap(toNodeDAO) ?? []\n}\n\nfunction toInlineOrTextDTO(node: Inline | Text): Array<InlineJSON | TextJSON> {\n if (Text.isText(node)) {\n return [\n {\n text: node.text,\n object: 'text',\n marks: node.typography\n ? [\n {\n data: {\n value: node.typography,\n },\n type: 'typography',\n object: 'mark',\n },\n ]\n : [],\n },\n ]\n }\n switch (node.type) {\n case InlineType.Link:\n return [\n {\n object: ObjectType.Inline,\n nodes: node.children.flatMap(toInlineOrTextDTO),\n type: node.type,\n data: node.link,\n },\n ]\n case InlineType.Code:\n case InlineType.SubScript:\n case InlineType.SuperScript:\n return [\n {\n object: 'inline',\n nodes: node.children.flatMap(toInlineOrTextDTO),\n type: node.type,\n data: {},\n },\n ]\n }\n}\n\nfunction toNodeDTO(node: Descendant): Array<BlockJSON | InlineJSON | TextJSON> {\n if (Text.isText(node)) return toInlineOrTextDTO(node)\n\n switch (node.type) {\n case InlineType.Link:\n case InlineType.Code:\n case InlineType.SubScript:\n case InlineType.SuperScript:\n return toInlineOrTextDTO(node)\n case BlockType.Heading1:\n case BlockType.Heading2:\n case BlockType.Heading3:\n case BlockType.BlockQuote:\n case BlockType.Paragraph:\n case BlockType.OrderedList:\n case BlockType.UnorderedList:\n case BlockType.ListItem:\n case BlockType.ListItemChild:\n return [\n {\n type: node.type,\n data: node.textAlign\n ? {\n textAlign: node.textAlign,\n }\n : {},\n object: 'block',\n nodes: node.children?.flatMap(toNodeDTO) ?? [],\n },\n ]\n default:\n return []\n }\n}\n\nexport function toSelectionDTO(selection: Selection | null): SelectionJSON | undefined {\n if (selection == null) return undefined\n\n return {\n isFocused: false,\n marks: undefined,\n object: 'selection',\n anchor: {\n offset: selection.anchor.offset,\n path: selection.anchor.path,\n object: 'point',\n },\n focus: {\n offset: selection.focus.offset,\n path: selection.focus.path,\n object: 'point',\n },\n }\n}\n\nexport function richTextDAOToDTO(children: Descendant[], selection: Selection): RichTextDTO {\n return {\n document: {\n data: undefined,\n nodes: children.flatMap(toNodeDTO),\n object: 'document',\n },\n object: 'value',\n selection: toSelectionDTO(selection),\n annotations: undefined,\n data: undefined,\n }\n}\n","import { BuilderEditMode } from '../../state/modules/builder-edit-mode'\nimport { PropController } from '../../prop-controllers/instances'\nimport { BoxModel } from '../../box-model'\nimport { RichTextDTO } from './dto-types'\nimport { Editor, Transforms } from 'slate'\nimport { richTextDAOToDTO } from './translation'\nimport { ReactEditor } from 'slate-react'\n\nexport type RichTextControlData = RichTextDTO\n\nexport const RichTextControlType = 'makeswift::controls::rich-text'\n\nexport type RichTextControlDefinition = {\n type: typeof RichTextControlType\n}\n\nexport function RichText(): RichTextControlDefinition {\n return { type: RichTextControlType }\n}\n\nexport const RichTextControlMessageType = {\n CHANGE_BUILDER_EDIT_MODE: 'CHANGE_BUILDER_EDIT_MODE',\n INITIALIZE_EDITOR: 'INITIALIZE_EDITOR',\n CHANGE_EDITOR_VALUE: 'CHANGE_EDITOR_VALUE',\n FOCUS: 'FOCUS',\n BLUR: 'BLUR',\n UNDO: 'UNDO',\n REDO: 'REDO',\n CHANGE_BOX_MODEL: 'CHANGE_BOX_MODEL',\n} as const\n\ntype ChangeBuilderEditModeRichTextControlMessage = {\n type: typeof RichTextControlMessageType.CHANGE_BUILDER_EDIT_MODE\n editMode: BuilderEditMode\n}\n\ntype InitializeEditorRichTextControlMessage = {\n type: typeof RichTextControlMessageType.INITIALIZE_EDITOR\n value: RichTextDTO\n}\n\ntype ChangeEditorValueRichTextControlMessage = {\n type: typeof RichTextControlMessageType.CHANGE_EDITOR_VALUE\n value: RichTextDTO\n}\n\ntype FocusRichTextControlMessage = { type: typeof RichTextControlMessageType.FOCUS }\n\ntype BlurRichTextControlMessage = { type: typeof RichTextControlMessageType.BLUR }\n\ntype UndoRichTextControlMessage = { type: typeof RichTextControlMessageType.UNDO }\n\ntype RedoRichTextControlMessage = { type: typeof RichTextControlMessageType.REDO }\n\ntype BoxModelChangeRichControlMessage = {\n type: typeof RichTextControlMessageType.CHANGE_BOX_MODEL\n payload: { boxModel: BoxModel | null }\n}\n\nexport type RichTextControlMessage =\n | ChangeBuilderEditModeRichTextControlMessage\n | InitializeEditorRichTextControlMessage\n | ChangeEditorValueRichTextControlMessage\n | FocusRichTextControlMessage\n | BlurRichTextControlMessage\n | UndoRichTextControlMessage\n | RedoRichTextControlMessage\n | BoxModelChangeRichControlMessage\n\nexport class RichTextControl extends PropController<RichTextControlMessage> {\n private editor: Editor | null = null\n\n recv = (message: RichTextControlMessage): void => {\n if (!this.editor) return\n switch (message.type) {\n case RichTextControlMessageType.CHANGE_BUILDER_EDIT_MODE: {\n switch (message.editMode) {\n case BuilderEditMode.BUILD:\n case BuilderEditMode.INTERACT:\n ReactEditor.deselect(this.editor)\n ReactEditor.blur(this.editor)\n }\n break\n }\n case RichTextControlMessageType.FOCUS: {\n ReactEditor.focus(this.editor)\n Transforms.select(this.editor, {\n anchor: Editor.start(this.editor, []),\n focus: Editor.end(this.editor, []),\n })\n break\n }\n }\n }\n\n setSlateEditor(editor: Editor) {\n this.editor = editor\n\n this.send({\n type: RichTextControlMessageType.INITIALIZE_EDITOR,\n value: richTextDAOToDTO(editor.children, editor.selection),\n })\n\n const _onChange = editor.onChange\n this.editor.onChange = options => {\n _onChange(options)\n\n // if onChange is local then it will include an operation(s)\n // that is the only case in which we want to push updates\n // this prevent infinite loops that can occur when collaborating\n if (options?.operation != null) {\n this.send({\n type: RichTextControlMessageType.CHANGE_EDITOR_VALUE,\n value: richTextDAOToDTO(editor.children, editor.selection),\n })\n }\n }\n }\n\n focus() {\n this.send({ type: RichTextControlMessageType.FOCUS })\n }\n\n blur() {\n this.send({ type: RichTextControlMessageType.BLUR })\n }\n\n undo() {\n this.send({ type: RichTextControlMessageType.UNDO })\n }\n\n redo() {\n this.send({ type: RichTextControlMessageType.REDO })\n }\n\n changeBoxModel(boxModel: BoxModel | null): void {\n this.send({ type: RichTextControlMessageType.CHANGE_BOX_MODEL, payload: { boxModel } })\n }\n}\n","import {\n ResolveBorderControlValue,\n ResolveBorderRadiusControlValue,\n ResolveMarginControlValue,\n ResolvePaddingControlValue,\n ResolveShadowsControlValue,\n ResolveWidthControlValue,\n} from '../runtimes/react/controls'\nimport { StyleControlFormattedValue } from '../runtimes/react/controls/style'\nimport type { Element, Data } from '../state/react-page'\nimport type { ResponsiveColor } from '../runtimes/react/controls'\nimport { NumberControlDefinition } from '../controls/number'\nimport { NumberControlValue } from '../runtimes/react/controls/number'\nimport {\n CheckboxControlDefinition,\n ColorControlDefinition,\n ComboboxControlDefinition,\n ImageControlDefinition,\n LinkControlDefinition,\n ListControlDefinition,\n SelectControlDefinition,\n ShapeControlDefinition,\n SlotControlDefinition,\n TextAreaControlDefinition,\n TextInputControlDefinition,\n StyleControlDefinition,\n StyleControlType,\n} from '../controls'\nimport { TextInputControlValue } from '../runtimes/react/controls/text-input'\nimport { TextAreaControlValue } from '../runtimes/react/controls/text-area'\nimport { ColorControlValue } from '../runtimes/react/controls/color'\nimport { SelectControlValue } from '../runtimes/react/controls/select'\nimport { CheckboxControlValue } from '../runtimes/react/controls/checkbox'\nimport { ResolveImageControlValue } from '../runtimes/react/controls/image'\nimport { ShapeControlValue } from '../runtimes/react/controls/shape'\nimport { ListControlValue } from '../runtimes/react/controls/list'\nimport { ComboboxControlValue } from '../runtimes/react/controls/combobox'\nimport { LinkControlValue } from '../runtimes/react/controls/link'\nimport { SlotControlValue } from '../runtimes/react/controls/slot'\nimport { RichTextControlDefinition, RichTextDTO } from '../controls/rich-text'\nimport { RichTextControlValue } from '../runtimes/react/controls/rich-text'\n\nexport type { Data }\n\n// See https://github.com/microsoft/TypeScript/issues/15300\nexport type IndexSignatureHack<T> = T extends Record<string, any>\n ? { [K in keyof T]: IndexSignatureHack<T[K]> }\n : T\n\nexport type Device = 'desktop' | 'tablet' | 'mobile'\n\nexport type DeviceOverride<T> = { deviceId: Device; value: T }\n\nexport type ResponsiveValue<T> = DeviceOverride<T>[]\n\nexport type ResponsiveValueType<T> = T extends ResponsiveValue<infer U> ? U : never\n\ntype Color = { swatchId: string; alpha: number }\n\ntype IconName =\n | 'HeightAuto16'\n | 'HeightMatch16'\n | 'VerticalAlignStart16'\n | 'VerticalAlignMiddle16'\n | 'VerticalAlignEnd16'\n | 'VerticalAlignSpaceBetween16'\n | 'ButtonPill16'\n | 'ButtonRounded16'\n | 'ButtonSquare16'\n | 'SizeSmall16'\n | 'SizeMedium16'\n | 'SizeLarge16'\n | 'ArrowInside16'\n | 'ArrowCenter16'\n | 'ArrowOutside16'\n | 'CountdownSolid16'\n | 'CountdownSolidSplit16'\n | 'CountdownOutline16'\n | 'CountdownOutlineSplit16'\n | 'CountdownNaked16'\n | 'Sun16'\n | 'Moon16'\n | 'AlignLeft16'\n | 'AlignCenter16'\n | 'AlignRight16'\n | 'Star16'\n | 'StarCircle16'\n | 'StarRoundedSquare16'\n | 'StarSquare16'\n\nexport type Gap = { value: number; unit: 'px' }\n\nexport type Length = { value: number; unit: 'px' | '%' }\n\ntype OpenPageLink = {\n type: 'OPEN_PAGE'\n payload: { pageId: string | null | undefined; openInNewTab: boolean }\n}\n\ntype OpenURLLink = { type: 'OPEN_URL'; payload: { url: string; openInNewTab: boolean } }\n\ntype SendEmailLink = {\n type: 'SEND_EMAIL'\n payload: { to: string; subject?: string; body?: string }\n}\n\ntype CallPhoneLink = { type: 'CALL_PHONE'; payload: { phoneNumber: string } }\n\ntype ScrollToElementLink = {\n type: 'SCROLL_TO_ELEMENT'\n payload: {\n elementIdConfig: { elementKey: string; propName: string } | null | undefined\n block: 'start' | 'center' | 'end'\n }\n}\n\ntype Link = OpenPageLink | OpenURLLink | SendEmailLink | CallPhoneLink | ScrollToElementLink\n\ntype TextStyle = {\n fontFamily?: string | null | undefined\n letterSpacing: number | null | undefined\n fontSize: { value: number; unit: 'px' } | null | undefined\n fontWeight: number | null | undefined\n textTransform: 'uppercase'[]\n fontStyle: 'italic'[]\n}\n\nexport const Types = {\n Backgrounds: 'Backgrounds',\n Border: 'Border',\n BorderRadius: 'BorderRadius',\n Checkbox: 'Checkbox',\n Date: 'Date',\n ElementID: 'ElementID',\n Font: 'Font',\n GapX: 'GapX',\n GapY: 'GapY',\n Grid: 'Grid',\n Image: 'Image',\n Images: 'Images',\n Link: 'Link',\n List: 'List',\n Margin: 'Margin',\n NavigationLinks: 'NavigationLinks',\n Number: 'Number',\n Padding: 'Padding',\n ResponsiveColor: 'ResponsiveColor',\n ResponsiveIconRadioGroup: 'ResponsiveIconRadioGroup',\n ResponsiveLength: 'ResponsiveLength',\n ResponsiveNumber: 'ResponsiveNumber',\n ResponsiveOpacity: 'ResponsiveOpacity',\n ResponsiveSelect: 'ResponsiveSelect',\n RichText: 'RichText',\n Shadows: 'Shadows',\n Shape: 'Shape',\n SocialLinks: 'SocialLinks',\n Table: 'Table',\n TableFormFields: 'TableFormFields',\n Typeahead: 'Typeahead',\n TextArea: 'TextArea',\n TextInput: 'TextInput',\n TextStyle: 'TextStyle',\n Video: 'Video',\n Width: 'Width',\n Style: StyleControlType,\n} as const\n\ntype Options<T> = T | ((props: Record<string, unknown>, deviceMode: Device) => T)\n\nexport type ResolveOptions<T extends Options<unknown>> = T extends Options<infer U> ? U : never\n\ntype ColorBackground = { type: 'color'; id: string; payload: Color | null }\n\ntype GradientStop = { id: string; location: number; color: Color | null }\n\ntype Gradient = { angle?: number; isRadial?: boolean; stops: GradientStop[] }\n\ntype GradientBackground = { type: 'gradient'; id: string; payload: Gradient }\n\ntype BackgroundImagePosition = { x: number; y: number }\n\ntype BackgroundImageSize = 'cover' | 'contain' | 'auto'\n\ntype BackgroundImageRepeat = 'no-repeat' | 'repeat-x' | 'repeat-y' | 'repeat'\n\ntype BackgroundImage = {\n imageId: string\n position: BackgroundImagePosition\n size?: BackgroundImageSize\n repeat?: BackgroundImageRepeat\n opacity?: number\n parallax?: number\n}\n\ntype ImageBackground = { type: 'image'; id: string; payload: BackgroundImage }\n\ntype BackgroundVideoAspectRatio = 'wide' | 'standard'\n\ntype BackgroundVideo = {\n url?: string\n maskColor?: Color | null\n opacity?: number\n zoom?: number\n aspectRatio?: BackgroundVideoAspectRatio\n parallax?: number\n}\n\ntype VideoBackground = { type: 'video'; id: string; payload: BackgroundVideo }\n\ntype Background = ColorBackground | GradientBackground | ImageBackground | VideoBackground\n\nexport type BackgroundsValue = ResponsiveValue<Background[]>\n\ntype BackgroundsOptions = Options<Record<string, never>>\n\ntype BackgroundsDescriptor<_T = BackgroundsValue> = {\n type: typeof Types.Backgrounds\n options: BackgroundsOptions\n}\n\nexport function Backgrounds(options: BackgroundsOptions = {}): BackgroundsDescriptor {\n return { type: Types.Backgrounds, options }\n}\n\ntype BorderSideStyle = 'dashed' | 'dotted' | 'solid'\n\nexport type BorderSide = {\n width: number | null | undefined\n style: BorderSideStyle\n color?: Color | null\n}\n\ntype Border = {\n [K in 'top' | 'right' | 'bottom' | 'left' as `border${Capitalize<K>}`]:\n | BorderSide\n | null\n | undefined\n}\n\nexport type BorderValue = ResponsiveValue<Border>\n\nexport const BorderPropControllerFormat = {\n ClassName: 'makeswift::prop-controllers::border::format::class-name',\n ResponsiveValue: 'makeswift::prop-controllers:border::format::responsive-value',\n} as const\n\nexport type BorderPropControllerFormat =\n typeof BorderPropControllerFormat[keyof typeof BorderPropControllerFormat]\n\ntype BorderOptions = { format?: BorderPropControllerFormat }\n\nexport type BorderDescriptor<_T = BorderValue, U extends BorderOptions = BorderOptions> = {\n type: typeof Types.Border\n options: U\n}\n\nexport function Border<T extends BorderOptions>(\n options: T & BorderOptions = {} as T,\n): BorderDescriptor<BorderValue, T> {\n return { type: Types.Border, options }\n}\n\nBorder.Format = BorderPropControllerFormat\n\ntype BorderRadius = {\n [K in 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' as `border${Capitalize<K>}Radius`]:\n | Length\n | null\n | undefined\n}\n\nexport type BorderRadiusValue = ResponsiveValue<BorderRadius>\n\nexport const BorderRadiusPropControllerFormat = {\n ClassName: 'makeswift::prop-controllers::border-radius::format::class-name',\n ResponsiveValue: 'makeswift::prop-controllers::border-radius::format::responsive-value',\n} as const\n\nexport type BorderRadiusPropControllerFormat =\n typeof BorderRadiusPropControllerFormat[keyof typeof BorderRadiusPropControllerFormat]\n\ntype BorderRadiusOptions = { format?: BorderRadiusPropControllerFormat }\n\nexport type BorderRadiusDescriptor<\n _T = BorderRadiusValue,\n U extends BorderRadiusOptions = BorderRadiusOptions,\n> = {\n type: typeof Types.BorderRadius\n options: U\n}\n\nexport function BorderRadius<T extends BorderRadiusOptions>(\n options: T & BorderRadiusOptions = {} as T,\n): BorderRadiusDescriptor<BorderRadiusValue, T> {\n return { type: Types.BorderRadius, options }\n}\n\nBorderRadius.Format = BorderRadiusPropControllerFormat\n\nexport type CheckboxValue = boolean\n\nexport type CheckboxOptions = Options<{\n preset?: CheckboxValue\n label: string\n hidden?: boolean\n}>\n\nexport type CheckboxDescriptor<_T = CheckboxValue> = {\n type: typeof Types.Checkbox\n options: CheckboxOptions\n}\n\nexport function Checkbox(options: CheckboxOptions): CheckboxDescriptor {\n return { type: Types.Checkbox, options }\n}\n\nexport type DateValue = string\n\nexport type DateOptions = Options<{ preset?: DateValue }>\n\nexport type DateDescriptor<_T = DateValue> = { type: typeof Types.Date; options: DateOptions }\n\nexport function Date(options: DateOptions = {}): DateDescriptor {\n return { type: Types.Date, options }\n}\n\nexport type ElementIDValue = string\n\ntype ElementIDOptions = Options<Record<string, never>>\n\ntype ElementIDDescriptor<_T = ElementIDValue> = {\n type: typeof Types.ElementID\n options: ElementIDOptions\n}\n\nexport function ElementID(options: ElementIDOptions = {}): ElementIDDescriptor {\n return { type: Types.ElementID, options }\n}\n\nexport type FontValue = ResponsiveValue<string>\n\ntype FontOptions = Options<{ preset?: FontValue; label?: string }>\n\ntype FontDescriptor<_T = FontValue> = { type: typeof Types.Font; options: FontOptions }\n\nexport function Font(options: FontOptions = {}): FontDescriptor {\n return { type: Types.Font, options }\n}\n\nexport type GapXValue = ResponsiveValue<Gap>\n\nexport type GapXOptions = Options<{\n preset?: GapXValue\n label?: string\n defaultValue?: Gap\n min?: number\n max?: number\n step?: number\n hidden?: boolean\n}>\n\nexport type GapXDescriptor<_T = GapXValue> = { type: typeof Types.GapX; options: GapXOptions }\n\nexport function GapX(options: GapXOptions = {}): GapXDescriptor {\n return { type: Types.GapX, options }\n}\n\nexport type GapYValue = ResponsiveValue<Gap>\n\nexport type GapYOptions = Options<{\n preset?: GapYValue\n label?: string\n defaultValue?: Gap\n step?: number\n min?: number\n max?: number\n hidden?: boolean\n}>\n\nexport type GapYDescriptor<_T = GapYValue> = { type: typeof Types.GapY; options: GapYOptions }\n\nexport function GapY(options: GapYOptions = {}): GapYDescriptor {\n return { type: Types.GapY, options }\n}\n\ntype GridColumn = { count: number; spans: number[][] }\n\nexport type GridValue = { elements: Element[]; columns: ResponsiveValue<GridColumn> }\n\ntype GridOptions = Options<Record<string, never>>\n\ntype GridDescriptor<_T = GridValue> = { type: typeof Types.Grid; options: GridOptions }\n\nexport function Grid(options: GridOptions = {}): GridDescriptor {\n return { type: Types.Grid, options }\n}\n\nexport type ImageValue = string\n\nexport type ImageOptions = Options<{ label?: string; hidden?: boolean }>\n\nexport type ImageDescriptor<_T = ImageValue> = { type: typeof Types.Image; options: ImageOptions }\n\nexport function Image(options: ImageOptions = {}): ImageDescriptor {\n return { type: Types.Image, options }\n}\n\nexport type ImagesValue = { key: string; props: { link?: Link; file?: string; altText?: string } }[]\n\ntype ImagesOptions = Options<{ preset?: ImagesValue }>\n\ntype ImagesDescriptor<_T = ImagesValue> = { type: typeof Types.Images; options: ImagesOptions }\n\nexport function Images(options: ImagesOptions = {}): ImagesDescriptor {\n return { type: Types.Images, options }\n}\n\nexport type LinkValue = Link\n\nexport type LinkOptions = Options<{\n preset?: LinkValue\n label?: string\n defaultValue?: Link\n options?: { value: Link['type']; label: string }[]\n hidden?: boolean\n}>\n\nexport type LinkDescriptor<_T = LinkValue> = { type: typeof Types.Link; options: LinkOptions }\n\nexport function Link(options: LinkOptions = {}): LinkDescriptor {\n return { type: Types.Link, options }\n}\n\ntype ListValueItem<T extends Data> = { id: string; value?: T }\n\nexport type ListValue<T extends Data = Data> = ListValueItem<T>[]\n\nexport type ListOptions<T extends Data> = {\n type: PanelDescriptor<T>\n label?: string\n getItemLabel?: ((value: T | undefined) => string) | ((value: T | undefined) => Promise<string>)\n preset?: ListValue<T>\n defaultValue?: ListValue<T>\n}\n\nexport type ListDescriptor<T extends ListValue = ListValue> = {\n type: typeof Types.List\n options: ListOptions<T extends ListValue<infer U> ? U : never>\n}\n\nexport function List<T extends Data>(options: ListOptions<T>): ListDescriptor<ListValue<T>> {\n return { type: Types.List, options }\n}\n\ntype MarginSide = { value: number; unit: 'px' } | 'auto'\n\ntype Margin = {\n [K in 'top' | 'right' | 'bottom' | 'left' as `margin${Capitalize<K>}`]:\n | MarginSide\n | null\n | undefined\n}\n\nexport type MarginValue = ResponsiveValue<Margin>\n\nexport const MarginPropControllerFormat = {\n ClassName: 'makeswift::prop-controllers::margin::format::class-name',\n ResponsiveValue: 'makeswift::prop-controllers::margin::format::responsive-value',\n} as const\n\nexport type MarginPropControllerFormat =\n typeof MarginPropControllerFormat[keyof typeof MarginPropControllerFormat]\n\ntype MarginOptions = { preset?: MarginValue; format?: MarginPropControllerFormat }\n\nexport type MarginDescriptor<_T = MarginValue, U extends MarginOptions = MarginOptions> = {\n type: typeof Types.Margin\n options: U\n}\n\nexport function Margin<T extends MarginOptions>(\n options: T & MarginOptions = {} as T,\n): MarginDescriptor<MarginValue, T> {\n return { type: Types.Margin, options }\n}\n\nMargin.Format = MarginPropControllerFormat\n\ntype ButtonVariant = 'flat' | 'outline' | 'shadow' | 'clear' | 'blocky' | 'bubbly' | 'skewed'\n\ntype ButtonShape = 'pill' | 'rounded' | 'square'\n\ntype ButtonSize = 'small' | 'medium' | 'large'\n\nexport type NavigationButton = {\n id: string\n type: 'button'\n payload: {\n label: string\n link?: Link\n variant?: ResponsiveValue<ButtonVariant>\n shape?: ResponsiveValue<ButtonShape>\n size?: ResponsiveValue<ButtonSize>\n textColor?: ResponsiveValue<Color>\n color?: ResponsiveValue<Color>\n textStyle?: ResponsiveValue<TextStyle>\n }\n}\n\ntype NavigationDropdownCaretType = 'caret' | 'plus' | 'arrow-down' | 'chevron-down'\n\ntype NavigationDropdownLink = {\n id: string\n payload: {\n label: string\n link?: Link\n color?: ResponsiveValue<Color>\n textStyle?: ResponsiveValue<TextStyle>\n }\n}\n\ntype NavigationDropdown = {\n id: string\n type: 'dropdown'\n payload: {\n label: string\n caret?: NavigationDropdownCaretType\n links?: NavigationDropdownLink[]\n variant?: ResponsiveValue<ButtonVariant>\n shape?: ResponsiveValue<ButtonShape>\n size?: ResponsiveValue<ButtonSize>\n textColor?: ResponsiveValue<Color>\n color?: ResponsiveValue<Color>\n textStyle?: ResponsiveValue<TextStyle>\n }\n}\n\nexport type NavigationLinksValue = (NavigationButton | NavigationDropdown)[]\n\ntype NavigationLinksOptions = Options<Record<string, never>>\n\ntype NavigationLinksDescriptor<_T = NavigationLinksValue> = {\n type: typeof Types.NavigationLinks\n options: NavigationLinksOptions\n}\n\nexport function NavigationLinks(options: NavigationLinksOptions = {}): NavigationLinksDescriptor {\n return { type: Types.NavigationLinks, options }\n}\n\nexport type NumberValue = number\n\nexport type NumberOptions = Options<{\n preset?: NumberValue\n label?: string\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n suffix?: string\n hidden?: boolean\n}>\n\nexport type NumberDescriptor<_T = NumberValue> = {\n type: typeof Types.Number\n options: NumberOptions\n}\n\nexport function Number(options: NumberOptions = {}): NumberDescriptor {\n return { type: Types.Number, options }\n}\n\ntype PaddingSide = { value: number; unit: 'px' }\n\ntype Padding = {\n [K in 'top' | 'right' | 'bottom' | 'left' as `padding${Capitalize<K>}`]:\n | PaddingSide\n | null\n | undefined\n}\n\nexport type PaddingValue = ResponsiveValue<Padding>\n\nexport const PaddingPropControllerFormat = {\n ClassName: 'makeswift::prop-controllers::padding::format::class-name',\n ResponsiveValue: 'makeswift::prop-controllers::padding::format::responsive-value',\n} as const\n\nexport type PaddingPropControllerFormat =\n typeof PaddingPropControllerFormat[keyof typeof PaddingPropControllerFormat]\n\ntype PaddingOptions = { preset?: PaddingValue; format?: PaddingPropControllerFormat }\n\nexport type PaddingDescriptor<_T = PaddingValue, U extends PaddingOptions = PaddingOptions> = {\n type: typeof Types.Padding\n options: U\n}\n\nexport function Padding<T extends PaddingOptions>(\n options: T & PaddingOptions = {} as T,\n): PaddingDescriptor<PaddingValue, T> {\n return { type: Types.Padding, options }\n}\n\nPadding.Format = PaddingPropControllerFormat\n\nexport type ResponsiveColorValue = ResponsiveValue<Color>\n\ntype ResponsiveColorOptions = Options<{ label?: string; placeholder?: string; hidden?: boolean }>\n\nexport type ResponsiveColorDescriptor<_T = ResponsiveColorValue> = {\n type: typeof Types.ResponsiveColor\n options: ResponsiveColorOptions\n}\n\nexport function ResponsiveColor(options: ResponsiveColorOptions = {}): ResponsiveColorDescriptor {\n return { type: Types.ResponsiveColor, options }\n}\n\nexport type IconRadioGroupOption<T extends string> = { value: T; label: string; icon: IconName }\n\nexport type ResponsiveIconRadioGroupValue<T extends string = string> = ResponsiveValue<T>\n\nexport type ResponsiveIconRadioGroupOptions<T extends string = string, U extends T = T> = Options<{\n label?: string\n options: IconRadioGroupOption<T>[]\n defaultValue?: U\n hidden?: boolean\n}>\n\nexport type ResponsiveIconRadioGroupDescriptor<\n T extends ResponsiveIconRadioGroupValue<string> = ResponsiveIconRadioGroupValue<string>,\n> = {\n type: typeof Types.ResponsiveIconRadioGroup\n options: ResponsiveIconRadioGroupOptions<ResponsiveValueType<T>>\n}\n\n// HACK(miguel): We have to use a layer of indirection with `_T` and `T` because otherwise the\n// values provided would undergo type widening. For some reason, the extra layer of indirection\n// reuslts in TypeScript not widening types. Note, this only happens when the returned value of this\n// function is passed to another as an argument, which is common with the `registerComponent` API.\nexport function ResponsiveIconRadioGroup<_T extends string, T extends _T, U extends T>(\n options: ResponsiveIconRadioGroupOptions<T, U>,\n): ResponsiveIconRadioGroupDescriptor<ResponsiveIconRadioGroupValue<T>> {\n return { type: Types.ResponsiveIconRadioGroup, options }\n}\n\nexport type ResponsiveLengthValue = ResponsiveValue<Length>\n\nexport type LengthOption =\n | { value: 'px'; label: 'Pixels'; icon: 'Px16' }\n | { value: '%'; label: 'Percentage'; icon: 'Percent16' }\n\nexport type ResponsiveLengthOptions = Options<{\n label?: string\n options?: LengthOption[]\n defaultValue?: Length\n hidden?: boolean\n}>\n\nexport type ResponsiveLengthDescriptor<_T = ResponsiveLengthValue> = {\n type: typeof Types.ResponsiveLength\n options: ResponsiveLengthOptions\n}\n\nexport function ResponsiveLength(\n options: ResponsiveLengthOptions = {},\n): ResponsiveLengthDescriptor {\n return { type: Types.ResponsiveLength, options }\n}\n\nexport type ResponsiveNumberValue = ResponsiveValue<number>\n\nexport type ResponsiveNumberOptions = Options<{\n label?: string\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n suffix?: string\n hidden?: boolean\n}>\n\nexport type ResponsiveNumberDescriptor<_T = ResponsiveNumberValue> = {\n type: typeof Types.ResponsiveNumber\n options: ResponsiveNumberOptions\n}\n\nexport function ResponsiveNumber(\n options: ResponsiveNumberOptions = {},\n): ResponsiveNumberDescriptor {\n return { type: Types.ResponsiveNumber, options }\n}\n\nexport type ResponsiveOpacityValue = ResponsiveValue<number>\n\ntype ResponsiveOpacityOptions = Options<Record<string, never>>\n\ntype ResponsiveOpacityDescriptor<_T = ResponsiveOpacityValue> = {\n type: typeof Types.ResponsiveOpacity\n options: ResponsiveOpacityOptions\n}\n\nexport function ResponsiveOpacity(\n options: ResponsiveOpacityOptions = {},\n): ResponsiveOpacityDescriptor {\n return { type: Types.ResponsiveOpacity, options }\n}\n\nexport type ResponsiveSelectValue<T extends string = string> = ResponsiveValue<T>\n\nexport type SelectLabelOrientation = 'vertical' | 'horizontal'\n\nexport type SelectOption<T extends string> = { value: T; label: string }\n\nexport type ResponsiveSelectOptions<T extends string = string, U extends T = T> = Options<{\n label?: string\n labelOrientation?: SelectLabelOrientation\n options: SelectOption<T>[]\n defaultValue?: U\n hidden?: boolean\n}>\n\nexport type ResponsiveSelectDescriptor<\n T extends ResponsiveSelectValue<string> = ResponsiveSelectValue<string>,\n> = {\n type: typeof Types.ResponsiveSelect\n options: ResponsiveSelectOptions<ResponsiveValueType<T>>\n}\n\n// HACK(miguel): We have to use a layer of indirection with `_T` and `T` because otherwise the\n// values provided would undergo type widening. For some reason, the extra layer of indirection\n// reuslts in TypeScript not widening types. Note, this only happens when the returned value of this\n// function is passed to another as an argument, which is common with the `registerComponent` API.\nexport function ResponsiveSelect<_T extends string, T extends _T, U extends T>(\n options: ResponsiveSelectOptions<T, U>,\n): ResponsiveSelectDescriptor<ResponsiveSelectValue<T>> {\n return { type: Types.ResponsiveSelect, options }\n}\n\nexport type RichTextValue = IndexSignatureHack<RichTextDTO>\n\nexport type RichTextOptions = Options<{ preset?: RichTextValue }>\n\nexport type RichTextDescriptor<_T extends Data = RichTextValue> = {\n type: typeof Types.RichText\n options: RichTextOptions\n}\n\nexport function RichText(options: RichTextOptions = {}): RichTextDescriptor {\n return { type: Types.RichText, options }\n}\n\ntype Shadow = {\n color?: Color | null\n blurRadius?: number\n spreadRadius?: number\n offsetX?: number\n offsetY?: number\n inset?: boolean\n}\n\ntype Shadows = { id: string; payload: Shadow }[]\n\nexport type ShadowsValue = ResponsiveValue<Shadows>\n\nexport const ShadowsPropControllerFormat = {\n ClassName: 'makeswift::prop-controllers::shadows::format::class-name',\n ResponsiveValue: 'makeswift::prop-controllers::shadows::format::responsive-value',\n} as const\n\nexport type ShadowsPropControllerFormat =\n typeof ShadowsPropControllerFormat[keyof typeof ShadowsPropControllerFormat]\n\ntype ShadowsOptions = { format?: ShadowsPropControllerFormat }\n\nexport type ShadowsDescriptor<_T = ShadowsValue, U extends ShadowsOptions = ShadowsOptions> = {\n type: typeof Types.Shadows\n options: U\n}\n\nexport function Shadows<T extends ShadowsOptions>(\n options: T & ShadowsOptions = {} as T,\n): ShadowsDescriptor<ShadowsValue, T> {\n return { type: Types.Shadows, options }\n}\n\nShadows.Format = ShadowsPropControllerFormat\n\nexport type ShapeValue<T extends Data = Data> = Record<string, T>\n\ntype ShapeOptions<T extends Record<string, PanelDescriptor>> = {\n type: T\n preset?: { [K in keyof T]?: DescriptorValueType<T[K]> }\n}\n\nexport type ShapeDescriptor<\n _T extends Record<string, Data>,\n U extends Record<string, PanelDescriptor>,\n> = {\n type: typeof Types.Shape\n options: ShapeOptions<U>\n}\n\nexport function Shape<T extends Record<string, PanelDescriptor>>(\n options: ShapeOptions<T>,\n): ShapeDescriptor<{ [K in keyof T]?: DescriptorValueType<T[K]> }, T> {\n return { type: Types.Shape, options }\n}\n\ntype SocialLinkType =\n | 'angellist'\n | 'codepen'\n | 'dribbble'\n | 'facebook'\n | 'github'\n | 'instagram'\n | 'linkedin'\n | 'medium'\n | 'pinterest'\n | 'reddit'\n | 'rss'\n | 'snapchat'\n | 'soundcloud'\n | 'spotify'\n | 'telegram'\n | 'tumblr'\n | 'twitch'\n | 'twitter'\n | 'vimeo'\n | 'whatsapp'\n | 'yelp'\n | 'youtube'\n\ntype SocialLink = { type: SocialLinkType; url: string }\n\ntype SocialLinksLink = { id: string; payload: SocialLink }\n\nexport type SocialLinksValue = { links: SocialLinksLink[]; openInNewTab: boolean }\n\ntype SocialLinksOptions = Options<{ preset?: SocialLinksValue }>\n\ntype SocialLinksDescriptor<_T = SocialLinksValue> = {\n type: typeof Types.SocialLinks\n options: SocialLinksOptions\n}\n\nexport function SocialLinks(options: SocialLinksOptions = {}): SocialLinksDescriptor {\n return { type: Types.SocialLinks, options }\n}\n\nexport type TableValue = string\n\ntype TableOptions = Options<{ preset?: TableValue }>\n\ntype TableDescriptor<_T = TableValue> = { type: typeof Types.Table; options: TableOptions }\n\nexport function Table(options: TableOptions = {}): TableDescriptor {\n return { type: Types.Table, options }\n}\n\ntype TableFormField = {\n id: string\n tableColumnId: string\n label?: string\n placeholder?: string\n defaultValue?: string | boolean | string[]\n required?: boolean\n hidden?: boolean\n type?: 'select' | 'radio'\n hideLabel?: boolean\n autofill?: boolean\n}\n\ntype Grid = { count: number; spans: number[][] }\n\nexport type TableFormFieldsValue = { fields: TableFormField[]; grid: ResponsiveValue<Grid> }\n\ntype TableFormFieldsOptions = Options<{ preset?: TableFormFieldsValue }>\n\nexport type TableFormFieldsDescriptor<_T = TableFormFieldsValue> = {\n type: typeof Types.TableFormFields\n options: TableFormFieldsOptions\n}\n\nexport function TableFormFields(options: TableFormFieldsOptions = {}): TableFormFieldsDescriptor {\n return { type: Types.TableFormFields, options }\n}\n\nexport type TypeaheadValue<T extends Data = Data> = {\n id: string\n label: string\n value: T\n}\n\nexport type TypeaheadOptions<T extends Data> = {\n getItems: (query: string) => Promise<TypeaheadValue<T>[]>\n label?: string\n preset?: TypeaheadValue<T>\n defaultValue?: TypeaheadValue<T>\n}\n\nexport type TypeaheadDescriptor<T extends TypeaheadValue = TypeaheadValue> = {\n type: typeof Types.Typeahead\n options: TypeaheadOptions<T extends TypeaheadValue<infer U> ? U : never>\n}\n\nexport function Typeahead<T extends Data>(\n options: TypeaheadOptions<T>,\n): TypeaheadDescriptor<TypeaheadValue<T>> {\n return { type: Types.Typeahead, options }\n}\n\nexport type TextAreaValue = string\n\ntype TextAreaOptions = Options<{ preset?: TextAreaValue; label?: string; rows?: number }>\n\ntype TextAreaDescriptor<_T = TextAreaValue> = {\n type: typeof Types.TextArea\n options: TextAreaOptions\n}\n\nexport function TextArea(options: TextAreaOptions = {}): TextAreaDescriptor {\n return { type: Types.TextArea, options }\n}\n\nexport type TextInputValue = string\n\nexport type TextInputOptions = Options<{ label?: string; placeholder?: string; hidden?: boolean }>\n\nexport type TextInputDescriptor<_T = TextInputValue> = {\n type: typeof Types.TextInput\n options: TextInputOptions\n}\n\nexport function TextInput(options: TextInputOptions = {}): TextInputDescriptor {\n return { type: Types.TextInput, options }\n}\n\nexport type TextStyleValue = ResponsiveValue<TextStyle>\n\nexport type TextStyleOptions = Options<{\n preset?: TextStyleValue\n label?: string\n hidden?: boolean\n}>\n\nexport type TextStyleDescriptor<_T = TextStyleValue> = {\n type: typeof Types.TextStyle\n options: TextStyleOptions\n}\n\nexport function TextStyle(options: TextStyleOptions = {}): TextStyleDescriptor {\n return { type: Types.TextStyle, options }\n}\n\ntype Video = {\n url?: string\n muted?: boolean\n playing?: boolean\n loop?: boolean\n controls?: boolean\n}\n\nexport type VideoValue = Video\n\ntype VideoOptions = Options<{ preset?: VideoValue }>\n\ntype VideoDescriptor<_T = VideoValue> = { type: typeof Types.Video; options: VideoOptions }\n\nexport function Video(options: VideoOptions = {}): VideoDescriptor {\n return { type: Types.Video, options }\n}\n\nexport type WidthValue = ResponsiveValue<Length>\n\nexport const WidthPropControllerFormat = {\n ClassName: 'makeswift::prop-controllers::width::format::class-name',\n ResponsiveValue: 'makeswift::prop-controllers::width::format::responsive-value',\n} as const\n\ntype WidthControlValueFormat =\n typeof WidthPropControllerFormat[keyof typeof WidthPropControllerFormat]\n\ntype WidthOptions = {\n preset?: WidthValue\n defaultValue?: Length\n format?: WidthControlValueFormat\n}\n\nexport type WidthDescriptor<_T = WidthValue, U extends WidthOptions = WidthOptions> = {\n type: typeof Types.Width\n options: U\n}\n\nexport function Width<T extends WidthOptions>(\n options: T & WidthOptions = {} as T,\n): WidthDescriptor<WidthValue, T> {\n return { type: Types.Width, options }\n}\n\nWidth.Format = WidthPropControllerFormat\n\nexport type Descriptor<T extends Data = Data> =\n | BackgroundsDescriptor<T>\n | BorderDescriptor<T>\n | BorderRadiusDescriptor<T>\n | CheckboxDescriptor<T>\n | DateDescriptor<T>\n | ElementIDDescriptor<T>\n | FontDescriptor<T>\n | GapXDescriptor<T>\n | GapYDescriptor<T>\n | GridDescriptor<T>\n | ImageDescriptor<T>\n | ImagesDescriptor<T>\n | LinkDescriptor<T>\n | ListDescriptor<T extends ListValue ? T : ListValue>\n | MarginDescriptor<T>\n | NavigationLinksDescriptor<T>\n | NumberDescriptor<T>\n | PaddingDescriptor<T>\n | ResponsiveColorDescriptor<T>\n | ResponsiveIconRadioGroupDescriptor<\n T extends ResponsiveIconRadioGroupValue<string> ? T : ResponsiveIconRadioGroupValue<string>\n >\n | ResponsiveLengthDescriptor<T>\n | ResponsiveNumberDescriptor<T>\n | ResponsiveOpacityDescriptor<T>\n | ResponsiveSelectDescriptor<\n T extends ResponsiveSelectValue<string> ? T : ResponsiveSelectValue<string>\n >\n | RichTextDescriptor<T>\n | ShadowsDescriptor<T>\n | ShapeDescriptor<T extends ShapeValue ? T : ShapeValue, any>\n | SocialLinksDescriptor<T>\n | TableDescriptor<T>\n | TableFormFieldsDescriptor<T>\n | TypeaheadDescriptor<T extends TypeaheadValue ? T : TypeaheadValue>\n | TextAreaDescriptor<T>\n | TextInputDescriptor<T>\n | TextStyleDescriptor<T>\n | VideoDescriptor<T>\n | WidthDescriptor<T>\n | StyleControlDefinition\n | NumberControlDefinition\n | CheckboxControlDefinition\n | TextInputControlDefinition\n | TextAreaControlDefinition\n | SelectControlDefinition\n | ColorControlDefinition\n | ImageControlDefinition\n | ComboboxControlDefinition\n | ShapeControlDefinition\n | ListControlDefinition\n | LinkControlDefinition\n | SlotControlDefinition\n | RichTextControlDefinition\n\nexport type PanelDescriptorType =\n | typeof Types.Backgrounds\n | typeof Types.ResponsiveIconRadioGroup\n | typeof Types.Margin\n | typeof Types.Padding\n | typeof Types.Border\n | typeof Types.Shadows\n | typeof Types.GapY\n | typeof Types.GapX\n | typeof Types.BorderRadius\n | typeof Types.Checkbox\n | typeof Types.TextInput\n | typeof Types.Link\n | typeof Types.List\n | typeof Types.Shape\n | typeof Types.ResponsiveSelect\n | typeof Types.ResponsiveColor\n | typeof Types.TextStyle\n | typeof Types.Images\n | typeof Types.ResponsiveNumber\n | typeof Types.Number\n | typeof Types.Date\n | typeof Types.Font\n | typeof Types.TextArea\n | typeof Types.Table\n | typeof Types.Typeahead\n | typeof Types.RichText\n | typeof Types.Image\n | typeof Types.ResponsiveOpacity\n | typeof Types.SocialLinks\n | typeof Types.Video\n | typeof Types.NavigationLinks\n\nexport type PanelDescriptor<T extends Data = Data> = Extract<\n Descriptor<T>,\n { type: PanelDescriptorType }\n>\n\nexport type DescriptorValueType<T extends Descriptor> = T extends NumberControlDefinition\n ? NumberControlValue<T>\n : T extends CheckboxControlDefinition\n ? CheckboxControlValue<T>\n : T extends TextInputControlDefinition\n ? TextInputControlValue<T>\n : T extends TextAreaControlDefinition\n ? TextAreaControlValue<T>\n : T extends SelectControlDefinition\n ? SelectControlValue<T>\n : T extends ColorControlDefinition\n ? ColorControlValue<T>\n : T extends StyleControlDefinition\n ? StyleControlFormattedValue\n : T extends ImageControlDefinition\n ? ResolveImageControlValue<T>\n : T extends ComboboxControlDefinition\n ? ComboboxControlValue<T>\n : T extends ShapeControlDefinition\n ? ShapeControlValue<T>\n : T extends ListControlDefinition\n ? ListControlValue<T>\n : T extends LinkControlDefinition\n ? LinkControlValue<T>\n : T extends SlotControlDefinition\n ? SlotControlValue\n : T extends RichTextControlDefinition\n ? RichTextControlValue\n : T['type'] extends typeof Types.ResponsiveColor\n ? ResponsiveColor | null | undefined\n : T['type'] extends typeof Types.Width\n ? ResolveWidthControlValue<T>\n : T['type'] extends typeof Types.Padding\n ? ResolvePaddingControlValue<T>\n : T['type'] extends typeof Types.Margin\n ? ResolveMarginControlValue<T>\n : T['type'] extends typeof Types.BorderRadius\n ? ResolveBorderRadiusControlValue<T>\n : T['type'] extends typeof Types.Shadows\n ? ResolveShadowsControlValue<T>\n : T['type'] extends typeof Types.Border\n ? ResolveBorderControlValue<T>\n : T extends Descriptor<infer U>\n ? U | undefined\n : never\n\nexport type PanelDescriptorValueType<T extends PanelDescriptor> = T extends PanelDescriptor<infer U>\n ? U\n : never\n"],"names":["Image","controlCopy","linkCopy","copy","backgroundsCopy","gridCopy","navigationLinksCopy","shadowsCopy","imageCopy","imagesCopy","responsiveColorCopy","tableFormFieldsCopy","tableCopy","borderCopy","richTextCopy","elementIdCopy","propControllerCopy"],"mappings":"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"}