@makeswift/runtime 0.0.0-20230407200421 → 0.0.0-20230410231005

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/dist/Box.cjs.js +14 -10
  2. package/dist/Box.cjs.js.map +1 -1
  3. package/dist/Box.es.js +9 -5
  4. package/dist/Box.es.js.map +1 -1
  5. package/dist/Button.cjs.js +40 -36
  6. package/dist/Button.cjs.js.map +1 -1
  7. package/dist/Button.es.js +15 -11
  8. package/dist/Button.es.js.map +1 -1
  9. package/dist/Carousel.cjs.js +38 -34
  10. package/dist/Carousel.cjs.js.map +1 -1
  11. package/dist/Carousel.es.js +13 -9
  12. package/dist/Carousel.es.js.map +1 -1
  13. package/dist/Countdown.cjs.js +30 -54
  14. package/dist/Countdown.cjs.js.map +1 -1
  15. package/dist/Countdown.es.js +5 -29
  16. package/dist/Countdown.es.js.map +1 -1
  17. package/dist/Divider.cjs.js +11 -35
  18. package/dist/Divider.cjs.js.map +1 -1
  19. package/dist/Divider.es.js +5 -29
  20. package/dist/Divider.es.js.map +1 -1
  21. package/dist/Embed.cjs.js +6 -30
  22. package/dist/Embed.cjs.js.map +1 -1
  23. package/dist/Embed.es.js +5 -29
  24. package/dist/Embed.es.js.map +1 -1
  25. package/dist/Form.cjs.js +76 -72
  26. package/dist/Form.cjs.js.map +1 -1
  27. package/dist/Form.es.js +14 -10
  28. package/dist/Form.es.js.map +1 -1
  29. package/dist/Image.cjs.js +22 -18
  30. package/dist/Image.cjs.js.map +1 -1
  31. package/dist/Image.es.js +15 -11
  32. package/dist/Image.es.js.map +1 -1
  33. package/dist/LiveProvider.cjs.js +14 -10
  34. package/dist/LiveProvider.cjs.js.map +1 -1
  35. package/dist/LiveProvider.es.js +14 -10
  36. package/dist/LiveProvider.es.js.map +1 -1
  37. package/dist/Navigation.cjs.js +41 -37
  38. package/dist/Navigation.cjs.js.map +1 -1
  39. package/dist/Navigation.es.js +15 -11
  40. package/dist/Navigation.es.js.map +1 -1
  41. package/dist/PreviewProvider.cjs.js +12 -8
  42. package/dist/PreviewProvider.cjs.js.map +1 -1
  43. package/dist/PreviewProvider.es.js +12 -8
  44. package/dist/PreviewProvider.es.js.map +1 -1
  45. package/dist/ReadOnlyText.cjs.js +71 -67
  46. package/dist/ReadOnlyText.cjs.js.map +1 -1
  47. package/dist/ReadOnlyText.es.js +15 -11
  48. package/dist/ReadOnlyText.es.js.map +1 -1
  49. package/dist/Root.cjs.js +13 -9
  50. package/dist/Root.cjs.js.map +1 -1
  51. package/dist/Root.es.js +11 -7
  52. package/dist/Root.es.js.map +1 -1
  53. package/dist/SocialLinks.cjs.js +16 -12
  54. package/dist/SocialLinks.cjs.js.map +1 -1
  55. package/dist/SocialLinks.es.js +9 -5
  56. package/dist/SocialLinks.es.js.map +1 -1
  57. package/dist/Text.cjs.js +7 -3
  58. package/dist/Text.cjs.js.map +1 -1
  59. package/dist/Text.es.js +8 -4
  60. package/dist/Text.es.js.map +1 -1
  61. package/dist/Video.cjs.js +6 -30
  62. package/dist/Video.cjs.js.map +1 -1
  63. package/dist/Video.es.js +5 -29
  64. package/dist/Video.es.js.map +1 -1
  65. package/dist/actions.cjs.js +0 -13
  66. package/dist/actions.cjs.js.map +1 -1
  67. package/dist/actions.es.js +1 -12
  68. package/dist/actions.es.js.map +1 -1
  69. package/dist/api.cjs.js +1 -1
  70. package/dist/api.es.js +1 -1
  71. package/dist/builder.cjs.js +1 -0
  72. package/dist/builder.cjs.js.map +1 -1
  73. package/dist/builder.es.js +1 -0
  74. package/dist/builder.es.js.map +1 -1
  75. package/dist/components.cjs.js +14 -10
  76. package/dist/components.cjs.js.map +1 -1
  77. package/dist/components.es.js +14 -10
  78. package/dist/components.es.js.map +1 -1
  79. package/dist/control-serialization.cjs.js +37 -36
  80. package/dist/control-serialization.cjs.js.map +1 -1
  81. package/dist/control-serialization.es.js +2 -1
  82. package/dist/control-serialization.es.js.map +1 -1
  83. package/dist/controls.cjs.js +22 -22
  84. package/dist/controls.es.js +2 -1
  85. package/dist/controls.es.js.map +1 -1
  86. package/dist/index.cjs.js +548 -1689
  87. package/dist/index.cjs.js.map +1 -1
  88. package/dist/index.cjs2.js +23 -21
  89. package/dist/index.cjs2.js.map +1 -1
  90. package/dist/index.cjs3.js +2 -1
  91. package/dist/index.cjs3.js.map +1 -1
  92. package/dist/index.cjs4.js +2 -2
  93. package/dist/index.cjs4.js.map +1 -1
  94. package/dist/index.cjs5.js +20 -20
  95. package/dist/index.cjs5.js.map +1 -1
  96. package/dist/index.cjs6.js +7 -3
  97. package/dist/index.cjs6.js.map +1 -1
  98. package/dist/index.cjs7.js +50 -46
  99. package/dist/index.cjs7.js.map +1 -1
  100. package/dist/index.es.js +329 -1450
  101. package/dist/index.es.js.map +1 -1
  102. package/dist/index.es2.js +5 -3
  103. package/dist/index.es2.js.map +1 -1
  104. package/dist/index.es3.js +2 -1
  105. package/dist/index.es3.js.map +1 -1
  106. package/dist/index.es4.js +1 -1
  107. package/dist/index.es5.js +3 -3
  108. package/dist/index.es5.js.map +1 -1
  109. package/dist/index.es6.js +7 -3
  110. package/dist/index.es6.js.map +1 -1
  111. package/dist/index.es7.js +16 -12
  112. package/dist/index.es7.js.map +1 -1
  113. package/dist/introspection.cjs.js +21 -23
  114. package/dist/introspection.cjs.js.map +1 -1
  115. package/dist/introspection.es.js +4 -5
  116. package/dist/introspection.es.js.map +1 -1
  117. package/dist/isNonNullable.cjs.js +6 -0
  118. package/dist/isNonNullable.cjs.js.map +1 -0
  119. package/dist/isNonNullable.es.js +5 -0
  120. package/dist/isNonNullable.es.js.map +1 -0
  121. package/dist/leaf.cjs.js +11 -11
  122. package/dist/leaf.cjs.js.map +1 -1
  123. package/dist/leaf.es.js +2 -2
  124. package/dist/main.cjs.js +2 -0
  125. package/dist/main.cjs.js.map +1 -1
  126. package/dist/main.es.js +2 -0
  127. package/dist/main.es.js.map +1 -1
  128. package/dist/next.cjs.js +9 -6
  129. package/dist/next.cjs.js.map +1 -1
  130. package/dist/next.es.js +10 -6
  131. package/dist/next.es.js.map +1 -1
  132. package/dist/prop-controllers.cjs.js +3 -1
  133. package/dist/prop-controllers.cjs.js.map +1 -1
  134. package/dist/prop-controllers.es.js +3 -1
  135. package/dist/prop-controllers.es.js.map +1 -1
  136. package/dist/react.cjs.js +7 -3
  137. package/dist/react.cjs.js.map +1 -1
  138. package/dist/react.es.js +7 -3
  139. package/dist/react.es.js.map +1 -1
  140. package/dist/responsive-style.cjs.js +917 -0
  141. package/dist/responsive-style.cjs.js.map +1 -0
  142. package/dist/responsive-style.es.js +853 -0
  143. package/dist/responsive-style.es.js.map +1 -0
  144. package/dist/rich-text.cjs.js +61 -1319
  145. package/dist/rich-text.cjs.js.map +1 -1
  146. package/dist/rich-text.es.js +17 -1217
  147. package/dist/rich-text.es.js.map +1 -1
  148. package/dist/slate.cjs.js +8 -28
  149. package/dist/slate.cjs.js.map +1 -1
  150. package/dist/slate.es.js +8 -28
  151. package/dist/slate.es.js.map +1 -1
  152. package/dist/types/src/api/graphql/documents/queries.d.ts +0 -2
  153. package/dist/types/src/api/graphql/documents/queries.d.ts.map +1 -1
  154. package/dist/types/src/api/graphql/generated/types.d.ts +0 -70
  155. package/dist/types/src/api/graphql/generated/types.d.ts.map +1 -1
  156. package/dist/types/src/api/react.d.ts +0 -3
  157. package/dist/types/src/api/react.d.ts.map +1 -1
  158. package/dist/types/src/controls/rich-text/types.d.ts +1 -16
  159. package/dist/types/src/controls/rich-text/types.d.ts.map +1 -1
  160. package/dist/types/src/next/api-handler/handlers/element-tree.d.ts +12 -0
  161. package/dist/types/src/next/api-handler/handlers/element-tree.d.ts.map +1 -0
  162. package/dist/types/src/next/api-handler/handlers/fonts.d.ts +18 -0
  163. package/dist/types/src/next/api-handler/handlers/fonts.d.ts.map +1 -0
  164. package/dist/types/src/next/api-handler/handlers/manifest.d.ts +17 -0
  165. package/dist/types/src/next/api-handler/handlers/manifest.d.ts.map +1 -0
  166. package/dist/types/src/next/api-handler/handlers/proxy-preview-mode.d.ts +8 -0
  167. package/dist/types/src/next/api-handler/handlers/proxy-preview-mode.d.ts.map +1 -0
  168. package/dist/types/src/next/api-handler/handlers/revalidate.d.ts +13 -0
  169. package/dist/types/src/next/api-handler/handlers/revalidate.d.ts.map +1 -0
  170. package/dist/types/src/next/api-handler/index.d.ts +19 -0
  171. package/dist/types/src/next/api-handler/index.d.ts.map +1 -0
  172. package/dist/types/src/next/client.d.ts +11 -35
  173. package/dist/types/src/next/client.d.ts.map +1 -1
  174. package/dist/types/src/next/index.d.ts +1 -6
  175. package/dist/types/src/next/index.d.ts.map +1 -1
  176. package/dist/types/src/state/actions.d.ts +2 -22
  177. package/dist/types/src/state/actions.d.ts.map +1 -1
  178. package/dist/types/src/state/makeswift-api-client.d.ts +4 -9
  179. package/dist/types/src/state/makeswift-api-client.d.ts.map +1 -1
  180. package/dist/types/src/state/modules/api-resources.d.ts +4 -4
  181. package/dist/types/src/state/modules/api-resources.d.ts.map +1 -1
  182. package/dist/types.cjs.js +1272 -10
  183. package/dist/types.cjs.js.map +1 -1
  184. package/dist/types.cjs2.js +14 -0
  185. package/dist/types.cjs2.js.map +1 -0
  186. package/dist/types.es.js +1207 -10
  187. package/dist/types.es.js.map +1 -1
  188. package/dist/types.es2.js +13 -0
  189. package/dist/types.es2.js.map +1 -0
  190. package/package.json +3 -2
  191. package/dist/types/src/api/introspection.d.ts +0 -11
  192. package/dist/types/src/api/introspection.d.ts.map +0 -1
  193. package/dist/types/src/next/api-handler.d.ts +0 -48
  194. package/dist/types/src/next/api-handler.d.ts.map +0 -1
  195. package/dist/types/src/next/snapshots.d.ts +0 -152
  196. package/dist/types/src/next/snapshots.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"types.es.js","sources":["../src/api/graphql/types.ts"],"sourcesContent":["import {\n SwatchFragment as Swatch,\n FileFragment as File,\n TypographyFragment as Typography,\n PagePathnameSliceFragment as PagePathnameSlice,\n GlobalElementFragment as GlobalElement,\n TableFragment as Table,\n SnippetFragment as Snippet,\n PageFragment as Page,\n SiteFragment as Site,\n} from './generated/types'\n\nexport type {\n Swatch,\n File,\n Typography,\n PagePathnameSlice,\n GlobalElement,\n Table,\n Snippet,\n Page,\n Site,\n}\n\nexport type APIResource =\n | Swatch\n | File\n | Typography\n | PagePathnameSlice\n | GlobalElement\n | Table\n | Snippet\n | Page\n | Site\n\nexport const APIResourceType: { [R in APIResource as R['__typename']]: R['__typename'] } = {\n Swatch: 'Swatch',\n File: 'File',\n Typography: 'Typography',\n PagePathnameSlice: 'PagePathnameSlice',\n GlobalElement: 'GlobalElement',\n Table: 'Table',\n Snippet: 'Snippet',\n Page: 'Page',\n Site: 'Site',\n}\n\nexport type APIResourceType = typeof APIResourceType[keyof typeof APIResourceType]\n"],"names":[],"mappings":"AAmCO,MAAM,kBAA8E;AAAA,EACzF,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AACR;;"}
1
+ {"version":3,"file":"types.es.js","sources":["../src/controls/color.ts","../src/controls/style.ts","../src/prop-controllers/descriptors.ts","../src/controls/image.ts","../src/controls/link.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/table-form-fields.ts","../src/prop-controllers/copy/table.ts","../src/prop-controllers/copy/border.ts","../src/prop-controllers/copy/rich-text.ts","../src/controls/rich-text/types.ts"],"sourcesContent":["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 { 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'\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 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 { StyleControlDefinition, StyleControlType } from '../controls/style'\nimport {\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} 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","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 { 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, 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 { 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"],"names":["linkCopy","copy"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ const APIResourceType = {
2
+ Swatch: "Swatch",
3
+ File: "File",
4
+ Typography: "Typography",
5
+ PagePathnameSlice: "PagePathnameSlice",
6
+ GlobalElement: "GlobalElement",
7
+ Table: "Table",
8
+ Snippet: "Snippet",
9
+ Page: "Page",
10
+ Site: "Site"
11
+ };
12
+ export { APIResourceType as A };
13
+ //# sourceMappingURL=types.es2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.es2.js","sources":["../src/api/graphql/types.ts"],"sourcesContent":["import {\n SwatchFragment as Swatch,\n FileFragment as File,\n TypographyFragment as Typography,\n PagePathnameSliceFragment as PagePathnameSlice,\n GlobalElementFragment as GlobalElement,\n TableFragment as Table,\n SnippetFragment as Snippet,\n PageFragment as Page,\n SiteFragment as Site,\n} from './generated/types'\n\nexport type {\n Swatch,\n File,\n Typography,\n PagePathnameSlice,\n GlobalElement,\n Table,\n Snippet,\n Page,\n Site,\n}\n\nexport type APIResource =\n | Swatch\n | File\n | Typography\n | PagePathnameSlice\n | GlobalElement\n | Table\n | Snippet\n | Page\n | Site\n\nexport const APIResourceType: { [R in APIResource as R['__typename']]: R['__typename'] } = {\n Swatch: 'Swatch',\n File: 'File',\n Typography: 'Typography',\n PagePathnameSlice: 'PagePathnameSlice',\n GlobalElement: 'GlobalElement',\n Table: 'Table',\n Snippet: 'Snippet',\n Page: 'Page',\n Site: 'Site',\n}\n\nexport type APIResourceType = typeof APIResourceType[keyof typeof APIResourceType]\n"],"names":[],"mappings":"AAmCO,MAAM,kBAA8E;AAAA,EACzF,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM;AACR;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makeswift/runtime",
3
- "version": "0.0.0-20230407200421",
3
+ "version": "0.0.0-20230410231005",
4
4
  "license": "MIT",
5
5
  "main": "dist/main.cjs",
6
6
  "module": "dist/main.es",
@@ -112,7 +112,7 @@
112
112
  "@emotion/server": "^11.4.0",
113
113
  "@emotion/sheet": "^1.0.3",
114
114
  "@emotion/utils": "^1.0.0",
115
- "@makeswift/next-plugin": "0.2.6",
115
+ "@makeswift/next-plugin": "0.0.0-20230410231005",
116
116
  "@popmotion/popcorn": "^0.4.4",
117
117
  "@types/cookie": "^0.5.1",
118
118
  "@types/http-proxy": "^1.17.9",
@@ -137,6 +137,7 @@
137
137
  "immutable": "^4.0.0-rc.12",
138
138
  "is-hotkey": "^0.1.4",
139
139
  "ot-json0": "^1.1.0",
140
+ "path-to-regexp": "^6.2.1",
140
141
  "polished": "3.0.3",
141
142
  "react-player": "^1.12.0",
142
143
  "redux": "^4.0.5",
@@ -1,11 +0,0 @@
1
- import { Element, Store } from '../state/react-page';
2
- import { MakeswiftClient } from './react';
3
- export declare type IntrospectedResourceIds = {
4
- swatchIds: string[];
5
- fileIds: string[];
6
- typographyIds: string[];
7
- tableIds: string[];
8
- pageIds: string[];
9
- };
10
- export declare function introspect(element: Element, client: MakeswiftClient, store: Store): Promise<IntrospectedResourceIds>;
11
- //# sourceMappingURL=introspection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"introspection.d.ts","sourceRoot":"","sources":["../../../../src/api/introspection.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,OAAO,EAIP,KAAK,EACN,MAAM,qBAAqB,CAAA;AAI5B,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAEzC,oBAAY,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,uBAAuB,CAAC,CAyHlC"}
@@ -1,48 +0,0 @@
1
- import { NextApiHandler } from 'next';
2
- import { unstable_Snapshot } from './client';
3
- declare type Fonts = Font[];
4
- declare type Font = {
5
- family: string;
6
- variants: FontVariant[];
7
- };
8
- declare type FontVariant = {
9
- weight: string;
10
- style: 'italic' | 'normal';
11
- src?: string;
12
- };
13
- declare type MakeswiftApiHandlerConfig = {
14
- appOrigin?: string;
15
- apiOrigin?: string;
16
- getFonts?: () => Fonts | Promise<Fonts>;
17
- };
18
- export declare type MakeswiftApiHandlerErrorResponse = {
19
- message: string;
20
- };
21
- export declare type MakeswiftApiHandlerRevalidateErrorResponse = string;
22
- export declare type MakeswiftApiHandlerRevalidateResponse = {
23
- revalidated: boolean;
24
- };
25
- export declare type MakeswiftApiHandlerManifestResponse = {
26
- version: string;
27
- previewMode: boolean;
28
- interactionMode: boolean;
29
- clientSideNavigation: boolean;
30
- elementFromPoint: boolean;
31
- };
32
- export declare type MakeswiftApiHandlerFontsResponse = Fonts;
33
- export declare type MakeswiftApiHandlerElementTreeResponse = {
34
- elementTree: any;
35
- };
36
- export declare type MakeswiftApiHandlerCreateSnapshotResponse = {
37
- pageId: string;
38
- snapshot: unstable_Snapshot;
39
- livePageChanges?: {
40
- online?: boolean;
41
- pathname?: string;
42
- };
43
- usedResources: string[];
44
- };
45
- export declare type MakeswiftApiHandlerResponse = MakeswiftApiHandlerErrorResponse | MakeswiftApiHandlerRevalidateErrorResponse | MakeswiftApiHandlerRevalidateResponse | MakeswiftApiHandlerManifestResponse | MakeswiftApiHandlerFontsResponse | MakeswiftApiHandlerElementTreeResponse | MakeswiftApiHandlerCreateSnapshotResponse;
46
- export declare function MakeswiftApiHandler(apiKey: string, { appOrigin, apiOrigin, getFonts, }?: MakeswiftApiHandlerConfig): NextApiHandler<MakeswiftApiHandlerResponse>;
47
- export {};
48
- //# sourceMappingURL=api-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-handler.d.ts","sourceRoot":"","sources":["../../../../src/next/api-handler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAOrC,OAAO,EAAoC,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAG9E,aAAK,KAAK,GAAG,IAAI,EAAE,CAAA;AAEnB,aAAK,IAAI,GAAG;IACV,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,WAAW,EAAE,CAAA;CACxB,CAAA;AAED,aAAK,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE/E,aAAK,yBAAyB,GAAG;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;CACxC,CAAA;AAED,oBAAY,gCAAgC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAClE,oBAAY,0CAA0C,GAAG,MAAM,CAAA;AAC/D,oBAAY,qCAAqC,GAAG;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,CAAA;AAC5E,oBAAY,mCAAmC,GAAG;IAChD,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,OAAO,CAAA;IACpB,eAAe,EAAE,OAAO,CAAA;IACxB,oBAAoB,EAAE,OAAO,CAAA;IAC7B,gBAAgB,EAAE,OAAO,CAAA;CAC1B,CAAA;AACD,oBAAY,gCAAgC,GAAG,KAAK,CAAA;AACpD,oBAAY,sCAAsC,GAAG;IAAE,WAAW,EAAE,GAAG,CAAA;CAAE,CAAA;AACzE,oBAAY,yCAAyC,GAAG;IACtD,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,eAAe,CAAC,EAAE;QAChB,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,aAAa,EAAE,MAAM,EAAE,CAAA;CACxB,CAAA;AAED,oBAAY,2BAA2B,GACnC,gCAAgC,GAChC,0CAA0C,GAC1C,qCAAqC,GACrC,mCAAmC,GACnC,gCAAgC,GAChC,sCAAsC,GACtC,yCAAyC,CAAA;AAE7C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,EACE,SAAuC,EACvC,SAAuC,EACvC,QAAQ,GACT,GAAE,yBAA8B,GAChC,cAAc,CAAC,2BAA2B,CAAC,CAiY7C"}
@@ -1,152 +0,0 @@
1
- import { File } from '../api';
2
- export declare type IdSpecified<T> = {
3
- id: string;
4
- value: T;
5
- };
6
- export declare type MakeswiftSnapshotResources = {
7
- swatches: IdSpecified<SwatchResource>[];
8
- typographies: IdSpecified<TypographyResource>[];
9
- files: IdSpecified<FileSnapshot>[];
10
- tables: IdSpecified<TableResource>[];
11
- pagePathnameSlices: IdSpecified<PathPathnameSliceResource>[];
12
- globalElements: IdSpecified<GlobalElementResource>[];
13
- snippets: IdSpecified<SnippetResource>[];
14
- fonts: IdSpecified<FontResource>[];
15
- pageMetadata: {
16
- title?: string | null;
17
- description?: string | null;
18
- keywords?: string | null;
19
- socialImage?: {
20
- id: string;
21
- publicUrl: string;
22
- mimetype: string;
23
- } | null;
24
- favicon?: {
25
- id: string;
26
- publicUrl: string;
27
- mimetype: string;
28
- } | null;
29
- };
30
- pageSeo: {
31
- canonicalUrl?: string | null;
32
- isIndexingBlocked?: boolean | null;
33
- };
34
- };
35
- declare type SwatchResource = {
36
- id: string;
37
- hue: number;
38
- saturation: number;
39
- lightness: number;
40
- };
41
- declare type TypographyResource = {
42
- id: string;
43
- name: string;
44
- style: Array<{
45
- deviceId: string;
46
- value: {
47
- fontFamily: string | null;
48
- lineHeight: number | null;
49
- letterSpacing: number | null;
50
- fontWeight: number | null;
51
- textAlign: string | null;
52
- uppercase: boolean | null;
53
- underline: boolean | null;
54
- strikethrough: boolean | null;
55
- italic: boolean | null;
56
- fontSize: {
57
- value: number | null;
58
- unit: string | null;
59
- } | null;
60
- color: {
61
- swatchId: string | null;
62
- alpha: number | null;
63
- } | null;
64
- };
65
- }>;
66
- };
67
- declare type FileSnapshot = {
68
- id: string;
69
- name: string;
70
- publicUrl: string;
71
- extension: string | null;
72
- dimensions: {
73
- width: number;
74
- height: number;
75
- } | null;
76
- };
77
- declare type TableResource = {
78
- id: string;
79
- name: string;
80
- columns: Array<{
81
- __typename: 'CheckboxTableColumn';
82
- id: string;
83
- name: string;
84
- } | {
85
- __typename: 'EmailTableColumn';
86
- id: string;
87
- name: string;
88
- } | {
89
- __typename: 'LongTextTableColumn';
90
- id: string;
91
- name: string;
92
- } | {
93
- __typename: 'MultipleSelectTableColumn';
94
- id: string;
95
- name: string;
96
- options: Array<{
97
- id: string;
98
- name: string;
99
- }>;
100
- } | {
101
- __typename: 'NumberTableColumn';
102
- id: string;
103
- name: string;
104
- } | {
105
- __typename: 'PhoneNumberTableColumn';
106
- id: string;
107
- name: string;
108
- } | {
109
- __typename: 'SingleLineTextTableColumn';
110
- id: string;
111
- name: string;
112
- } | {
113
- __typename: 'SingleSelectTableColumn';
114
- id: string;
115
- name: string;
116
- options: Array<{
117
- id: string;
118
- name: string;
119
- }>;
120
- } | {
121
- __typename: 'URLTableColumn';
122
- id: string;
123
- name: string;
124
- }>;
125
- };
126
- declare type PathPathnameSliceResource = {
127
- id: string;
128
- pathname: string;
129
- };
130
- declare type Json = null | boolean | number | string | Json[] | {
131
- [key: string]: Json;
132
- };
133
- declare type GlobalElementResource = {
134
- id: string;
135
- data: Json;
136
- };
137
- declare type SnippetResource = {
138
- id: string;
139
- code: string;
140
- location: 'HEAD' | 'BODY';
141
- liveEnabled: boolean;
142
- builderEnabled: boolean;
143
- cleanup: string | null;
144
- };
145
- declare type FontResource = {
146
- family: string;
147
- variants: string[];
148
- };
149
- export declare function normalizeToMakeswiftResources(partialResources?: Partial<MakeswiftSnapshotResources>): MakeswiftSnapshotResources;
150
- export declare function fileToFileSnapshot(file: File): FileSnapshot;
151
- export {};
152
- //# sourceMappingURL=snapshots.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"snapshots.d.ts","sourceRoot":"","sources":["../../../../src/next/snapshots.ts"],"names":[],"mappings":"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"}