@makeswift/runtime 0.28.8-canary.0 → 0.28.8-canary.10

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 (227) hide show
  1. package/dist/cjs/api/graphql-api-client.js +1 -1
  2. package/dist/cjs/api/makeswift-api-resources-client.js +25 -11
  3. package/dist/cjs/api/makeswift-api-resources-client.js.map +1 -1
  4. package/dist/cjs/api/rest-api-client.js +1 -1
  5. package/dist/cjs/api-handler/handlers/manifest.js +1 -1
  6. package/dist/cjs/client/index.js +1 -1
  7. package/dist/cjs/components/builtin/Embed/Embed.js +2 -1
  8. package/dist/cjs/components/builtin/Embed/Embed.js.map +1 -1
  9. package/dist/cjs/components/builtin/Navigation/components/DropDownButton/index.js.map +1 -1
  10. package/dist/cjs/components/shared/BackgroundsContainer/components/BackgroundVideo/index.js.map +1 -1
  11. package/dist/cjs/controls/index.js +4 -0
  12. package/dist/cjs/controls/index.js.map +1 -1
  13. package/dist/cjs/controls/link.js.map +1 -1
  14. package/dist/cjs/controls/rich-text/rich-text.js +2 -2
  15. package/dist/cjs/controls/rich-text/rich-text.js.map +1 -1
  16. package/dist/cjs/controls/rich-text-v2/control.js +2 -2
  17. package/dist/cjs/controls/rich-text-v2/control.js.map +1 -1
  18. package/dist/cjs/controls/rich-text-v2/rich-text-v2.js +2 -2
  19. package/dist/cjs/controls/rich-text-v2/rich-text-v2.js.map +1 -1
  20. package/dist/cjs/controls/serialization/base/index.js +1 -0
  21. package/dist/cjs/controls/serialization/base/index.js.map +1 -1
  22. package/dist/cjs/next/components/framework-provider/app-router/index.js +0 -2
  23. package/dist/cjs/next/components/framework-provider/app-router/index.js.map +1 -1
  24. package/dist/cjs/next/components/framework-provider/index.js +1 -1
  25. package/dist/cjs/next/components/framework-provider/index.js.map +1 -1
  26. package/dist/cjs/prop-controllers/instances.js +7 -4
  27. package/dist/cjs/prop-controllers/instances.js.map +1 -1
  28. package/dist/cjs/runtimes/react/components/ElementData.js +2 -2
  29. package/dist/cjs/runtimes/react/components/ElementData.js.map +1 -1
  30. package/dist/cjs/runtimes/react/components/framework-context.js +18 -12
  31. package/dist/cjs/runtimes/react/components/framework-context.js.map +1 -1
  32. package/dist/cjs/runtimes/react/components/hooks/use-framework-context.js +1 -5
  33. package/dist/cjs/runtimes/react/components/hooks/use-framework-context.js.map +1 -1
  34. package/dist/cjs/runtimes/react/components/resolve-props.js +50 -0
  35. package/dist/cjs/runtimes/react/components/resolve-props.js.map +1 -0
  36. package/dist/cjs/runtimes/react/controls/rich-text/EditableText/useSyncWithBuilder.js +4 -2
  37. package/dist/cjs/runtimes/react/controls/rich-text/EditableText/useSyncWithBuilder.js.map +1 -1
  38. package/dist/cjs/runtimes/react/controls/style.js.map +1 -1
  39. package/dist/cjs/runtimes/react/hooks/use-control-defs.js +40 -0
  40. package/dist/cjs/runtimes/react/hooks/use-control-defs.js.map +1 -0
  41. package/dist/cjs/runtimes/react/hooks/use-control-instances.js +39 -0
  42. package/dist/cjs/runtimes/react/hooks/use-control-instances.js.map +1 -0
  43. package/dist/cjs/runtimes/react/hooks/use-resolved-props.js +11 -28
  44. package/dist/cjs/runtimes/react/hooks/use-resolved-props.js.map +1 -1
  45. package/dist/cjs/runtimes/react/hooks/use-stylesheet-factory.js +3 -3
  46. package/dist/cjs/runtimes/react/hooks/use-stylesheet-factory.js.map +1 -1
  47. package/dist/cjs/runtimes/react/react-runtime-core.js +2 -1
  48. package/dist/cjs/runtimes/react/react-runtime-core.js.map +1 -1
  49. package/dist/cjs/runtimes/react/runtime-core.js +13 -0
  50. package/dist/cjs/runtimes/react/runtime-core.js.map +1 -1
  51. package/dist/cjs/runtimes/react/stylesheet-factory.js +17 -0
  52. package/dist/cjs/runtimes/react/stylesheet-factory.js.map +1 -0
  53. package/dist/cjs/slate/TypographyPlugin/normalizeTypographyUp.js.map +1 -1
  54. package/dist/cjs/slate/selectors.js.map +1 -1
  55. package/dist/cjs/slate/utils/toText.js.map +1 -1
  56. package/dist/cjs/state/middleware/read-write/prop-controller-handles.js +4 -3
  57. package/dist/cjs/state/middleware/read-write/prop-controller-handles.js.map +1 -1
  58. package/dist/cjs/state/modules/components-meta.js.map +1 -1
  59. package/dist/cjs/state/modules/element-trees.js +48 -20
  60. package/dist/cjs/state/modules/element-trees.js.map +1 -1
  61. package/dist/cjs/state/translations/get.js +1 -4
  62. package/dist/cjs/state/translations/get.js.map +1 -1
  63. package/dist/cjs/testing/fixtures/index.js +4 -2
  64. package/dist/cjs/testing/fixtures/index.js.map +1 -1
  65. package/dist/cjs/{utils/is.js → testing/fixtures/snippet.js} +17 -7
  66. package/dist/cjs/testing/fixtures/snippet.js.map +1 -0
  67. package/dist/cjs/translations/index.js.map +1 -1
  68. package/dist/cjs/unstable-framework-support/index.js +2 -8
  69. package/dist/cjs/unstable-framework-support/index.js.map +1 -1
  70. package/dist/cjs/utils/intersection.js.map +1 -1
  71. package/dist/esm/api/graphql-api-client.js +1 -1
  72. package/dist/esm/api/makeswift-api-resources-client.js +15 -11
  73. package/dist/esm/api/makeswift-api-resources-client.js.map +1 -1
  74. package/dist/esm/api/rest-api-client.js +1 -1
  75. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  76. package/dist/esm/client/index.js +1 -1
  77. package/dist/esm/components/builtin/Embed/Embed.js +3 -2
  78. package/dist/esm/components/builtin/Embed/Embed.js.map +1 -1
  79. package/dist/esm/components/builtin/Navigation/components/DropDownButton/index.js +5 -1
  80. package/dist/esm/components/builtin/Navigation/components/DropDownButton/index.js.map +1 -1
  81. package/dist/esm/components/shared/BackgroundsContainer/components/BackgroundVideo/index.js +5 -1
  82. package/dist/esm/components/shared/BackgroundsContainer/components/BackgroundVideo/index.js.map +1 -1
  83. package/dist/esm/controls/index.js +4 -0
  84. package/dist/esm/controls/index.js.map +1 -1
  85. package/dist/esm/controls/link.js.map +1 -1
  86. package/dist/esm/controls/rich-text/rich-text.js +2 -2
  87. package/dist/esm/controls/rich-text/rich-text.js.map +1 -1
  88. package/dist/esm/controls/rich-text-v2/control.js +2 -2
  89. package/dist/esm/controls/rich-text-v2/control.js.map +1 -1
  90. package/dist/esm/controls/rich-text-v2/rich-text-v2.js +2 -2
  91. package/dist/esm/controls/rich-text-v2/rich-text-v2.js.map +1 -1
  92. package/dist/esm/controls/serialization/base/index.js +2 -0
  93. package/dist/esm/controls/serialization/base/index.js.map +1 -1
  94. package/dist/esm/next/components/framework-provider/app-router/index.js +0 -4
  95. package/dist/esm/next/components/framework-provider/app-router/index.js.map +1 -1
  96. package/dist/esm/next/components/framework-provider/index.js +4 -2
  97. package/dist/esm/next/components/framework-provider/index.js.map +1 -1
  98. package/dist/esm/prop-controllers/instances.js +7 -4
  99. package/dist/esm/prop-controllers/instances.js.map +1 -1
  100. package/dist/esm/runtimes/react/components/ElementData.js +1 -1
  101. package/dist/esm/runtimes/react/components/ElementData.js.map +1 -1
  102. package/dist/esm/runtimes/react/components/framework-context.js +19 -8
  103. package/dist/esm/runtimes/react/components/framework-context.js.map +1 -1
  104. package/dist/esm/runtimes/react/components/hooks/use-framework-context.js +1 -5
  105. package/dist/esm/runtimes/react/components/hooks/use-framework-context.js.map +1 -1
  106. package/dist/esm/runtimes/react/components/resolve-props.js +26 -0
  107. package/dist/esm/runtimes/react/components/resolve-props.js.map +1 -0
  108. package/dist/esm/runtimes/react/controls/rich-text/EditableText/useSyncWithBuilder.js +4 -2
  109. package/dist/esm/runtimes/react/controls/rich-text/EditableText/useSyncWithBuilder.js.map +1 -1
  110. package/dist/esm/runtimes/react/controls/style.js.map +1 -1
  111. package/dist/esm/runtimes/react/hooks/use-control-defs.js +16 -0
  112. package/dist/esm/runtimes/react/hooks/use-control-defs.js.map +1 -0
  113. package/dist/esm/runtimes/react/hooks/use-control-instances.js +15 -0
  114. package/dist/esm/runtimes/react/hooks/use-control-instances.js.map +1 -0
  115. package/dist/esm/runtimes/react/hooks/use-resolved-props.js +10 -17
  116. package/dist/esm/runtimes/react/hooks/use-resolved-props.js.map +1 -1
  117. package/dist/esm/runtimes/react/hooks/use-stylesheet-factory.js +3 -3
  118. package/dist/esm/runtimes/react/hooks/use-stylesheet-factory.js.map +1 -1
  119. package/dist/esm/runtimes/react/react-runtime-core.js +2 -1
  120. package/dist/esm/runtimes/react/react-runtime-core.js.map +1 -1
  121. package/dist/esm/runtimes/react/runtime-core.js +13 -0
  122. package/dist/esm/runtimes/react/runtime-core.js.map +1 -1
  123. package/dist/esm/runtimes/react/stylesheet-factory.js +1 -0
  124. package/dist/esm/runtimes/react/stylesheet-factory.js.map +1 -0
  125. package/dist/esm/slate/TypographyPlugin/normalizeTypographyUp.js.map +1 -1
  126. package/dist/esm/slate/selectors.js.map +1 -1
  127. package/dist/esm/slate/utils/toText.js.map +1 -1
  128. package/dist/esm/state/middleware/read-write/prop-controller-handles.js +4 -3
  129. package/dist/esm/state/middleware/read-write/prop-controller-handles.js.map +1 -1
  130. package/dist/esm/state/modules/components-meta.js.map +1 -1
  131. package/dist/esm/state/modules/element-trees.js +48 -20
  132. package/dist/esm/state/modules/element-trees.js.map +1 -1
  133. package/dist/esm/state/translations/get.js +1 -4
  134. package/dist/esm/state/translations/get.js.map +1 -1
  135. package/dist/esm/testing/fixtures/index.js +2 -1
  136. package/dist/esm/testing/fixtures/index.js.map +1 -1
  137. package/dist/esm/testing/fixtures/snippet.js +12 -0
  138. package/dist/esm/testing/fixtures/snippet.js.map +1 -0
  139. package/dist/esm/translations/index.js.map +1 -1
  140. package/dist/esm/unstable-framework-support/index.js +2 -8
  141. package/dist/esm/unstable-framework-support/index.js.map +1 -1
  142. package/dist/esm/utils/intersection.js.map +1 -1
  143. package/dist/types/api/makeswift-api-resources-client.d.ts.map +1 -1
  144. package/dist/types/components/builtin/Embed/Embed.d.ts.map +1 -1
  145. package/dist/types/components/builtin/Navigation/components/DropDownButton/index.d.ts.map +1 -1
  146. package/dist/types/components/shared/BackgroundsContainer/components/BackgroundVideo/index.d.ts.map +1 -1
  147. package/dist/types/controls/index.d.ts +1 -1
  148. package/dist/types/controls/index.d.ts.map +1 -1
  149. package/dist/types/controls/rich-text/rich-text.d.ts +2 -2
  150. package/dist/types/controls/rich-text/rich-text.d.ts.map +1 -1
  151. package/dist/types/controls/rich-text-v2/control.d.ts +2 -2
  152. package/dist/types/controls/rich-text-v2/control.d.ts.map +1 -1
  153. package/dist/types/controls/rich-text-v2/rich-text-v2.d.ts +2 -2
  154. package/dist/types/controls/rich-text-v2/rich-text-v2.d.ts.map +1 -1
  155. package/dist/types/controls/serialization/base/index.d.ts.map +1 -1
  156. package/dist/types/next/components/framework-provider/app-router/index.d.ts +1 -1
  157. package/dist/types/next/components/framework-provider/app-router/index.d.ts.map +1 -1
  158. package/dist/types/next/components/framework-provider/index.d.ts.map +1 -1
  159. package/dist/types/prop-controllers/instances.d.ts +4 -2
  160. package/dist/types/prop-controllers/instances.d.ts.map +1 -1
  161. package/dist/types/runtimes/react/components/__tests__/framework-context.test.d.ts +3 -0
  162. package/dist/types/runtimes/react/components/__tests__/framework-context.test.d.ts.map +1 -0
  163. package/dist/types/runtimes/react/components/framework-context.d.ts +4 -6
  164. package/dist/types/runtimes/react/components/framework-context.d.ts.map +1 -1
  165. package/dist/types/runtimes/react/components/hooks/use-framework-context.d.ts +1 -2
  166. package/dist/types/runtimes/react/components/hooks/use-framework-context.d.ts.map +1 -1
  167. package/dist/types/runtimes/react/components/resolve-props.d.ts +7 -0
  168. package/dist/types/runtimes/react/components/resolve-props.d.ts.map +1 -0
  169. package/dist/types/runtimes/react/controls/rich-text/EditableText/useSyncWithBuilder.d.ts.map +1 -1
  170. package/dist/types/runtimes/react/hooks/use-control-defs.d.ts +6 -0
  171. package/dist/types/runtimes/react/hooks/use-control-defs.d.ts.map +1 -0
  172. package/dist/types/runtimes/react/hooks/use-control-instances.d.ts +3 -0
  173. package/dist/types/runtimes/react/hooks/use-control-instances.d.ts.map +1 -0
  174. package/dist/types/runtimes/react/hooks/use-resolved-props.d.ts +7 -1
  175. package/dist/types/runtimes/react/hooks/use-resolved-props.d.ts.map +1 -1
  176. package/dist/types/runtimes/react/hooks/use-stylesheet-factory.d.ts +1 -5
  177. package/dist/types/runtimes/react/hooks/use-stylesheet-factory.d.ts.map +1 -1
  178. package/dist/types/runtimes/react/react-runtime-core.d.ts +9 -1
  179. package/dist/types/runtimes/react/react-runtime-core.d.ts.map +1 -1
  180. package/dist/types/runtimes/react/runtime-core.d.ts +4 -2
  181. package/dist/types/runtimes/react/runtime-core.d.ts.map +1 -1
  182. package/dist/types/runtimes/react/stylesheet-factory.d.ts +6 -0
  183. package/dist/types/runtimes/react/stylesheet-factory.d.ts.map +1 -0
  184. package/dist/types/slate/LinkPlugin/getValue.d.ts.map +1 -1
  185. package/dist/types/slate/LinkPlugin/index.d.ts.map +1 -1
  186. package/dist/types/slate/TypographyPlugin/getValue.d.ts.map +1 -1
  187. package/dist/types/slate/TypographyPlugin/index.d.ts.map +1 -1
  188. package/dist/types/slate/selectors.d.ts +2 -2
  189. package/dist/types/slate/selectors.d.ts.map +1 -1
  190. package/dist/types/slate/utils/toText.d.ts.map +1 -1
  191. package/dist/types/state/__tests__/fixtures/serialized-descriptors-from-builder.d.ts.map +1 -1
  192. package/dist/types/state/__tests__/fixtures/translatable-content-sample.d.ts.map +1 -1
  193. package/dist/types/state/middleware/read-write/prop-controller-handles.d.ts.map +1 -1
  194. package/dist/types/state/modules/__tests__/fixtures/element-trees.d.ts +737 -0
  195. package/dist/types/state/modules/__tests__/fixtures/element-trees.d.ts.map +1 -1
  196. package/dist/types/state/modules/components-meta.d.ts +3 -0
  197. package/dist/types/state/modules/components-meta.d.ts.map +1 -1
  198. package/dist/types/state/translations/get.d.ts.map +1 -1
  199. package/dist/types/testing/fixtures/index.d.ts +2 -1
  200. package/dist/types/testing/fixtures/index.d.ts.map +1 -1
  201. package/dist/types/testing/fixtures/snippet.d.ts +6 -0
  202. package/dist/types/testing/fixtures/snippet.d.ts.map +1 -0
  203. package/dist/types/translations/index.d.ts +1 -1
  204. package/dist/types/translations/index.d.ts.map +1 -1
  205. package/dist/types/unstable-framework-support/index.d.ts +1 -1
  206. package/dist/types/unstable-framework-support/index.d.ts.map +1 -1
  207. package/dist/types/utils/intersection.d.ts +2 -1
  208. package/dist/types/utils/intersection.d.ts.map +1 -1
  209. package/package.json +9 -6
  210. package/react/builtins/package.json +1 -1
  211. package/dist/cjs/runtimes/react/controls/group.js +0 -45
  212. package/dist/cjs/runtimes/react/controls/group.js.map +0 -1
  213. package/dist/cjs/runtimes/react/controls.js +0 -59
  214. package/dist/cjs/runtimes/react/controls.js.map +0 -1
  215. package/dist/cjs/utils/is.js.map +0 -1
  216. package/dist/esm/runtimes/react/controls/group.js +0 -23
  217. package/dist/esm/runtimes/react/controls/group.js.map +0 -1
  218. package/dist/esm/runtimes/react/controls.js +0 -25
  219. package/dist/esm/runtimes/react/controls.js.map +0 -1
  220. package/dist/esm/utils/is.js +0 -6
  221. package/dist/esm/utils/is.js.map +0 -1
  222. package/dist/types/runtimes/react/controls/group.d.ts +0 -11
  223. package/dist/types/runtimes/react/controls/group.d.ts.map +0 -1
  224. package/dist/types/runtimes/react/controls.d.ts +0 -9
  225. package/dist/types/runtimes/react/controls.d.ts.map +0 -1
  226. package/dist/types/utils/is.d.ts +0 -3
  227. package/dist/types/utils/is.d.ts.map +0 -1
@@ -1,7 +1,5 @@
1
1
  import { configureClientStore } from "../state/api-client/client-store";
2
2
  import { ApiResourcesClient } from "./api-resources-client";
3
- import { MakeswiftGraphQLApiClient } from "./graphql-api-client";
4
- import { MakeswiftRestAPIClient } from "./rest-api-client";
5
3
  class MakeswiftApiResourcesClient extends ApiResourcesClient {
6
4
  restApiClient;
7
5
  graphQlClient;
@@ -15,29 +13,35 @@ class MakeswiftApiResourcesClient extends ApiResourcesClient {
15
13
  super({
16
14
  store: configureClientStore({ preloadedState })
17
15
  });
18
- this.restApiClient = new MakeswiftRestAPIClient({ fetch, apiKey, apiOrigin });
19
- this.graphQlClient = new MakeswiftGraphQLApiClient({ endpoint: graphqlApiEndpoint });
16
+ this.restApiClient = (async () => {
17
+ const { MakeswiftRestAPIClient } = await import("./rest-api-client");
18
+ return new MakeswiftRestAPIClient({ fetch, apiKey, apiOrigin });
19
+ })();
20
+ this.graphQlClient = (async () => {
21
+ const { MakeswiftGraphQLApiClient } = await import("./graphql-api-client");
22
+ return new MakeswiftGraphQLApiClient({ endpoint: graphqlApiEndpoint });
23
+ })();
20
24
  }
21
25
  async fetchSwatchImpl(id, version) {
22
- return this.restApiClient.getSwatch(id, version);
26
+ return (await this.restApiClient).getSwatch(id, version);
23
27
  }
24
28
  async fetchFileImpl(id, _version) {
25
- return this.graphQlClient.getFile(id);
29
+ return (await this.graphQlClient).getFile(id);
26
30
  }
27
31
  async fetchTypographyImpl(id, version) {
28
- return this.restApiClient.getTypography(id, version);
32
+ return (await this.restApiClient).getTypography(id, version);
29
33
  }
30
34
  async fetchGlobalElementImpl(id, version) {
31
- return this.restApiClient.getGlobalElement(id, version);
35
+ return (await this.restApiClient).getGlobalElement(id, version);
32
36
  }
33
37
  async fetchLocalizedGlobalElementImpl(id, version, locale) {
34
- return this.restApiClient.getLocalizedGlobalElement(id, locale, version);
38
+ return (await this.restApiClient).getLocalizedGlobalElement(id, locale, version);
35
39
  }
36
40
  async fetchPagePathnameSliceImpl(id, version, locale) {
37
- return this.restApiClient.getPagePathnameSlice(id, version, { locale });
41
+ return (await this.restApiClient).getPagePathnameSlice(id, version, { locale });
38
42
  }
39
43
  async fetchTableImpl(id, _version) {
40
- return this.graphQlClient.getTable(id);
44
+ return (await this.graphQlClient).getTable(id);
41
45
  }
42
46
  }
43
47
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/makeswift-api-resources-client.ts"],"sourcesContent":["import { type State as ApiClientState } from '../state/api-client/state'\nimport { configureClientStore } from '../state/api-client/client-store'\n\nimport {\n type File,\n type GlobalElement,\n type LocalizedGlobalElement,\n type PagePathnameSlice,\n type Swatch,\n type Table,\n type Typography,\n type HttpFetch,\n} from './types'\n\nimport { ApiResourcesClient } from './api-resources-client'\nimport { MakeswiftGraphQLApiClient } from './graphql-api-client'\nimport { MakeswiftRestAPIClient } from './rest-api-client'\nimport { type SiteVersion } from './site-version'\n\n/**\n * Server-side implementation that makes direct authenticated requests to the Makeswift API.\n * Requires an API key.\n *\n * For client-side usage, see `HostApiResourcesClient`, which goes through the host via\n * `/api/makeswift/...` endpoints.\n */\nexport class MakeswiftApiResourcesClient extends ApiResourcesClient {\n private restApiClient: MakeswiftRestAPIClient\n private graphQlClient: MakeswiftGraphQLApiClient\n\n constructor({\n fetch,\n apiKey,\n apiOrigin,\n graphqlApiEndpoint,\n preloadedState,\n }: {\n fetch: HttpFetch\n apiKey: string\n apiOrigin: string\n graphqlApiEndpoint: string\n preloadedState: Partial<ApiClientState>\n }) {\n super({\n store: configureClientStore({ preloadedState }),\n })\n\n this.restApiClient = new MakeswiftRestAPIClient({ fetch, apiKey, apiOrigin })\n this.graphQlClient = new MakeswiftGraphQLApiClient({ endpoint: graphqlApiEndpoint })\n }\n\n protected async fetchSwatchImpl(id: string, version: SiteVersion | null): Promise<Swatch | null> {\n return this.restApiClient.getSwatch(id, version)\n }\n\n protected async fetchFileImpl(id: string, _version: SiteVersion | null): Promise<File | null> {\n // files are unversioned\n return this.graphQlClient.getFile(id)\n }\n\n protected async fetchTypographyImpl(\n id: string,\n version: SiteVersion | null,\n ): Promise<Typography | null> {\n return this.restApiClient.getTypography(id, version)\n }\n\n protected async fetchGlobalElementImpl(\n id: string,\n version: SiteVersion | null,\n ): Promise<GlobalElement | null> {\n return this.restApiClient.getGlobalElement(id, version)\n }\n\n protected async fetchLocalizedGlobalElementImpl(\n id: string,\n version: SiteVersion | null,\n locale: string,\n ): Promise<LocalizedGlobalElement | null> {\n return this.restApiClient.getLocalizedGlobalElement(id, locale, version)\n }\n\n protected async fetchPagePathnameSliceImpl(\n id: string,\n version: SiteVersion | null,\n locale: string | null | undefined,\n ): Promise<PagePathnameSlice | null> {\n return this.restApiClient.getPagePathnameSlice(id, version, { locale })\n }\n\n protected async fetchTableImpl(id: string, _version: SiteVersion | null): Promise<Table | null> {\n // tables are unversioned\n return this.graphQlClient.getTable(id)\n }\n}\n"],"mappings":"AACA,SAAS,4BAA4B;AAarC,SAAS,0BAA0B;AACnC,SAAS,iCAAiC;AAC1C,SAAS,8BAA8B;AAUhC,MAAM,oCAAoC,mBAAmB;AAAA,EAC1D;AAAA,EACA;AAAA,EAER,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMG;AACD,UAAM;AAAA,MACJ,OAAO,qBAAqB,EAAE,eAAe,CAAC;AAAA,IAChD,CAAC;AAED,SAAK,gBAAgB,IAAI,uBAAuB,EAAE,OAAO,QAAQ,UAAU,CAAC;AAC5E,SAAK,gBAAgB,IAAI,0BAA0B,EAAE,UAAU,mBAAmB,CAAC;AAAA,EACrF;AAAA,EAEA,MAAgB,gBAAgB,IAAY,SAAqD;AAC/F,WAAO,KAAK,cAAc,UAAU,IAAI,OAAO;AAAA,EACjD;AAAA,EAEA,MAAgB,cAAc,IAAY,UAAoD;AAE5F,WAAO,KAAK,cAAc,QAAQ,EAAE;AAAA,EACtC;AAAA,EAEA,MAAgB,oBACd,IACA,SAC4B;AAC5B,WAAO,KAAK,cAAc,cAAc,IAAI,OAAO;AAAA,EACrD;AAAA,EAEA,MAAgB,uBACd,IACA,SAC+B;AAC/B,WAAO,KAAK,cAAc,iBAAiB,IAAI,OAAO;AAAA,EACxD;AAAA,EAEA,MAAgB,gCACd,IACA,SACA,QACwC;AACxC,WAAO,KAAK,cAAc,0BAA0B,IAAI,QAAQ,OAAO;AAAA,EACzE;AAAA,EAEA,MAAgB,2BACd,IACA,SACA,QACmC;AACnC,WAAO,KAAK,cAAc,qBAAqB,IAAI,SAAS,EAAE,OAAO,CAAC;AAAA,EACxE;AAAA,EAEA,MAAgB,eAAe,IAAY,UAAqD;AAE9F,WAAO,KAAK,cAAc,SAAS,EAAE;AAAA,EACvC;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/api/makeswift-api-resources-client.ts"],"sourcesContent":["import { type State as ApiClientState } from '../state/api-client/state'\nimport { configureClientStore } from '../state/api-client/client-store'\n\nimport {\n type File,\n type GlobalElement,\n type LocalizedGlobalElement,\n type PagePathnameSlice,\n type Swatch,\n type Table,\n type Typography,\n type HttpFetch,\n} from './types'\n\nimport { ApiResourcesClient } from './api-resources-client'\nimport { type SiteVersion } from './site-version'\n\n// see the comment in `MakeswiftApiResourcesClient` constructor below\nimport { type MakeswiftGraphQLApiClient } from './graphql-api-client'\nimport { type MakeswiftRestAPIClient } from './rest-api-client'\n\n/**\n * Server-side implementation that makes direct authenticated requests to the Makeswift API.\n * Requires an API key.\n *\n * For client-side usage, see `HostApiResourcesClient`, which goes through the host via\n * `/api/makeswift/...` endpoints.\n */\nexport class MakeswiftApiResourcesClient extends ApiResourcesClient {\n private restApiClient: Promise<MakeswiftRestAPIClient>\n private graphQlClient: Promise<MakeswiftGraphQLApiClient>\n\n constructor({\n fetch,\n apiKey,\n apiOrigin,\n graphqlApiEndpoint,\n preloadedState,\n }: {\n fetch: HttpFetch\n apiKey: string\n apiOrigin: string\n graphqlApiEndpoint: string\n preloadedState: Partial<ApiClientState>\n }) {\n super({\n store: configureClientStore({ preloadedState }),\n })\n\n // `MakeswiftApiResourcesClient` is used by the runtime and therefore will be imported\n // on the client; lazy import server-side REST/GraphQL clients to avoid unnecessarily\n // pulling their code into a client bundle.\n //\n // (we can't easily lazy-load `MakeswiftApiResourcesClient` itself, at it will make its\n // construction async, but because it shares most of its implementation with\n // `HostApiResourcesClient`, the overhead of this module on its own is negligible)\n this.restApiClient = (async () => {\n const { MakeswiftRestAPIClient } = await import('./rest-api-client')\n return new MakeswiftRestAPIClient({ fetch, apiKey, apiOrigin })\n })()\n\n this.graphQlClient = (async () => {\n const { MakeswiftGraphQLApiClient } = await import('./graphql-api-client')\n return new MakeswiftGraphQLApiClient({ endpoint: graphqlApiEndpoint })\n })()\n }\n\n protected async fetchSwatchImpl(id: string, version: SiteVersion | null): Promise<Swatch | null> {\n return (await this.restApiClient).getSwatch(id, version)\n }\n\n protected async fetchFileImpl(id: string, _version: SiteVersion | null): Promise<File | null> {\n // files are unversioned\n return (await this.graphQlClient).getFile(id)\n }\n\n protected async fetchTypographyImpl(\n id: string,\n version: SiteVersion | null,\n ): Promise<Typography | null> {\n return (await this.restApiClient).getTypography(id, version)\n }\n\n protected async fetchGlobalElementImpl(\n id: string,\n version: SiteVersion | null,\n ): Promise<GlobalElement | null> {\n return (await this.restApiClient).getGlobalElement(id, version)\n }\n\n protected async fetchLocalizedGlobalElementImpl(\n id: string,\n version: SiteVersion | null,\n locale: string,\n ): Promise<LocalizedGlobalElement | null> {\n return (await this.restApiClient).getLocalizedGlobalElement(id, locale, version)\n }\n\n protected async fetchPagePathnameSliceImpl(\n id: string,\n version: SiteVersion | null,\n locale: string | null | undefined,\n ): Promise<PagePathnameSlice | null> {\n return (await this.restApiClient).getPagePathnameSlice(id, version, { locale })\n }\n\n protected async fetchTableImpl(id: string, _version: SiteVersion | null): Promise<Table | null> {\n // tables are unversioned\n return (await this.graphQlClient).getTable(id)\n }\n}\n"],"mappings":"AACA,SAAS,4BAA4B;AAarC,SAAS,0BAA0B;AAc5B,MAAM,oCAAoC,mBAAmB;AAAA,EAC1D;AAAA,EACA;AAAA,EAER,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAMG;AACD,UAAM;AAAA,MACJ,OAAO,qBAAqB,EAAE,eAAe,CAAC;AAAA,IAChD,CAAC;AASD,SAAK,iBAAiB,YAAY;AAChC,YAAM,EAAE,uBAAuB,IAAI,MAAM,OAAO,mBAAmB;AACnE,aAAO,IAAI,uBAAuB,EAAE,OAAO,QAAQ,UAAU,CAAC;AAAA,IAChE,GAAG;AAEH,SAAK,iBAAiB,YAAY;AAChC,YAAM,EAAE,0BAA0B,IAAI,MAAM,OAAO,sBAAsB;AACzE,aAAO,IAAI,0BAA0B,EAAE,UAAU,mBAAmB,CAAC;AAAA,IACvE,GAAG;AAAA,EACL;AAAA,EAEA,MAAgB,gBAAgB,IAAY,SAAqD;AAC/F,YAAQ,MAAM,KAAK,eAAe,UAAU,IAAI,OAAO;AAAA,EACzD;AAAA,EAEA,MAAgB,cAAc,IAAY,UAAoD;AAE5F,YAAQ,MAAM,KAAK,eAAe,QAAQ,EAAE;AAAA,EAC9C;AAAA,EAEA,MAAgB,oBACd,IACA,SAC4B;AAC5B,YAAQ,MAAM,KAAK,eAAe,cAAc,IAAI,OAAO;AAAA,EAC7D;AAAA,EAEA,MAAgB,uBACd,IACA,SAC+B;AAC/B,YAAQ,MAAM,KAAK,eAAe,iBAAiB,IAAI,OAAO;AAAA,EAChE;AAAA,EAEA,MAAgB,gCACd,IACA,SACA,QACwC;AACxC,YAAQ,MAAM,KAAK,eAAe,0BAA0B,IAAI,QAAQ,OAAO;AAAA,EACjF;AAAA,EAEA,MAAgB,2BACd,IACA,SACA,QACmC;AACnC,YAAQ,MAAM,KAAK,eAAe,qBAAqB,IAAI,SAAS,EAAE,OAAO,CAAC;AAAA,EAChF;AAAA,EAEA,MAAgB,eAAe,IAAY,UAAqD;AAE9F,YAAQ,MAAM,KAAK,eAAe,SAAS,EAAE;AAAA,EAC/C;AACF;","names":[]}
@@ -113,7 +113,7 @@ class MakeswiftRestAPIClient {
113
113
  const requestHeaders = new Headers({
114
114
  "x-api-key": this.apiKey,
115
115
  "makeswift-site-api-key": this.apiKey,
116
- "makeswift-runtime-version": "0.28.8-canary.0"
116
+ "makeswift-runtime-version": "0.28.8-canary.10"
117
117
  });
118
118
  if (siteVersion?.token) {
119
119
  requestUrl.searchParams.set("version", siteVersion.version);
@@ -8,7 +8,7 @@ async function manifestHandler(req, { apiKey, manifest }) {
8
8
  return ApiResponse.json({ message: "Unauthorized" }, { status: 401 });
9
9
  }
10
10
  return ApiResponse.json({
11
- version: "0.28.8-canary.0",
11
+ version: "0.28.8-canary.10",
12
12
  interactionMode: true,
13
13
  clientSideNavigation: false,
14
14
  elementFromPoint: false,
@@ -669,7 +669,7 @@ Received "${apiKey}" instead.`
669
669
  headers: {
670
670
  "x-api-key": this.apiKey,
671
671
  "makeswift-site-api-key": this.apiKey,
672
- "makeswift-runtime-version": "0.28.8-canary.0",
672
+ "makeswift-runtime-version": "0.28.8-canary.10",
673
673
  "content-type": "application/json"
674
674
  },
675
675
  body: JSON.stringify({ token }),
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import { useState, useEffect, forwardRef, useImperativeHandle } from "react";
3
+ import { useState, useEffect, useMemo, forwardRef, useImperativeHandle } from "react";
4
4
  import { useIsomorphicLayoutEffect } from "../../hooks/useIsomorphicLayoutEffect";
5
5
  import { useStyle } from "../../../runtimes/react/use-style";
6
6
  import { cx } from "@emotion/css";
@@ -71,6 +71,7 @@ const Embed = forwardRef(function Embed2({ id, width, margin, html = defaultHtml
71
71
  });
72
72
  }, [container, html]);
73
73
  const className = useStyle({ minHeight: 15 });
74
+ const dangerouslySetInnerHTML = useMemo(() => ({ __html: html }), [html]);
74
75
  if (shouldRender === false)
75
76
  return null;
76
77
  return /* @__PURE__ */ jsx(
@@ -79,7 +80,7 @@ const Embed = forwardRef(function Embed2({ id, width, margin, html = defaultHtml
79
80
  ref: setContainer,
80
81
  id,
81
82
  className: cx(className, width, margin),
82
- dangerouslySetInnerHTML: { __html: html }
83
+ dangerouslySetInnerHTML
83
84
  }
84
85
  );
85
86
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/builtin/Embed/Embed.tsx"],"sourcesContent":["'use client'\n\n/* eslint-env browser */\n\nimport { useState, useEffect, forwardRef, Ref, useImperativeHandle } from 'react'\n\nimport { useIsomorphicLayoutEffect } from '../../hooks/useIsomorphicLayoutEffect'\nimport { useStyle } from '../../../runtimes/react/use-style'\nimport { cx } from '@emotion/css'\n\ntype Props = {\n id?: string\n html?: string\n width?: string\n margin?: string\n}\n\nconst defaultHtml = `<div style=\"padding: 24px; background-color: rgba(161, 168, 194, 0.18); overflow: hidden;\">\n<svg width=\"316\" height=\"168\" viewBox=\"0 0 316 168\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<rect width=\"70\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"78\" width=\"30\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"116\" width=\"78\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect y=\"20\" width=\"120\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"128\" y=\"20\" width=\"30\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"166\" y=\"20\" width=\"78\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect y=\"60\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"20\" y=\"80\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"40\" y=\"100\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"88\" y=\"100\" width=\"110\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"206\" y=\"100\" width=\"24\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"238\" y=\"100\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"40\" y=\"120\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"88\" y=\"120\" width=\"50\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"146\" y=\"120\" width=\"24\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"178\" y=\"120\" width=\"90\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"276\" y=\"120\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"20\" y=\"140\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect y=\"160\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n</svg>\n</div>`\nconst SCRIPT_TAG = 'script'\n\nconst Embed = forwardRef(function Embed(\n { id, width, margin, html = defaultHtml }: Props,\n ref: Ref<HTMLDivElement | null>,\n) {\n const [container, setContainer] = useState<HTMLDivElement | null>(null)\n const [shouldRender, setShouldRender] = useState(false)\n\n useIsomorphicLayoutEffect(() => {\n setShouldRender(true)\n }, [])\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(ref, () => container, [\n container,\n ])\n\n useEffect(() => {\n // TODO: When we SSR the editor, we can remove the editor check\n // and not run this effect on the first render.\n if (!container) return\n\n const walker = container.ownerDocument.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode(node: Element) {\n return node.tagName.toLowerCase() === SCRIPT_TAG\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_REJECT\n },\n })\n\n const nodes: Element[] = []\n\n while (walker.nextNode()) nodes.push(walker.currentNode as Element)\n\n // By default scripts appended dynamically will execute asyncrhonously. Here we ensure that\n // scripts are loaded synchronously since that's what a user usually expects with scripts in\n // embedded in HTML which usually comes from the server.\n //\n // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#notes\n async function executeScriptsInOrder() {\n for (let i = 0; i < nodes.length; i++) {\n await new Promise<void>(resolve => {\n const node = nodes[i]\n const script = node.ownerDocument.createElement(SCRIPT_TAG)\n\n script.textContent = node.textContent\n Array.from(node.attributes).forEach(({ name, value }) => {\n script.setAttribute(name, value)\n })\n\n script.onload = () => resolve()\n script.onerror = () => resolve()\n\n node.parentNode?.insertBefore(script, node)\n node.parentNode?.removeChild(node)\n\n if (!script.hasAttribute('src')) resolve()\n })\n }\n }\n\n executeScriptsInOrder().catch(error => {\n // Ignore errors from user-provided code\n console.error(error)\n })\n }, [container, html])\n\n const className = useStyle({ minHeight: 15 })\n\n if (shouldRender === false) return null\n\n return (\n <div\n ref={setContainer}\n id={id}\n className={cx(className, width, margin)}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n})\n\nexport default Embed\n"],"mappings":";AAgHI;AA5GJ,SAAS,UAAU,WAAW,YAAiB,2BAA2B;AAE1E,SAAS,iCAAiC;AAC1C,SAAS,gBAAgB;AACzB,SAAS,UAAU;AASnB,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBpB,MAAM,aAAa;AAEnB,MAAM,QAAQ,WAAW,SAASA,OAChC,EAAE,IAAI,OAAO,QAAQ,OAAO,YAAY,GACxC,KACA;AACA,QAAM,CAAC,WAAW,YAAY,IAAI,SAAgC,IAAI;AACtE,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AAEtD,4BAA0B,MAAM;AAC9B,oBAAgB,IAAI;AAAA,EACtB,GAAG,CAAC,CAAC;AAEL,sBAAkE,KAAK,MAAM,WAAW;AAAA,IACtF;AAAA,EACF,CAAC;AAED,YAAU,MAAM;AAGd,QAAI,CAAC;AAAW;AAEhB,UAAM,SAAS,UAAU,cAAc,iBAAiB,WAAW,WAAW,cAAc;AAAA,MAC1F,WAAW,MAAe;AACxB,eAAO,KAAK,QAAQ,YAAY,MAAM,aAClC,WAAW,gBACX,WAAW;AAAA,MACjB;AAAA,IACF,CAAC;AAED,UAAM,QAAmB,CAAC;AAE1B,WAAO,OAAO,SAAS;AAAG,YAAM,KAAK,OAAO,WAAsB;AAOlE,mBAAe,wBAAwB;AACrC,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAM,IAAI,QAAc,aAAW;AACjC,gBAAM,OAAO,MAAM,CAAC;AACpB,gBAAM,SAAS,KAAK,cAAc,cAAc,UAAU;AAE1D,iBAAO,cAAc,KAAK;AAC1B,gBAAM,KAAK,KAAK,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM;AACvD,mBAAO,aAAa,MAAM,KAAK;AAAA,UACjC,CAAC;AAED,iBAAO,SAAS,MAAM,QAAQ;AAC9B,iBAAO,UAAU,MAAM,QAAQ;AAE/B,eAAK,YAAY,aAAa,QAAQ,IAAI;AAC1C,eAAK,YAAY,YAAY,IAAI;AAEjC,cAAI,CAAC,OAAO,aAAa,KAAK;AAAG,oBAAQ;AAAA,QAC3C,CAAC;AAAA,MACH;AAAA,IACF;AAEA,0BAAsB,EAAE,MAAM,WAAS;AAErC,cAAQ,MAAM,KAAK;AAAA,IACrB,CAAC;AAAA,EACH,GAAG,CAAC,WAAW,IAAI,CAAC;AAEpB,QAAM,YAAY,SAAS,EAAE,WAAW,GAAG,CAAC;AAE5C,MAAI,iBAAiB;AAAO,WAAO;AAEnC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,WAAW,GAAG,WAAW,OAAO,MAAM;AAAA,MACtC,yBAAyB,EAAE,QAAQ,KAAK;AAAA;AAAA,EAC1C;AAEJ,CAAC;AAED,IAAO,gBAAQ;","names":["Embed"]}
1
+ {"version":3,"sources":["../../../../../src/components/builtin/Embed/Embed.tsx"],"sourcesContent":["'use client'\n\n/* eslint-env browser */\n\nimport { useState, useEffect, useMemo, forwardRef, Ref, useImperativeHandle } from 'react'\n\nimport { useIsomorphicLayoutEffect } from '../../hooks/useIsomorphicLayoutEffect'\nimport { useStyle } from '../../../runtimes/react/use-style'\nimport { cx } from '@emotion/css'\n\ntype Props = {\n id?: string\n html?: string\n width?: string\n margin?: string\n}\n\nconst defaultHtml = `<div style=\"padding: 24px; background-color: rgba(161, 168, 194, 0.18); overflow: hidden;\">\n<svg width=\"316\" height=\"168\" viewBox=\"0 0 316 168\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<rect width=\"70\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"78\" width=\"30\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"116\" width=\"78\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect y=\"20\" width=\"120\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"128\" y=\"20\" width=\"30\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"166\" y=\"20\" width=\"78\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect y=\"60\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"20\" y=\"80\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"40\" y=\"100\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"88\" y=\"100\" width=\"110\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"206\" y=\"100\" width=\"24\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"238\" y=\"100\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"40\" y=\"120\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"88\" y=\"120\" width=\"50\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"146\" y=\"120\" width=\"24\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"178\" y=\"120\" width=\"90\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.25\"/>\n<rect x=\"276\" y=\"120\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect x=\"20\" y=\"140\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n<rect y=\"160\" width=\"40\" height=\"8\" rx=\"2\" fill=\"#A1A8C2\" fill-opacity=\"0.5\"/>\n</svg>\n</div>`\nconst SCRIPT_TAG = 'script'\n\nconst Embed = forwardRef(function Embed(\n { id, width, margin, html = defaultHtml }: Props,\n ref: Ref<HTMLDivElement | null>,\n) {\n const [container, setContainer] = useState<HTMLDivElement | null>(null)\n const [shouldRender, setShouldRender] = useState(false)\n\n useIsomorphicLayoutEffect(() => {\n setShouldRender(true)\n }, [])\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(ref, () => container, [\n container,\n ])\n\n useEffect(() => {\n // TODO: When we SSR the editor, we can remove the editor check\n // and not run this effect on the first render.\n if (!container) return\n\n const walker = container.ownerDocument.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode(node: Element) {\n return node.tagName.toLowerCase() === SCRIPT_TAG\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_REJECT\n },\n })\n\n const nodes: Element[] = []\n\n while (walker.nextNode()) nodes.push(walker.currentNode as Element)\n\n // By default scripts appended dynamically will execute asyncrhonously. Here we ensure that\n // scripts are loaded synchronously since that's what a user usually expects with scripts in\n // embedded in HTML which usually comes from the server.\n //\n // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#notes\n async function executeScriptsInOrder() {\n for (let i = 0; i < nodes.length; i++) {\n await new Promise<void>(resolve => {\n const node = nodes[i]\n const script = node.ownerDocument.createElement(SCRIPT_TAG)\n\n script.textContent = node.textContent\n Array.from(node.attributes).forEach(({ name, value }) => {\n script.setAttribute(name, value)\n })\n\n script.onload = () => resolve()\n script.onerror = () => resolve()\n\n node.parentNode?.insertBefore(script, node)\n node.parentNode?.removeChild(node)\n\n if (!script.hasAttribute('src')) resolve()\n })\n }\n }\n\n executeScriptsInOrder().catch(error => {\n // Ignore errors from user-provided code\n console.error(error)\n })\n }, [container, html])\n\n const className = useStyle({ minHeight: 15 })\n\n // React 19+ resets `innerHTML` whenever the `dangerouslySetInnerHTML`\n // object's identity changes, even if `__html` is the same string. Memoize\n // the object so unrelated re-renders don't wipe out DOM produced by the\n // executed scripts above. See https://github.com/facebook/react/issues/31660\n // and https://github.com/react/react/issues/31600\n const dangerouslySetInnerHTML = useMemo(() => ({ __html: html }), [html])\n\n if (shouldRender === false) return null\n\n return (\n <div\n ref={setContainer}\n id={id}\n className={cx(className, width, margin)}\n dangerouslySetInnerHTML={dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Embed\n"],"mappings":";AAuHI;AAnHJ,SAAS,UAAU,WAAW,SAAS,YAAiB,2BAA2B;AAEnF,SAAS,iCAAiC;AAC1C,SAAS,gBAAgB;AACzB,SAAS,UAAU;AASnB,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBpB,MAAM,aAAa;AAEnB,MAAM,QAAQ,WAAW,SAASA,OAChC,EAAE,IAAI,OAAO,QAAQ,OAAO,YAAY,GACxC,KACA;AACA,QAAM,CAAC,WAAW,YAAY,IAAI,SAAgC,IAAI;AACtE,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AAEtD,4BAA0B,MAAM;AAC9B,oBAAgB,IAAI;AAAA,EACtB,GAAG,CAAC,CAAC;AAEL,sBAAkE,KAAK,MAAM,WAAW;AAAA,IACtF;AAAA,EACF,CAAC;AAED,YAAU,MAAM;AAGd,QAAI,CAAC;AAAW;AAEhB,UAAM,SAAS,UAAU,cAAc,iBAAiB,WAAW,WAAW,cAAc;AAAA,MAC1F,WAAW,MAAe;AACxB,eAAO,KAAK,QAAQ,YAAY,MAAM,aAClC,WAAW,gBACX,WAAW;AAAA,MACjB;AAAA,IACF,CAAC;AAED,UAAM,QAAmB,CAAC;AAE1B,WAAO,OAAO,SAAS;AAAG,YAAM,KAAK,OAAO,WAAsB;AAOlE,mBAAe,wBAAwB;AACrC,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAM,IAAI,QAAc,aAAW;AACjC,gBAAM,OAAO,MAAM,CAAC;AACpB,gBAAM,SAAS,KAAK,cAAc,cAAc,UAAU;AAE1D,iBAAO,cAAc,KAAK;AAC1B,gBAAM,KAAK,KAAK,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM;AACvD,mBAAO,aAAa,MAAM,KAAK;AAAA,UACjC,CAAC;AAED,iBAAO,SAAS,MAAM,QAAQ;AAC9B,iBAAO,UAAU,MAAM,QAAQ;AAE/B,eAAK,YAAY,aAAa,QAAQ,IAAI;AAC1C,eAAK,YAAY,YAAY,IAAI;AAEjC,cAAI,CAAC,OAAO,aAAa,KAAK;AAAG,oBAAQ;AAAA,QAC3C,CAAC;AAAA,MACH;AAAA,IACF;AAEA,0BAAsB,EAAE,MAAM,WAAS;AAErC,cAAQ,MAAM,KAAK;AAAA,IACrB,CAAC;AAAA,EACH,GAAG,CAAC,WAAW,IAAI,CAAC;AAEpB,QAAM,YAAY,SAAS,EAAE,WAAW,GAAG,CAAC;AAO5C,QAAM,0BAA0B,QAAQ,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC;AAExE,MAAI,iBAAiB;AAAO,WAAO;AAEnC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,WAAW,GAAG,WAAW,OAAO,MAAM;AAAA,MACtC;AAAA;AAAA,EACF;AAEJ,CAAC;AAED,IAAO,gBAAQ;","names":["Embed"]}
@@ -1,6 +1,10 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { createElement } from "react";
3
- import { forwardRef, useRef, useState } from "react";
3
+ import {
4
+ forwardRef,
5
+ useRef,
6
+ useState
7
+ } from "react";
4
8
  import { CaretDown8 } from "../../../../icons/CaretDown8";
5
9
  import { Plus8 } from "../../../../icons/Plus8";
6
10
  import { ArrowDown8 } from "../../../../icons/ArrowDown8";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/components/builtin/Navigation/components/DropDownButton/index.tsx"],"sourcesContent":["import { ComponentPropsWithoutRef, ForwardedRef, forwardRef, useRef, useState, ReactNode } from 'react'\n\nimport { CaretDown8 } from '../../../../icons/CaretDown8'\nimport { Plus8 } from '../../../../icons/Plus8'\nimport { ArrowDown8 } from '../../../../icons/ArrowDown8'\nimport { ChevronDown8 } from '../../../../icons/ChevronDown8'\nimport { colorToString } from '../../../../utils/colorToString'\nimport { useResponsiveColor } from '../../../../hooks'\n\nimport { Link } from '../../../../shared/Link'\nimport Button from '../../../Button'\nimport { useIsomorphicLayoutEffect } from '../../../../hooks/useIsomorphicLayoutEffect'\nimport { cx, keyframes } from '@emotion/css'\nimport { useStyle } from '../../../../../runtimes/react/use-style'\nimport { useResponsiveStyle, useResponsiveTextStyle } from '../../../../utils/responsive-style'\nimport { LinkData, ResponsiveColorData, ResponsiveTextStyleData } from '@makeswift/prop-controllers'\n\nconst DROP_DOWN_MENU_WIDTH = 200\n\ntype Position = 'left' | 'right'\n\nconst DROP_DOWN_MENU_CLASS_NAME = 'drop-down-menu'\n\ntype DropDownMenuBaseProps = {\n position: Position\n}\n\ntype DropDownMenuProps = DropDownMenuBaseProps &\n Omit<ComponentPropsWithoutRef<'div'>, keyof DropDownMenuBaseProps>\n\nfunction DropDownMenu({ className, position, ...restOfProps }: DropDownMenuProps) {\n return (\n <div\n {...restOfProps}\n className={cx(\n DROP_DOWN_MENU_CLASS_NAME,\n useStyle({\n position: 'absolute',\n top: '100%',\n left: position === 'left' ? 0 : 'auto',\n right: position === 'right' ? 0 : 'auto',\n background: '#fff',\n margin: 0,\n padding: '8px 0',\n borderRadius: 4,\n boxShadow: '0 3px 10px rgba(0, 0, 0, 0.15)',\n width: DROP_DOWN_MENU_WIDTH,\n zIndex: 99,\n listStyle: 'none',\n overflow: 'hidden',\n transformOrigin: '50% 0',\n willChange: 'transform, opacity',\n transformStyle: 'preserve-3d',\n display: 'none',\n }),\n className,\n )}\n />\n )\n}\n\nconst dropIn = keyframes`\n 0% {\n opacity: 0;\n transform: rotateX(-20deg);\n }\n 100% {\n opacity: 1;\n transform: none;\n }\n`\n\ntype DropDownContainerProps = ComponentPropsWithoutRef<'div'>\n\nconst DropDownContainer = forwardRef(function DropDownContainer(\n { className, ...restOfProps }: DropDownContainerProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n return (\n <div\n {...restOfProps}\n ref={ref}\n className={cx(\n useStyle({\n position: 'relative',\n [`&:hover .${DROP_DOWN_MENU_CLASS_NAME}`]: {\n display: 'block',\n animation: `${dropIn} 0.25s`,\n },\n }),\n className,\n )}\n />\n )\n})\n\ntype BaseDropDownItemProps = {\n className?: string\n color?: ResponsiveColorData\n textStyle?: ResponsiveTextStyleData\n}\n\ntype DropDownItemProps = BaseDropDownItemProps &\n Omit<ComponentPropsWithoutRef<typeof Link>, keyof BaseDropDownItemProps>\n\nfunction DropDownItem({ className, color, textStyle, ...restOfProps }: DropDownItemProps) {\n const colorData = useResponsiveColor(color)\n\n return (\n <Link\n {...restOfProps}\n className={cx(\n useStyle({\n display: 'block',\n textDecoration: 'none',\n lineHeight: 1.4,\n padding: '8px 16px',\n color: 'black',\n backgroundColor: 'transparent',\n transition: 'background-color 0.2s',\n }),\n useStyle(useResponsiveTextStyle(textStyle)),\n useStyle(\n useResponsiveStyle([colorData, textStyle] as const, ([color, textStyle = {}]) => {\n const fontSize = textStyle.fontSize || { value: 14, unit: 'px' }\n const fontWeight = textStyle.fontWeight == null ? 'normal' : textStyle.fontWeight\n const fontStyle = textStyle.fontStyle || []\n const letterSpacing = textStyle.letterSpacing == null ? null : textStyle.letterSpacing\n const textTransform = textStyle.textTransform || []\n\n return {\n color: color == null ? 'black' : colorToString(color),\n fontSize: `${fontSize.value}${fontSize.unit}`,\n fontWeight,\n fontStyle: fontStyle.includes('italic') ? 'italic' : 'normal',\n letterSpacing: letterSpacing == null ? 'normal' : `${letterSpacing}px`,\n textTransform: textTransform.includes('uppercase') ? 'uppercase' : 'none',\n }\n }),\n ),\n useStyle({\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n }),\n className,\n )}\n />\n )\n}\n\ntype Props = Omit<ComponentPropsWithoutRef<typeof Button>, 'textColor' | 'color'> & {\n label: string\n caret?: 'caret' | 'plus' | 'arrow-down' | 'chevron-down'\n links?: Array<{\n id: string\n payload: ComponentPropsWithoutRef<typeof DropDownItem> & {\n link?: LinkData\n label: string\n }\n }>\n textColor?: ResponsiveColorData\n color?: ResponsiveColorData\n}\n\nexport default function DropDownButton({\n label,\n caret = 'caret',\n links = [],\n textColor,\n color,\n ...restOfProps\n}: Props): ReactNode {\n const container = useRef<HTMLDivElement>(null)\n const [position, setPosition] = useState<Position>('left')\n\n useIsomorphicLayoutEffect(() => {\n if (\n container.current &&\n container.current.ownerDocument.defaultView!.innerWidth <\n container.current.offsetLeft + DROP_DOWN_MENU_WIDTH\n ) {\n setPosition('right')\n } else {\n setPosition('left')\n }\n }, [setPosition])\n\n return (\n <DropDownContainer ref={container}>\n <Button\n {...restOfProps}\n textColor={useResponsiveColor(textColor)}\n color={useResponsiveColor(color)}\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <span style={{ marginRight: 6 }}>{label}</span>\n <span style={{ display: 'inline-flex', fill: 'currentColor' }}>\n {caret === 'caret' && <CaretDown8 />}\n {caret === 'plus' && <Plus8 />}\n {caret === 'arrow-down' && <ArrowDown8 />}\n {caret === 'chevron-down' && <ChevronDown8 />}\n </span>\n </div>\n </Button>\n <DropDownMenu position={position}>\n {links.map(({ id, payload }) => (\n <DropDownItem {...payload} key={id}>\n {payload.label}\n </DropDownItem>\n ))}\n </DropDownMenu>\n </DropDownContainer>\n )\n}\n"],"mappings":"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","names":["DropDownContainer","color","textStyle"]}
1
+ {"version":3,"sources":["../../../../../../../src/components/builtin/Navigation/components/DropDownButton/index.tsx"],"sourcesContent":["import {\n ComponentPropsWithoutRef,\n ForwardedRef,\n forwardRef,\n useRef,\n useState,\n ReactNode,\n} from 'react'\n\nimport { CaretDown8 } from '../../../../icons/CaretDown8'\nimport { Plus8 } from '../../../../icons/Plus8'\nimport { ArrowDown8 } from '../../../../icons/ArrowDown8'\nimport { ChevronDown8 } from '../../../../icons/ChevronDown8'\nimport { colorToString } from '../../../../utils/colorToString'\nimport { useResponsiveColor } from '../../../../hooks'\n\nimport { Link } from '../../../../shared/Link'\nimport Button from '../../../Button'\nimport { useIsomorphicLayoutEffect } from '../../../../hooks/useIsomorphicLayoutEffect'\nimport { cx, keyframes } from '@emotion/css'\nimport { useStyle } from '../../../../../runtimes/react/use-style'\nimport { useResponsiveStyle, useResponsiveTextStyle } from '../../../../utils/responsive-style'\nimport { LinkData, ResponsiveColorData, ResponsiveTextStyleData } from '@makeswift/prop-controllers'\n\nconst DROP_DOWN_MENU_WIDTH = 200\n\ntype Position = 'left' | 'right'\n\nconst DROP_DOWN_MENU_CLASS_NAME = 'drop-down-menu'\n\ntype DropDownMenuBaseProps = {\n position: Position\n}\n\ntype DropDownMenuProps = DropDownMenuBaseProps &\n Omit<ComponentPropsWithoutRef<'div'>, keyof DropDownMenuBaseProps>\n\nfunction DropDownMenu({ className, position, ...restOfProps }: DropDownMenuProps) {\n return (\n <div\n {...restOfProps}\n className={cx(\n DROP_DOWN_MENU_CLASS_NAME,\n useStyle({\n position: 'absolute',\n top: '100%',\n left: position === 'left' ? 0 : 'auto',\n right: position === 'right' ? 0 : 'auto',\n background: '#fff',\n margin: 0,\n padding: '8px 0',\n borderRadius: 4,\n boxShadow: '0 3px 10px rgba(0, 0, 0, 0.15)',\n width: DROP_DOWN_MENU_WIDTH,\n zIndex: 99,\n listStyle: 'none',\n overflow: 'hidden',\n transformOrigin: '50% 0',\n willChange: 'transform, opacity',\n transformStyle: 'preserve-3d',\n display: 'none',\n }),\n className,\n )}\n />\n )\n}\n\nconst dropIn = keyframes`\n 0% {\n opacity: 0;\n transform: rotateX(-20deg);\n }\n 100% {\n opacity: 1;\n transform: none;\n }\n`\n\ntype DropDownContainerProps = ComponentPropsWithoutRef<'div'>\n\nconst DropDownContainer = forwardRef(function DropDownContainer(\n { className, ...restOfProps }: DropDownContainerProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n return (\n <div\n {...restOfProps}\n ref={ref}\n className={cx(\n useStyle({\n position: 'relative',\n [`&:hover .${DROP_DOWN_MENU_CLASS_NAME}`]: {\n display: 'block',\n animation: `${dropIn} 0.25s`,\n },\n }),\n className,\n )}\n />\n )\n})\n\ntype BaseDropDownItemProps = {\n className?: string\n color?: ResponsiveColorData\n textStyle?: ResponsiveTextStyleData\n}\n\ntype DropDownItemProps = BaseDropDownItemProps &\n Omit<ComponentPropsWithoutRef<typeof Link>, keyof BaseDropDownItemProps>\n\nfunction DropDownItem({ className, color, textStyle, ...restOfProps }: DropDownItemProps) {\n const colorData = useResponsiveColor(color)\n\n return (\n <Link\n {...restOfProps}\n className={cx(\n useStyle({\n display: 'block',\n textDecoration: 'none',\n lineHeight: 1.4,\n padding: '8px 16px',\n color: 'black',\n backgroundColor: 'transparent',\n transition: 'background-color 0.2s',\n }),\n useStyle(useResponsiveTextStyle(textStyle)),\n useStyle(\n useResponsiveStyle([colorData, textStyle] as const, ([color, textStyle = {}]) => {\n const fontSize = textStyle.fontSize || { value: 14, unit: 'px' }\n const fontWeight = textStyle.fontWeight == null ? 'normal' : textStyle.fontWeight\n const fontStyle = textStyle.fontStyle || []\n const letterSpacing = textStyle.letterSpacing == null ? null : textStyle.letterSpacing\n const textTransform = textStyle.textTransform || []\n\n return {\n color: color == null ? 'black' : colorToString(color),\n fontSize: `${fontSize.value}${fontSize.unit}`,\n fontWeight,\n fontStyle: fontStyle.includes('italic') ? 'italic' : 'normal',\n letterSpacing: letterSpacing == null ? 'normal' : `${letterSpacing}px`,\n textTransform: textTransform.includes('uppercase') ? 'uppercase' : 'none',\n }\n }),\n ),\n useStyle({\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n }),\n className,\n )}\n />\n )\n}\n\ntype Props = Omit<ComponentPropsWithoutRef<typeof Button>, 'textColor' | 'color'> & {\n label: string\n caret?: 'caret' | 'plus' | 'arrow-down' | 'chevron-down'\n links?: Array<{\n id: string\n payload: ComponentPropsWithoutRef<typeof DropDownItem> & {\n link?: LinkData\n label: string\n }\n }>\n textColor?: ResponsiveColorData\n color?: ResponsiveColorData\n}\n\nexport default function DropDownButton({\n label,\n caret = 'caret',\n links = [],\n textColor,\n color,\n ...restOfProps\n}: Props): ReactNode {\n const container = useRef<HTMLDivElement>(null)\n const [position, setPosition] = useState<Position>('left')\n\n useIsomorphicLayoutEffect(() => {\n if (\n container.current &&\n container.current.ownerDocument.defaultView!.innerWidth <\n container.current.offsetLeft + DROP_DOWN_MENU_WIDTH\n ) {\n setPosition('right')\n } else {\n setPosition('left')\n }\n }, [setPosition])\n\n return (\n <DropDownContainer ref={container}>\n <Button\n {...restOfProps}\n textColor={useResponsiveColor(textColor)}\n color={useResponsiveColor(color)}\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <span style={{ marginRight: 6 }}>{label}</span>\n <span style={{ display: 'inline-flex', fill: 'currentColor' }}>\n {caret === 'caret' && <CaretDown8 />}\n {caret === 'plus' && <Plus8 />}\n {caret === 'arrow-down' && <ArrowDown8 />}\n {caret === 'chevron-down' && <ChevronDown8 />}\n </span>\n </div>\n </Button>\n <DropDownMenu position={position}>\n {links.map(({ id, payload }) => (\n <DropDownItem {...payload} key={id}>\n {payload.label}\n </DropDownItem>\n ))}\n </DropDownMenu>\n </DropDownContainer>\n )\n}\n"],"mappings":"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","names":["DropDownContainer","color","textStyle"]}
@@ -1,6 +1,10 @@
1
1
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
2
  import { cx } from "@emotion/css";
3
- import { useState, useRef, forwardRef } from "react";
3
+ import {
4
+ useState,
5
+ useRef,
6
+ forwardRef
7
+ } from "react";
4
8
  import { ReactPlayer } from "../../../react-player";
5
9
  import { useStyle } from "../../../../../runtimes/react/use-style";
6
10
  import { useIsomorphicLayoutEffect } from "../../../../hooks/useIsomorphicLayoutEffect";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/components/shared/BackgroundsContainer/components/BackgroundVideo/index.tsx"],"sourcesContent":["import { cx } from '@emotion/css'\nimport { useState, useRef, ComponentPropsWithoutRef, ForwardedRef, forwardRef, ReactNode } from 'react'\n\nimport { ReactPlayer } from '../../../react-player'\nimport { useStyle } from '../../../../../runtimes/react/use-style'\n\nimport { useIsomorphicLayoutEffect } from '../../../../hooks/useIsomorphicLayoutEffect'\n\nconst Container = forwardRef(function Container(\n { className, ...restOfProps }: ComponentPropsWithoutRef<'div'>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n return (\n <div\n {...restOfProps}\n ref={ref}\n className={cx(\n useStyle({\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n pointerEvents: 'none',\n overflow: 'hidden',\n }),\n className,\n )}\n />\n )\n})\n\nfunction Mask({\n backgroundColor,\n visible,\n}: {\n backgroundColor: string | undefined\n visible: boolean\n}) {\n return (\n <div\n className={useStyle({\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n background: backgroundColor,\n opacity: visible ? 1 : 0,\n transition: 'opacity 1s',\n })}\n />\n )\n}\n\nconst getScale = (element: HTMLElement, aspectRatio: number, zoom: number) => {\n const { offsetWidth: width, offsetHeight: height } = element\n const computedAspectRatio = width / height\n\n return Math.max(aspectRatio / computedAspectRatio, computedAspectRatio / aspectRatio) * zoom\n}\n\ntype Props = {\n url?: string\n aspectRatio?: number\n zoom?: number\n opacity?: number\n maskColor?: string\n}\n\nexport default function BackgroundVideo({\n url = '',\n aspectRatio = 16 / 9,\n zoom = 1,\n maskColor,\n opacity,\n}: Props): ReactNode {\n const [ready, setReady] = useState(false)\n const [scale, setScale] = useState(1)\n const container = useRef<HTMLDivElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n const { current: containerEl } = container\n\n if (!containerEl) return undefined\n\n const { defaultView } = containerEl.ownerDocument\n const handleResize = () => setScale(getScale(containerEl, aspectRatio, zoom))\n\n handleResize()\n\n defaultView!.addEventListener('resize', handleResize)\n\n return () => defaultView!.removeEventListener('resize', handleResize)\n }, [aspectRatio, zoom])\n\n if (!ReactPlayer.canPlay(url)) return <></>\n\n return (\n <Container ref={container}>\n {container.current && (\n <ReactPlayer\n url={url}\n config={{\n vimeo: { playerOptions: { background: true } },\n youtube: {\n playerVars: {\n origin: container.current.ownerDocument.defaultView?.location.origin,\n },\n },\n wistia: {\n options: {\n endVideoBehavior: 'loop',\n playbackRateControl: false,\n playbar: false,\n playButton: false,\n volumeControl: false,\n fullscreenButton: false,\n muted: true,\n },\n },\n }}\n playing\n loop\n muted\n playsinline={true}\n controls={false}\n onReady={() => setReady(true)}\n style={{\n transform: `scale3d(${scale}, ${scale}, 1)`,\n opacity,\n }}\n width=\"100%\"\n height=\"100%\"\n />\n )}\n <Mask backgroundColor={maskColor} visible={!ready} />\n </Container>\n )\n}\n"],"mappings":"AAaI,SAmFoC,UAnFpC,KAsFA,YAtFA;AAbJ,SAAS,UAAU;AACnB,SAAS,UAAU,QAAgD,kBAA6B;AAEhG,SAAS,mBAAmB;AAC5B,SAAS,gBAAgB;AAEzB,SAAS,iCAAiC;AAE1C,MAAM,YAAY,WAAW,SAASA,WACpC,EAAE,WAAW,GAAG,YAAY,GAC5B,KACA;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ;AAAA,MACA,WAAW;AAAA,QACT,SAAS;AAAA,UACP,UAAU;AAAA,UACV,KAAK;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,eAAe;AAAA,UACf,UAAU;AAAA,QACZ,CAAC;AAAA,QACD;AAAA,MACF;AAAA;AAAA,EACF;AAEJ,CAAC;AAED,SAAS,KAAK;AAAA,EACZ;AAAA,EACA;AACF,GAGG;AACD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,SAAS;AAAA,QAClB,UAAU;AAAA,QACV,KAAK;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,SAAS,UAAU,IAAI;AAAA,QACvB,YAAY;AAAA,MACd,CAAC;AAAA;AAAA,EACH;AAEJ;AAEA,MAAM,WAAW,CAAC,SAAsB,aAAqB,SAAiB;AAC5E,QAAM,EAAE,aAAa,OAAO,cAAc,OAAO,IAAI;AACrD,QAAM,sBAAsB,QAAQ;AAEpC,SAAO,KAAK,IAAI,cAAc,qBAAqB,sBAAsB,WAAW,IAAI;AAC1F;AAUe,SAAR,gBAAiC;AAAA,EACtC,MAAM;AAAA,EACN,cAAc,KAAK;AAAA,EACnB,OAAO;AAAA,EACP;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,KAAK;AACxC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,CAAC;AACpC,QAAM,YAAY,OAAuB,IAAI;AAE7C,4BAA0B,MAAM;AAC9B,UAAM,EAAE,SAAS,YAAY,IAAI;AAEjC,QAAI,CAAC;AAAa,aAAO;AAEzB,UAAM,EAAE,YAAY,IAAI,YAAY;AACpC,UAAM,eAAe,MAAM,SAAS,SAAS,aAAa,aAAa,IAAI,CAAC;AAE5E,iBAAa;AAEb,gBAAa,iBAAiB,UAAU,YAAY;AAEpD,WAAO,MAAM,YAAa,oBAAoB,UAAU,YAAY;AAAA,EACtE,GAAG,CAAC,aAAa,IAAI,CAAC;AAEtB,MAAI,CAAC,YAAY,QAAQ,GAAG;AAAG,WAAO,gCAAE;AAExC,SACE,qBAAC,aAAU,KAAK,WACb;AAAA,cAAU,WACT;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,QAAQ;AAAA,UACN,OAAO,EAAE,eAAe,EAAE,YAAY,KAAK,EAAE;AAAA,UAC7C,SAAS;AAAA,YACP,YAAY;AAAA,cACV,QAAQ,UAAU,QAAQ,cAAc,aAAa,SAAS;AAAA,YAChE;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP,kBAAkB;AAAA,cAClB,qBAAqB;AAAA,cACrB,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,kBAAkB;AAAA,cAClB,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,QACA,SAAO;AAAA,QACP,MAAI;AAAA,QACJ,OAAK;AAAA,QACL,aAAa;AAAA,QACb,UAAU;AAAA,QACV,SAAS,MAAM,SAAS,IAAI;AAAA,QAC5B,OAAO;AAAA,UACL,WAAW,WAAW,KAAK,KAAK,KAAK;AAAA,UACrC;AAAA,QACF;AAAA,QACA,OAAM;AAAA,QACN,QAAO;AAAA;AAAA,IACT;AAAA,IAEF,oBAAC,QAAK,iBAAiB,WAAW,SAAS,CAAC,OAAO;AAAA,KACrD;AAEJ;","names":["Container"]}
1
+ {"version":3,"sources":["../../../../../../../src/components/shared/BackgroundsContainer/components/BackgroundVideo/index.tsx"],"sourcesContent":["import { cx } from '@emotion/css'\nimport {\n useState,\n useRef,\n ComponentPropsWithoutRef,\n ForwardedRef,\n forwardRef,\n ReactNode,\n} from 'react'\n\nimport { ReactPlayer } from '../../../react-player'\nimport { useStyle } from '../../../../../runtimes/react/use-style'\n\nimport { useIsomorphicLayoutEffect } from '../../../../hooks/useIsomorphicLayoutEffect'\n\nconst Container = forwardRef(function Container(\n { className, ...restOfProps }: ComponentPropsWithoutRef<'div'>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n return (\n <div\n {...restOfProps}\n ref={ref}\n className={cx(\n useStyle({\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n pointerEvents: 'none',\n overflow: 'hidden',\n }),\n className,\n )}\n />\n )\n})\n\nfunction Mask({\n backgroundColor,\n visible,\n}: {\n backgroundColor: string | undefined\n visible: boolean\n}) {\n return (\n <div\n className={useStyle({\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n background: backgroundColor,\n opacity: visible ? 1 : 0,\n transition: 'opacity 1s',\n })}\n />\n )\n}\n\nconst getScale = (element: HTMLElement, aspectRatio: number, zoom: number) => {\n const { offsetWidth: width, offsetHeight: height } = element\n const computedAspectRatio = width / height\n\n return Math.max(aspectRatio / computedAspectRatio, computedAspectRatio / aspectRatio) * zoom\n}\n\ntype Props = {\n url?: string\n aspectRatio?: number\n zoom?: number\n opacity?: number\n maskColor?: string\n}\n\nexport default function BackgroundVideo({\n url = '',\n aspectRatio = 16 / 9,\n zoom = 1,\n maskColor,\n opacity,\n}: Props): ReactNode {\n const [ready, setReady] = useState(false)\n const [scale, setScale] = useState(1)\n const container = useRef<HTMLDivElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n const { current: containerEl } = container\n\n if (!containerEl) return undefined\n\n const { defaultView } = containerEl.ownerDocument\n const handleResize = () => setScale(getScale(containerEl, aspectRatio, zoom))\n\n handleResize()\n\n defaultView!.addEventListener('resize', handleResize)\n\n return () => defaultView!.removeEventListener('resize', handleResize)\n }, [aspectRatio, zoom])\n\n if (!ReactPlayer.canPlay(url)) return <></>\n\n return (\n <Container ref={container}>\n {container.current && (\n <ReactPlayer\n url={url}\n config={{\n vimeo: { playerOptions: { background: true } },\n youtube: {\n playerVars: {\n origin: container.current.ownerDocument.defaultView?.location.origin,\n },\n },\n wistia: {\n options: {\n endVideoBehavior: 'loop',\n playbackRateControl: false,\n playbar: false,\n playButton: false,\n volumeControl: false,\n fullscreenButton: false,\n muted: true,\n },\n },\n }}\n playing\n loop\n muted\n playsinline={true}\n controls={false}\n onReady={() => setReady(true)}\n style={{\n transform: `scale3d(${scale}, ${scale}, 1)`,\n opacity,\n }}\n width=\"100%\"\n height=\"100%\"\n />\n )}\n <Mask backgroundColor={maskColor} visible={!ready} />\n </Container>\n )\n}\n"],"mappings":"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","names":["Container"]}
@@ -11,6 +11,8 @@ import {
11
11
  ComboboxDefinition,
12
12
  Font,
13
13
  FontDefinition,
14
+ unstable_Gallery,
15
+ unstable_GalleryDefinition,
14
16
  Group,
15
17
  GroupDefinition,
16
18
  GroupControl,
@@ -95,6 +97,8 @@ export {
95
97
  TextAreaDefinition,
96
98
  TextInput,
97
99
  TextInputDefinition,
100
+ unstable_Gallery,
101
+ unstable_GalleryDefinition,
98
102
  unstable_StyleV2,
99
103
  unstable_Typography,
100
104
  unstable_TypographyDefinition
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/controls/index.ts"],"sourcesContent":["export * from './control'\n\nexport {\n ControlDefinition,\n Checkbox,\n CheckboxDefinition,\n Code,\n CodeDefinition,\n Color,\n ColorDefinition,\n Combobox,\n ComboboxDefinition,\n Font,\n FontDefinition,\n Group,\n GroupDefinition,\n GroupControl,\n IconRadioGroup,\n IconRadioGroupDefinition,\n type IconRadioGroupIcon,\n Image,\n ImageDefinition,\n List,\n ListDefinition,\n ListControl,\n Number,\n NumberDefinition,\n Select,\n SelectDefinition,\n Shape,\n ShapeDefinition,\n ShapeControl,\n Slider,\n SliderDefinition,\n Style,\n StyleDefinition,\n type StyleProperty,\n StyleControl,\n TextInput,\n TextInputDefinition,\n TextArea,\n TextAreaDefinition,\n unstable_Typography,\n unstable_TypographyDefinition,\n} from '@makeswift/controls'\n\nexport { Link, LinkDefinition } from './link'\nexport { RichTextV1Definition, RichTextV1Control } from './rich-text'\nexport { RichText, RichTextV2Definition, RichTextV2Control } from './rich-text-v2'\nexport { Slot, SlotDefinition, SlotControl } from './slot'\nexport { unstable_StyleV2, StyleV2Definition, StyleV2Control } from './style-v2/style-v2'\n"],"mappings":"AAAA,cAAc;AAEd;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,MAAM,sBAAsB;AACrC,SAAS,sBAAsB,yBAAyB;AACxD,SAAS,UAAU,sBAAsB,yBAAyB;AAClE,SAAS,MAAM,gBAAgB,mBAAmB;AAClD,SAAS,kBAAkB,mBAAmB,sBAAsB;","names":[]}
1
+ {"version":3,"sources":["../../../src/controls/index.ts"],"sourcesContent":["export * from './control'\n\nexport {\n ControlDefinition,\n Checkbox,\n CheckboxDefinition,\n Code,\n CodeDefinition,\n Color,\n ColorDefinition,\n Combobox,\n ComboboxDefinition,\n Font,\n FontDefinition,\n unstable_Gallery,\n unstable_GalleryDefinition,\n type GalleryOption,\n type GalleryPage,\n Group,\n GroupDefinition,\n GroupControl,\n IconRadioGroup,\n IconRadioGroupDefinition,\n type IconRadioGroupIcon,\n Image,\n ImageDefinition,\n List,\n ListDefinition,\n ListControl,\n Number,\n NumberDefinition,\n Select,\n SelectDefinition,\n Shape,\n ShapeDefinition,\n ShapeControl,\n Slider,\n SliderDefinition,\n Style,\n StyleDefinition,\n type StyleProperty,\n StyleControl,\n TextInput,\n TextInputDefinition,\n TextArea,\n TextAreaDefinition,\n unstable_Typography,\n unstable_TypographyDefinition,\n} from '@makeswift/controls'\n\nexport { Link, LinkDefinition } from './link'\nexport { RichTextV1Definition, RichTextV1Control } from './rich-text'\nexport { RichText, RichTextV2Definition, RichTextV2Control } from './rich-text-v2'\nexport { Slot, SlotDefinition, SlotControl } from './slot'\nexport { unstable_StyleV2, StyleV2Definition, StyleV2Control } from './style-v2/style-v2'\n"],"mappings":"AAAA,cAAc;AAEd;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,MAAM,sBAAsB;AACrC,SAAS,sBAAsB,yBAAyB;AACxD,SAAS,UAAU,sBAAsB,yBAAyB;AAClE,SAAS,MAAM,gBAAgB,mBAAmB;AAClD,SAAS,kBAAkB,mBAAmB,sBAAsB;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/controls/link.ts"],"sourcesContent":["import { z } from 'zod'\nimport { type MouseEvent } from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport {\n type DeserializedRecord,\n LinkDefinition as BaseLinkDefinition,\n LinkSchema,\n} from '@makeswift/controls'\n\ntype DataType = z.infer<typeof LinkDefinition.schema.data>\ntype ScrollOptions = z.infer<typeof LinkSchema.scrollOptions>\ntype MouseEventType = MouseEvent<Element>\n\nexport function validateElementRef(href: string) {\n try {\n const hash = new URL(`http://www.example.com/${href}`).hash\n return href === hash ? hash : undefined\n } catch (error) {\n return undefined\n }\n}\n\nexport class LinkDefinition extends BaseLinkDefinition<MouseEventType> {\n static deserialize(data: DeserializedRecord): LinkDefinition {\n if (data.type !== LinkDefinition.type) {\n throw new Error(`Link: expected type ${LinkDefinition.type}, got ${data.type}`)\n }\n\n const { config } = LinkDefinition.schema.definition.parse(data)\n return Link(config)\n }\n\n resolveOnClick(\n data: DataType | undefined,\n href: string,\n scrollOptions: ScrollOptions | undefined,\n ) {\n const onClick = (event: MouseEvent<Element>) => {\n if (event.defaultPrevented) return\n\n if (data && data.type === 'SCROLL_TO_ELEMENT') {\n const hash = validateElementRef(href)\n if (hash == null) {\n console.error(`Scroll-to-element link received invalid href: ${href}`)\n return\n }\n\n event.preventDefault()\n const view = event.view as unknown as Window\n\n scrollIntoView(view.document.querySelector(hash)!, {\n behavior: 'smooth',\n block: scrollOptions?.block,\n })\n\n if (view.location.hash !== hash) view.history.pushState({}, '', hash)\n }\n }\n\n onClick.$scrollOptions = scrollOptions\n return onClick\n }\n}\n\nexport function Link(config?: { description?: string, label?: string }): LinkDefinition {\n return new LinkDefinition(config ?? {})\n}\n"],"mappings":"AAEA,OAAO,oBAAoB;AAE3B;AAAA,EAEE,kBAAkB;AAAA,OAEb;AAMA,SAAS,mBAAmB,MAAc;AAC/C,MAAI;AACF,UAAM,OAAO,IAAI,IAAI,0BAA0B,IAAI,EAAE,EAAE;AACvD,WAAO,SAAS,OAAO,OAAO;AAAA,EAChC,SAAS,OAAO;AACd,WAAO;AAAA,EACT;AACF;AAEO,MAAM,uBAAuB,mBAAmC;AAAA,EACrE,OAAO,YAAY,MAA0C;AAC3D,QAAI,KAAK,SAAS,eAAe,MAAM;AACrC,YAAM,IAAI,MAAM,uBAAuB,eAAe,IAAI,SAAS,KAAK,IAAI,EAAE;AAAA,IAChF;AAEA,UAAM,EAAE,OAAO,IAAI,eAAe,OAAO,WAAW,MAAM,IAAI;AAC9D,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,eACE,MACA,MACA,eACA;AACA,UAAM,UAAU,CAAC,UAA+B;AAC9C,UAAI,MAAM;AAAkB;AAE5B,UAAI,QAAQ,KAAK,SAAS,qBAAqB;AAC7C,cAAM,OAAO,mBAAmB,IAAI;AACpC,YAAI,QAAQ,MAAM;AAChB,kBAAQ,MAAM,iDAAiD,IAAI,EAAE;AACrE;AAAA,QACF;AAEA,cAAM,eAAe;AACrB,cAAM,OAAO,MAAM;AAEnB,uBAAe,KAAK,SAAS,cAAc,IAAI,GAAI;AAAA,UACjD,UAAU;AAAA,UACV,OAAO,eAAe;AAAA,QACxB,CAAC;AAED,YAAI,KAAK,SAAS,SAAS;AAAM,eAAK,QAAQ,UAAU,CAAC,GAAG,IAAI,IAAI;AAAA,MACtE;AAAA,IACF;AAEA,YAAQ,iBAAiB;AACzB,WAAO;AAAA,EACT;AACF;AAEO,SAAS,KAAK,QAAmE;AACtF,SAAO,IAAI,eAAe,UAAU,CAAC,CAAC;AACxC;","names":[]}
1
+ {"version":3,"sources":["../../../src/controls/link.ts"],"sourcesContent":["import { z } from 'zod'\nimport { type MouseEvent } from 'react'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport {\n type DeserializedRecord,\n LinkDefinition as BaseLinkDefinition,\n LinkSchema,\n} from '@makeswift/controls'\n\ntype DataType = z.infer<typeof LinkDefinition.schema.data>\ntype ScrollOptions = z.infer<typeof LinkSchema.scrollOptions>\ntype MouseEventType = MouseEvent<Element>\n\nexport function validateElementRef(href: string) {\n try {\n const hash = new URL(`http://www.example.com/${href}`).hash\n return href === hash ? hash : undefined\n } catch (error) {\n return undefined\n }\n}\n\nexport class LinkDefinition extends BaseLinkDefinition<MouseEventType> {\n static deserialize(data: DeserializedRecord): LinkDefinition {\n if (data.type !== LinkDefinition.type) {\n throw new Error(`Link: expected type ${LinkDefinition.type}, got ${data.type}`)\n }\n\n const { config } = LinkDefinition.schema.definition.parse(data)\n return Link(config)\n }\n\n resolveOnClick(\n data: DataType | undefined,\n href: string,\n scrollOptions: ScrollOptions | undefined,\n ) {\n const onClick = (event: MouseEvent<Element>) => {\n if (event.defaultPrevented) return\n\n if (data && data.type === 'SCROLL_TO_ELEMENT') {\n const hash = validateElementRef(href)\n if (hash == null) {\n console.error(`Scroll-to-element link received invalid href: ${href}`)\n return\n }\n\n event.preventDefault()\n const view = event.view as unknown as Window\n\n scrollIntoView(view.document.querySelector(hash)!, {\n behavior: 'smooth',\n block: scrollOptions?.block,\n })\n\n if (view.location.hash !== hash) view.history.pushState({}, '', hash)\n }\n }\n\n onClick.$scrollOptions = scrollOptions\n return onClick\n }\n}\n\nexport function Link(config?: { description?: string; label?: string }): LinkDefinition {\n return new LinkDefinition(config ?? {})\n}\n"],"mappings":"AAEA,OAAO,oBAAoB;AAE3B;AAAA,EAEE,kBAAkB;AAAA,OAEb;AAMA,SAAS,mBAAmB,MAAc;AAC/C,MAAI;AACF,UAAM,OAAO,IAAI,IAAI,0BAA0B,IAAI,EAAE,EAAE;AACvD,WAAO,SAAS,OAAO,OAAO;AAAA,EAChC,SAAS,OAAO;AACd,WAAO;AAAA,EACT;AACF;AAEO,MAAM,uBAAuB,mBAAmC;AAAA,EACrE,OAAO,YAAY,MAA0C;AAC3D,QAAI,KAAK,SAAS,eAAe,MAAM;AACrC,YAAM,IAAI,MAAM,uBAAuB,eAAe,IAAI,SAAS,KAAK,IAAI,EAAE;AAAA,IAChF;AAEA,UAAM,EAAE,OAAO,IAAI,eAAe,OAAO,WAAW,MAAM,IAAI;AAC9D,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,eACE,MACA,MACA,eACA;AACA,UAAM,UAAU,CAAC,UAA+B;AAC9C,UAAI,MAAM;AAAkB;AAE5B,UAAI,QAAQ,KAAK,SAAS,qBAAqB;AAC7C,cAAM,OAAO,mBAAmB,IAAI;AACpC,YAAI,QAAQ,MAAM;AAChB,kBAAQ,MAAM,iDAAiD,IAAI,EAAE;AACrE;AAAA,QACF;AAEA,cAAM,eAAe;AACrB,cAAM,OAAO,MAAM;AAEnB,uBAAe,KAAK,SAAS,cAAc,IAAI,GAAI;AAAA,UACjD,UAAU;AAAA,UACV,OAAO,eAAe;AAAA,QACxB,CAAC;AAED,YAAI,KAAK,SAAS,SAAS;AAAM,eAAK,QAAQ,UAAU,CAAC,GAAG,IAAI,IAAI;AAAA,MACtE;AAAA,IACF;AAEA,YAAQ,iBAAiB;AACzB,WAAO;AAAA,EACT;AACF;AAEO,SAAS,KAAK,QAAmE;AACtF,SAAO,IAAI,eAAe,UAAU,CAAC,CAAC;AACxC;","names":[]}
@@ -25,8 +25,8 @@ class Definition extends BaseDefinition {
25
25
  }
26
26
  };
27
27
  }
28
- createInstance(sendMessage) {
29
- return new RichTextControl(sendMessage);
28
+ createInstance(args) {
29
+ return new RichTextControl(args);
30
30
  }
31
31
  }
32
32
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/controls/rich-text/rich-text.ts"],"sourcesContent":["import { ReactNode } from 'react'\nimport {\n RichTextV1Definition,\n SendMessage,\n StableValue,\n type DeserializedRecord,\n type ResourceResolver,\n type Stylesheet,\n type Resolvable,\n type DataType,\n} from '@makeswift/controls'\n\nimport { renderRichText } from '../../runtimes/react/controls/rich-text'\n\nimport { RichTextControl } from './control'\n\nabstract class BaseDefinition extends RichTextV1Definition<ReactNode, RichTextControl> {}\n\nclass Definition extends BaseDefinition {\n static deserialize(data: DeserializedRecord): Definition {\n if (data.type !== Definition.type) {\n throw new Error(`RichTextV1: expected type ${Definition.type}, got ${data.type}`)\n }\n\n return new (class RichTextV1 extends Definition {})()\n }\n\n resolveValue(\n data: DataType<BaseDefinition> | undefined,\n _resolver: ResourceResolver,\n _stylesheet: Stylesheet,\n control?: RichTextControl,\n ): Resolvable<ReactNode | undefined> {\n const stableValue = StableValue({\n name: Definition.type,\n read: () => renderRichText(data, control ?? null),\n })\n\n return {\n ...stableValue,\n triggerResolve: async () => {},\n }\n }\n\n createInstance(sendMessage: SendMessage<any>) {\n return new RichTextControl(sendMessage)\n }\n}\n\nexport { Definition as RichTextV1Definition, RichTextControl as RichTextV1Control }\n"],"mappings":"AACA;AAAA,EACE;AAAA,EAEA;AAAA,OAMK;AAEP,SAAS,sBAAsB;AAE/B,SAAS,uBAAuB;AAEhC,MAAe,uBAAuB,qBAAiD;AAAC;AAExF,MAAM,mBAAmB,eAAe;AAAA,EACtC,OAAO,YAAY,MAAsC;AACvD,QAAI,KAAK,SAAS,WAAW,MAAM;AACjC,YAAM,IAAI,MAAM,6BAA6B,WAAW,IAAI,SAAS,KAAK,IAAI,EAAE;AAAA,IAClF;AAEA,WAAO,IAAK,MAAM,mBAAmB,WAAW;AAAA,IAAC,EAAG;AAAA,EACtD;AAAA,EAEA,aACE,MACA,WACA,aACA,SACmC;AACnC,UAAM,cAAc,YAAY;AAAA,MAC9B,MAAM,WAAW;AAAA,MACjB,MAAM,MAAM,eAAe,MAAM,WAAW,IAAI;AAAA,IAClD,CAAC;AAED,WAAO;AAAA,MACL,GAAG;AAAA,MACH,gBAAgB,YAAY;AAAA,MAAC;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,eAAe,aAA+B;AAC5C,WAAO,IAAI,gBAAgB,WAAW;AAAA,EACxC;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/controls/rich-text/rich-text.ts"],"sourcesContent":["import { ReactNode } from 'react'\nimport {\n RichTextV1Definition,\n StableValue,\n type DeserializedRecord,\n type ControlInstanceArgs,\n type ResourceResolver,\n type Stylesheet,\n type Resolvable,\n type DataType,\n} from '@makeswift/controls'\n\nimport { renderRichText } from '../../runtimes/react/controls/rich-text'\n\nimport { RichTextControl } from './control'\n\nabstract class BaseDefinition extends RichTextV1Definition<ReactNode, RichTextControl> {}\n\nclass Definition extends BaseDefinition {\n static deserialize(data: DeserializedRecord): Definition {\n if (data.type !== Definition.type) {\n throw new Error(`RichTextV1: expected type ${Definition.type}, got ${data.type}`)\n }\n\n return new (class RichTextV1 extends Definition {})()\n }\n\n resolveValue(\n data: DataType<BaseDefinition> | undefined,\n _resolver: ResourceResolver,\n _stylesheet: Stylesheet,\n control?: RichTextControl,\n ): Resolvable<ReactNode | undefined> {\n const stableValue = StableValue({\n name: Definition.type,\n read: () => renderRichText(data, control ?? null),\n })\n\n return {\n ...stableValue,\n triggerResolve: async () => {},\n }\n }\n\n createInstance(args: ControlInstanceArgs) {\n return new RichTextControl(args)\n }\n}\n\nexport { Definition as RichTextV1Definition, RichTextControl as RichTextV1Control }\n"],"mappings":"AACA;AAAA,EACE;AAAA,EACA;AAAA,OAOK;AAEP,SAAS,sBAAsB;AAE/B,SAAS,uBAAuB;AAEhC,MAAe,uBAAuB,qBAAiD;AAAC;AAExF,MAAM,mBAAmB,eAAe;AAAA,EACtC,OAAO,YAAY,MAAsC;AACvD,QAAI,KAAK,SAAS,WAAW,MAAM;AACjC,YAAM,IAAI,MAAM,6BAA6B,WAAW,IAAI,SAAS,KAAK,IAAI,EAAE;AAAA,IAClF;AAEA,WAAO,IAAK,MAAM,mBAAmB,WAAW;AAAA,IAAC,EAAG;AAAA,EACtD;AAAA,EAEA,aACE,MACA,WACA,aACA,SACmC;AACnC,UAAM,cAAc,YAAY;AAAA,MAC9B,MAAM,WAAW;AAAA,MACjB,MAAM,MAAM,eAAe,MAAM,WAAW,IAAI;AAAA,IAClD,CAAC;AAED,WAAO;AAAA,MACL,GAAG;AAAA,MACH,gBAAgB,YAAY;AAAA,MAAC;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,eAAe,MAA2B;AACxC,WAAO,IAAI,gBAAgB,IAAI;AAAA,EACjC;AACF;","names":[]}
@@ -4,8 +4,8 @@ import {
4
4
  } from "@makeswift/controls";
5
5
  import { RichTextV2Definition } from "./rich-text-v2";
6
6
  class RichTextV2Control extends ControlInstance {
7
- constructor(send, descriptor) {
8
- super(send);
7
+ constructor(descriptor, args) {
8
+ super(args);
9
9
  this.descriptor = descriptor;
10
10
  }
11
11
  static messagePrefix = `${RichTextDefinition.type}::control-message`;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/controls/rich-text-v2/control.ts"],"sourcesContent":["import { Editor } from 'slate'\n// @ts-expect-error: there are no types for 'corporate-ipsum'\nimport ipsum from 'corporate-ipsum'\n\nimport {\n RichTextDefinition,\n ControlInstance,\n Slate,\n type BoxDisplayModel,\n type DataType,\n type SendMessage,\n type Data,\n} from '@makeswift/controls'\n\nimport { RichTextV2Definition } from './rich-text-v2'\n\n// COSMOS -> HOST\ntype ResetValueMessage = { type: typeof RichTextV2Control.RESET_VALUE }\ntype FocusMessage = { type: typeof RichTextV2Control.FOCUS }\ntype RunPluginControlActionMessage = {\n type: typeof RichTextV2Control.RUN_PLUGIN_CONTROL_ACTION\n pluginIndex: number\n value: Data\n}\n\n// HOST -> COSMOS\ntype SetDefaultValueMessage = {\n type: typeof RichTextV2Control.SET_DEFAULT_VALUE\n value: Slate.Descendant[]\n}\n\ntype SetPluginControlValueMessage = {\n type: typeof RichTextV2Control.SET_PLUGIN_CONTROL_VALUE\n value: Data[]\n}\n\ntype OnChangeMessage = {\n type: typeof RichTextV2Control.ON_CHANGE\n value: DataType<RichTextV2Definition>\n}\n\ntype SelectMessage = { type: typeof RichTextV2Control.SELECT }\n\ntype SwitchToBuildModeMessage = {\n type: typeof RichTextV2Control.SWITCH_TO_BUILD_MODE\n}\n\ntype ChangeBoxModelMessage = {\n type: typeof RichTextV2Control.CHANGE_BOX_MODEL\n payload: { boxModel: BoxDisplayModel | null }\n}\n\ntype UndoMessage = { type: typeof RichTextV2Control.UNDO }\ntype RedoMessage = { type: typeof RichTextV2Control.REDO }\n\ntype Message =\n | ResetValueMessage\n | FocusMessage\n | RunPluginControlActionMessage\n | SetDefaultValueMessage\n | SetPluginControlValueMessage\n | OnChangeMessage\n | SelectMessage\n | SwitchToBuildModeMessage\n | ChangeBoxModelMessage\n | UndoMessage\n | RedoMessage\n\nexport class RichTextV2Control extends ControlInstance<Message> {\n private static readonly messagePrefix = `${RichTextDefinition.type}::control-message` as const\n\n // COSMOS -> HOST\n static readonly RESET_VALUE = `${this.messagePrefix}::reset-value` as const\n static readonly FOCUS = `${this.messagePrefix}::focus` as const\n static readonly RUN_PLUGIN_CONTROL_ACTION =\n `${this.messagePrefix}::run-plugin-control-action` as const\n\n // HOST -> COSMOS\n static readonly SET_DEFAULT_VALUE = `${this.messagePrefix}::set-default-value` as const\n static readonly SET_PLUGIN_CONTROL_VALUE =\n `${this.messagePrefix}::set-plugin-control-value` as const\n static readonly ON_CHANGE = `${this.messagePrefix}::on-change` as const\n static readonly SELECT = `${this.messagePrefix}::select` as const\n static readonly SWITCH_TO_BUILD_MODE = `${this.messagePrefix}::switch-to-build-mode` as const\n static readonly CHANGE_BOX_MODEL = `${this.messagePrefix}::change-box-model` as const\n\n static readonly REDO = `${this.messagePrefix}::redo` as const\n static readonly UNDO = `${this.messagePrefix}::undo` as const\n\n private editor: Editor | null = null\n private defaultValue: Slate.Descendant[] | null = null\n\n constructor(\n send: SendMessage<Message>,\n private readonly descriptor: RichTextV2Definition,\n ) {\n super(send)\n }\n\n recv = (message: Message): void => {\n if (!this.editor) return\n\n switch (message.type) {\n case RichTextV2Control.FOCUS: {\n this.editor.focusAndSelectAll()\n break\n }\n\n case RichTextV2Control.RESET_VALUE: {\n if (this.defaultValue) {\n this.editor.resetValue(this.defaultValue)\n setTimeout(() => {\n this.onLocalUserChange()\n })\n }\n break\n }\n\n case RichTextV2Control.RUN_PLUGIN_CONTROL_ACTION: {\n this.descriptor.pluginControlAt(message.pluginIndex)?.onChange?.(this.editor, message.value)\n break\n }\n }\n }\n\n child(_key: string): ControlInstance | undefined {\n return undefined\n }\n\n setEditor(editor: Editor) {\n this.editor = editor\n this.sendMessage({\n type: RichTextV2Control.SET_PLUGIN_CONTROL_VALUE,\n value: this.getValue(editor),\n })\n\n const _onChange = editor.onChange\n this.editor.onChange = options => {\n _onChange(options)\n this.updatePluginValues()\n if (this.editor == null || options?.operation == null) return\n this.onLocalUserChange()\n }\n }\n\n setDefaultValue(defaultValue: Slate.Descendant[]) {\n this.defaultValue = defaultValue\n this.sendMessage({\n type: RichTextV2Control.SET_DEFAULT_VALUE,\n value: defaultValue,\n })\n }\n\n onLocalUserChange() {\n if (this.editor == null) return\n\n this.sendMessage({\n type: RichTextV2Control.ON_CHANGE,\n value: RichTextV2Definition.nodesToDataV2(this.editor.children, this.editor.currentKey),\n })\n }\n\n updatePluginValues() {\n const editor = this.editor\n if (editor == null) return\n\n this.sendMessage({\n type: RichTextV2Control.SET_PLUGIN_CONTROL_VALUE,\n value: this.getValue(editor),\n })\n }\n\n getValue(editor: Editor) {\n return this.descriptor.pluginControls.map(control => control.getValue?.(editor)) ?? []\n }\n\n select() {\n this.sendMessage({ type: RichTextV2Control.SELECT })\n }\n\n switchToBuildMode() {\n this.sendMessage({ type: RichTextV2Control.SWITCH_TO_BUILD_MODE })\n }\n\n undo() {\n this.sendMessage({ type: RichTextV2Control.UNDO })\n }\n\n redo() {\n this.sendMessage({ type: RichTextV2Control.REDO })\n }\n\n changeBoxModel(boxModel: BoxDisplayModel | null): void {\n this.sendMessage({\n type: RichTextV2Control.CHANGE_BOX_MODEL,\n payload: { boxModel },\n })\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/controls/rich-text-v2/control.ts"],"sourcesContent":["import { Editor } from 'slate'\n// @ts-expect-error: there are no types for 'corporate-ipsum'\nimport ipsum from 'corporate-ipsum'\n\nimport {\n RichTextDefinition,\n ControlInstance,\n Slate,\n type BoxDisplayModel,\n type DataType,\n type ControlInstanceArgs,\n type Data,\n} from '@makeswift/controls'\n\nimport { RichTextV2Definition } from './rich-text-v2'\n\n// COSMOS -> HOST\ntype ResetValueMessage = { type: typeof RichTextV2Control.RESET_VALUE }\ntype FocusMessage = { type: typeof RichTextV2Control.FOCUS }\ntype RunPluginControlActionMessage = {\n type: typeof RichTextV2Control.RUN_PLUGIN_CONTROL_ACTION\n pluginIndex: number\n value: Data\n}\n\n// HOST -> COSMOS\ntype SetDefaultValueMessage = {\n type: typeof RichTextV2Control.SET_DEFAULT_VALUE\n value: Slate.Descendant[]\n}\n\ntype SetPluginControlValueMessage = {\n type: typeof RichTextV2Control.SET_PLUGIN_CONTROL_VALUE\n value: Data[]\n}\n\ntype OnChangeMessage = {\n type: typeof RichTextV2Control.ON_CHANGE\n value: DataType<RichTextV2Definition>\n}\n\ntype SelectMessage = { type: typeof RichTextV2Control.SELECT }\n\ntype SwitchToBuildModeMessage = {\n type: typeof RichTextV2Control.SWITCH_TO_BUILD_MODE\n}\n\ntype ChangeBoxModelMessage = {\n type: typeof RichTextV2Control.CHANGE_BOX_MODEL\n payload: { boxModel: BoxDisplayModel | null }\n}\n\ntype UndoMessage = { type: typeof RichTextV2Control.UNDO }\ntype RedoMessage = { type: typeof RichTextV2Control.REDO }\n\ntype Message =\n | ResetValueMessage\n | FocusMessage\n | RunPluginControlActionMessage\n | SetDefaultValueMessage\n | SetPluginControlValueMessage\n | OnChangeMessage\n | SelectMessage\n | SwitchToBuildModeMessage\n | ChangeBoxModelMessage\n | UndoMessage\n | RedoMessage\n\nexport class RichTextV2Control extends ControlInstance<Message> {\n private static readonly messagePrefix = `${RichTextDefinition.type}::control-message` as const\n\n // COSMOS -> HOST\n static readonly RESET_VALUE = `${this.messagePrefix}::reset-value` as const\n static readonly FOCUS = `${this.messagePrefix}::focus` as const\n static readonly RUN_PLUGIN_CONTROL_ACTION =\n `${this.messagePrefix}::run-plugin-control-action` as const\n\n // HOST -> COSMOS\n static readonly SET_DEFAULT_VALUE = `${this.messagePrefix}::set-default-value` as const\n static readonly SET_PLUGIN_CONTROL_VALUE =\n `${this.messagePrefix}::set-plugin-control-value` as const\n static readonly ON_CHANGE = `${this.messagePrefix}::on-change` as const\n static readonly SELECT = `${this.messagePrefix}::select` as const\n static readonly SWITCH_TO_BUILD_MODE = `${this.messagePrefix}::switch-to-build-mode` as const\n static readonly CHANGE_BOX_MODEL = `${this.messagePrefix}::change-box-model` as const\n\n static readonly REDO = `${this.messagePrefix}::redo` as const\n static readonly UNDO = `${this.messagePrefix}::undo` as const\n\n private editor: Editor | null = null\n private defaultValue: Slate.Descendant[] | null = null\n\n constructor(\n private readonly descriptor: RichTextV2Definition,\n args: ControlInstanceArgs<Message>,\n ) {\n super(args)\n }\n\n recv = (message: Message): void => {\n if (!this.editor) return\n\n switch (message.type) {\n case RichTextV2Control.FOCUS: {\n this.editor.focusAndSelectAll()\n break\n }\n\n case RichTextV2Control.RESET_VALUE: {\n if (this.defaultValue) {\n this.editor.resetValue(this.defaultValue)\n setTimeout(() => {\n this.onLocalUserChange()\n })\n }\n break\n }\n\n case RichTextV2Control.RUN_PLUGIN_CONTROL_ACTION: {\n this.descriptor.pluginControlAt(message.pluginIndex)?.onChange?.(this.editor, message.value)\n break\n }\n }\n }\n\n child(_key: string): ControlInstance | undefined {\n return undefined\n }\n\n setEditor(editor: Editor) {\n this.editor = editor\n this.sendMessage({\n type: RichTextV2Control.SET_PLUGIN_CONTROL_VALUE,\n value: this.getValue(editor),\n })\n\n const _onChange = editor.onChange\n this.editor.onChange = options => {\n _onChange(options)\n this.updatePluginValues()\n if (this.editor == null || options?.operation == null) return\n this.onLocalUserChange()\n }\n }\n\n setDefaultValue(defaultValue: Slate.Descendant[]) {\n this.defaultValue = defaultValue\n this.sendMessage({\n type: RichTextV2Control.SET_DEFAULT_VALUE,\n value: defaultValue,\n })\n }\n\n onLocalUserChange() {\n if (this.editor == null) return\n\n this.sendMessage({\n type: RichTextV2Control.ON_CHANGE,\n value: RichTextV2Definition.nodesToDataV2(this.editor.children, this.editor.currentKey),\n })\n }\n\n updatePluginValues() {\n const editor = this.editor\n if (editor == null) return\n\n this.sendMessage({\n type: RichTextV2Control.SET_PLUGIN_CONTROL_VALUE,\n value: this.getValue(editor),\n })\n }\n\n getValue(editor: Editor) {\n return this.descriptor.pluginControls.map(control => control.getValue?.(editor)) ?? []\n }\n\n select() {\n this.sendMessage({ type: RichTextV2Control.SELECT })\n }\n\n switchToBuildMode() {\n this.sendMessage({ type: RichTextV2Control.SWITCH_TO_BUILD_MODE })\n }\n\n undo() {\n this.sendMessage({ type: RichTextV2Control.UNDO })\n }\n\n redo() {\n this.sendMessage({ type: RichTextV2Control.REDO })\n }\n\n changeBoxModel(boxModel: BoxDisplayModel | null): void {\n this.sendMessage({\n type: RichTextV2Control.CHANGE_BOX_MODEL,\n payload: { boxModel },\n })\n }\n}\n"],"mappings":"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","names":[]}
@@ -66,8 +66,8 @@ class Definition extends BaseRichTextDefinition {
66
66
  get configSchema() {
67
67
  return Definition.fullSchema({ pluginDef: z.any() }).config;
68
68
  }
69
- createInstance(sendMessage) {
70
- return new RichTextV2Control(sendMessage, this);
69
+ createInstance(args) {
70
+ return new RichTextV2Control(this, args);
71
71
  }
72
72
  resolveValue(data, _resolver, _stylesheet, control) {
73
73
  const stableValue = StableValue({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/controls/rich-text-v2/rich-text-v2.ts"],"sourcesContent":["import { ReactNode } from 'react'\nimport { z } from 'zod'\n// @ts-expect-error: there are no types for 'corporate-ipsum'\nimport ipsum from 'corporate-ipsum'\n\nimport {\n RichTextDefinition as BaseRichTextDefinition,\n isNotNil,\n ControlDefinition,\n SerializationSchema,\n StableValue,\n type Data,\n type Resolvable,\n type SendMessage,\n type DeserializedRecord,\n type SchemaType,\n type SchemaTypeAny,\n type RichTextPluginControl,\n type ResourceResolver,\n type Stylesheet,\n type RichTextMode,\n} from '@makeswift/controls'\n\nimport { LinkPlugin } from '../../slate/LinkPlugin'\nimport { InlinePlugin } from '../../slate/InlinePlugin'\nimport { TextAlignPlugin } from '../../slate/TextAlignPlugin'\nimport { BlockPlugin } from '../../slate/BlockPlugin'\nimport { TypographyPlugin } from '../../slate/TypographyPlugin'\nimport { InlineModePlugin } from '../../slate/InlineModePlugin'\nimport { toText } from '../../slate/utils'\n\nimport { renderRichTextV2 } from '../../runtimes/react/controls/rich-text-v2'\n\nimport { RichTextV2Plugin, Plugin } from './plugin'\nimport { RichTextV2Control } from './control'\nimport { getTranslatableData } from './translations/get-translations'\n\ntype DataType = z.infer<typeof Definition.schema.data>\ntype DataV2Type = z.infer<typeof Definition.schema.dataV2>\ntype InstanceType = RichTextV2Control\ntype UserConfig = z.infer<typeof Definition.schema.userConfig>\ntype Config = UserConfig & {\n defaultValue: string\n plugins: RichTextV2Plugin[]\n}\n\nclass Definition extends BaseRichTextDefinition<ReactNode, Config, InstanceType> {\n constructor({ mode, defaultValue }: UserConfig, plugins?: RichTextV2Plugin[]) {\n super({\n mode,\n defaultValue:\n defaultValue ??\n (mode === Definition.Mode.Inline ? 'Edit this text' : Definition.generateParagraph()),\n plugins:\n plugins ??\n (mode === Definition.Mode.Inline\n ? [InlineModePlugin()]\n : [BlockPlugin(), TypographyPlugin(), TextAlignPlugin(), InlinePlugin(), LinkPlugin()]),\n })\n }\n\n static generateParagraph(): string {\n return ipsum(3)\n }\n\n static deserialize(\n data: DeserializedRecord,\n deserializeCallback: (r: DeserializedRecord) => ControlDefinition,\n ): RichTextV2Definition {\n if (data.type !== Definition.type) {\n throw new Error(`RichText: expected type ${Definition.type}, got ${data.type}`)\n }\n\n const { config } = Definition.fullSchema({\n pluginDef: SerializationSchema.deserializedRecord,\n }).definition.parse(data)\n\n const { plugins, ...userConfig } = config\n\n return new RichTextV2Definition(\n userConfig,\n plugins.map(({ control }) =>\n control ? { control: { definition: deserializeCallback(control?.definition) } } : {},\n ),\n )\n }\n\n static fullSchema<S extends SchemaTypeAny>({ pluginDef }: { pluginDef: S }) {\n const baseSchema = super.schema\n const plugin = z.object({\n control: z\n .object({\n definition: pluginDef,\n })\n .optional(),\n })\n\n const config = baseSchema.userConfig.extend({\n defaultValue: z.string(),\n plugins: z.array(plugin),\n })\n\n return {\n ...baseSchema,\n config,\n definition: z.object({\n type: baseSchema.type,\n config,\n }),\n }\n }\n\n get configSchema(): SchemaType<Config> {\n return Definition.fullSchema({ pluginDef: z.any() as SchemaType<ControlDefinition> }).config\n }\n\n createInstance(sendMessage: SendMessage): InstanceType {\n return new RichTextV2Control(sendMessage, this)\n }\n\n resolveValue(\n data: DataType | undefined,\n _resolver: ResourceResolver,\n _stylesheet: Stylesheet,\n control?: InstanceType,\n ): Resolvable<ReactNode | undefined> {\n const stableValue = StableValue({\n name: Definition.type,\n read: () => renderRichTextV2(data, this, control ?? null),\n })\n\n return {\n ...stableValue,\n triggerResolve: async () => {},\n }\n }\n\n getTranslatableData(data: DataType | undefined): Data {\n if (data == null) return null\n return getTranslatableData(Definition.dataToNodes(data), this.config.plugins)\n }\n\n get pluginControls(): RichTextPluginControl[] {\n return this.config.plugins.map(plugin => plugin.control).filter(isNotNil)\n }\n\n pluginControlAt(index: number): RichTextPluginControl | undefined {\n return this.pluginControls[index]\n }\n\n toText(data: DataType | undefined): string {\n if (data == null) return ''\n return toText(Definition.dataToNodes(data), this.config.mode ?? Definition.Mode.Block)\n }\n}\n\nexport class RichTextV2Definition extends Definition {}\n\nexport function RichText(config?: UserConfig): RichTextV2Definition {\n return new RichTextV2Definition(config ?? {})\n}\n\nRichText.Mode = Definition.Mode\nRichText.isV1Data = Definition.isV1Data\nRichText.dataToNodes = Definition.dataToNodes\nRichText.Plugin = Plugin\n\nexport { RichTextMode as RichTextV2Mode, type DataV2Type as RichTextDataV2, RichTextV2Control }\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/controls/rich-text-v2/rich-text-v2.ts"],"sourcesContent":["import { ReactNode } from 'react'\nimport { z } from 'zod'\n// @ts-expect-error: there are no types for 'corporate-ipsum'\nimport ipsum from 'corporate-ipsum'\n\nimport {\n RichTextDefinition as BaseRichTextDefinition,\n isNotNil,\n ControlDefinition,\n SerializationSchema,\n StableValue,\n type Data,\n type Resolvable,\n type ControlInstanceArgs,\n type DeserializedRecord,\n type SchemaType,\n type SchemaTypeAny,\n type RichTextPluginControl,\n type ResourceResolver,\n type Stylesheet,\n type RichTextMode,\n} from '@makeswift/controls'\n\nimport { LinkPlugin } from '../../slate/LinkPlugin'\nimport { InlinePlugin } from '../../slate/InlinePlugin'\nimport { TextAlignPlugin } from '../../slate/TextAlignPlugin'\nimport { BlockPlugin } from '../../slate/BlockPlugin'\nimport { TypographyPlugin } from '../../slate/TypographyPlugin'\nimport { InlineModePlugin } from '../../slate/InlineModePlugin'\nimport { toText } from '../../slate/utils'\n\nimport { renderRichTextV2 } from '../../runtimes/react/controls/rich-text-v2'\n\nimport { RichTextV2Plugin, Plugin } from './plugin'\nimport { RichTextV2Control } from './control'\nimport { getTranslatableData } from './translations/get-translations'\n\ntype DataType = z.infer<typeof Definition.schema.data>\ntype DataV2Type = z.infer<typeof Definition.schema.dataV2>\ntype InstanceType = RichTextV2Control\ntype UserConfig = z.infer<typeof Definition.schema.userConfig>\ntype Config = UserConfig & {\n defaultValue: string\n plugins: RichTextV2Plugin[]\n}\n\nclass Definition extends BaseRichTextDefinition<ReactNode, Config, InstanceType> {\n constructor({ mode, defaultValue }: UserConfig, plugins?: RichTextV2Plugin[]) {\n super({\n mode,\n defaultValue:\n defaultValue ??\n (mode === Definition.Mode.Inline ? 'Edit this text' : Definition.generateParagraph()),\n plugins:\n plugins ??\n (mode === Definition.Mode.Inline\n ? [InlineModePlugin()]\n : [BlockPlugin(), TypographyPlugin(), TextAlignPlugin(), InlinePlugin(), LinkPlugin()]),\n })\n }\n\n static generateParagraph(): string {\n return ipsum(3)\n }\n\n static deserialize(\n data: DeserializedRecord,\n deserializeCallback: (r: DeserializedRecord) => ControlDefinition,\n ): RichTextV2Definition {\n if (data.type !== Definition.type) {\n throw new Error(`RichText: expected type ${Definition.type}, got ${data.type}`)\n }\n\n const { config } = Definition.fullSchema({\n pluginDef: SerializationSchema.deserializedRecord,\n }).definition.parse(data)\n\n const { plugins, ...userConfig } = config\n\n return new RichTextV2Definition(\n userConfig,\n plugins.map(({ control }) =>\n control ? { control: { definition: deserializeCallback(control?.definition) } } : {},\n ),\n )\n }\n\n static fullSchema<S extends SchemaTypeAny>({ pluginDef }: { pluginDef: S }) {\n const baseSchema = super.schema\n const plugin = z.object({\n control: z\n .object({\n definition: pluginDef,\n })\n .optional(),\n })\n\n const config = baseSchema.userConfig.extend({\n defaultValue: z.string(),\n plugins: z.array(plugin),\n })\n\n return {\n ...baseSchema,\n config,\n definition: z.object({\n type: baseSchema.type,\n config,\n }),\n }\n }\n\n get configSchema(): SchemaType<Config> {\n return Definition.fullSchema({ pluginDef: z.any() as SchemaType<ControlDefinition> }).config\n }\n\n createInstance(args: ControlInstanceArgs) {\n return new RichTextV2Control(this, args)\n }\n\n resolveValue(\n data: DataType | undefined,\n _resolver: ResourceResolver,\n _stylesheet: Stylesheet,\n control?: InstanceType,\n ): Resolvable<ReactNode | undefined> {\n const stableValue = StableValue({\n name: Definition.type,\n read: () => renderRichTextV2(data, this, control ?? null),\n })\n\n return {\n ...stableValue,\n triggerResolve: async () => {},\n }\n }\n\n getTranslatableData(data: DataType | undefined): Data {\n if (data == null) return null\n return getTranslatableData(Definition.dataToNodes(data), this.config.plugins)\n }\n\n get pluginControls(): RichTextPluginControl[] {\n return this.config.plugins.map(plugin => plugin.control).filter(isNotNil)\n }\n\n pluginControlAt(index: number): RichTextPluginControl | undefined {\n return this.pluginControls[index]\n }\n\n toText(data: DataType | undefined): string {\n if (data == null) return ''\n return toText(Definition.dataToNodes(data), this.config.mode ?? Definition.Mode.Block)\n }\n}\n\nexport class RichTextV2Definition extends Definition {}\n\nexport function RichText(config?: UserConfig): RichTextV2Definition {\n return new RichTextV2Definition(config ?? {})\n}\n\nRichText.Mode = Definition.Mode\nRichText.isV1Data = Definition.isV1Data\nRichText.dataToNodes = Definition.dataToNodes\nRichText.Plugin = Plugin\n\nexport { RichTextMode as RichTextV2Mode, type DataV2Type as RichTextDataV2, RichTextV2Control }\n"],"mappings":"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","names":[]}
@@ -8,6 +8,7 @@ import {
8
8
  ColorDefinition,
9
9
  ComboboxDefinition,
10
10
  FontDefinition,
11
+ unstable_GalleryDefinition,
11
12
  GroupDefinition,
12
13
  IconRadioGroupDefinition,
13
14
  ImageDefinition,
@@ -45,6 +46,7 @@ function deserializeUnifiedControlDef(record) {
45
46
  [ColorDefinition.type]: ColorDefinition.deserialize,
46
47
  [ComboboxDefinition.type]: ComboboxDefinition.deserialize,
47
48
  [FontDefinition.type]: FontDefinition.deserialize,
49
+ [unstable_GalleryDefinition.type]: unstable_GalleryDefinition.deserialize,
48
50
  [GroupDefinition.type]: (record2) => GroupDefinition.deserialize(record2, deserializeUnifiedControlDef),
49
51
  [IconRadioGroupDefinition.type]: IconRadioGroupDefinition.deserialize,
50
52
  [ImageDefinition.type]: ImageDefinition.deserialize,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/controls/serialization/base/index.ts"],"sourcesContent":["import {\n ControlDefinition,\n type SerializedRecord,\n type DeserializedRecord,\n ShapeV2Definition,\n DeserializationPlugin,\n deserializeRecord,\n} from '@makeswift/controls'\n\nimport {\n CheckboxDefinition,\n CodeDefinition,\n ColorDefinition,\n ComboboxDefinition,\n FontDefinition,\n GroupDefinition,\n IconRadioGroupDefinition,\n ImageDefinition,\n LinkDefinition,\n ListDefinition,\n NumberDefinition,\n RichTextV1Definition,\n RichTextV2Definition,\n SelectDefinition,\n ShapeDefinition,\n SliderDefinition,\n SlotDefinition,\n StyleDefinition,\n StyleV2Definition,\n TextAreaDefinition,\n TextInputDefinition,\n unstable_TypographyDefinition,\n} from '../../index'\n\nimport { BaseControlSerializationVisitor } from './visitor'\n\nexport { type SerializedRecord, type DeserializedRecord } from '@makeswift/controls'\n\nexport function serializeControls(\n controls: Record<string, ControlDefinition>,\n visitor: BaseControlSerializationVisitor,\n): Record<string, SerializedRecord> {\n return Object.entries(controls).reduce<Record<string, SerializedRecord>>(\n (acc, [key, control]) => {\n return { ...acc, [key]: control.accept(visitor) }\n },\n {},\n )\n}\n\nexport type DeserializeControlOptions = {\n plugins: DeserializationPlugin<any>[]\n}\n\nexport function deserializeControl(\n serializedControl: SerializedRecord,\n options: DeserializeControlOptions,\n): ControlDefinition {\n const plugins = options?.plugins ?? []\n\n return deserializeUnifiedControlDef(deserializeRecord(serializedControl, plugins))\n}\n\nexport function deserializeUnifiedControlDef(record: DeserializedRecord): ControlDefinition {\n type DeserializeMethod = (data: DeserializedRecord) => ControlDefinition\n const deserializeMethod: Record<string, DeserializeMethod> = {\n [CheckboxDefinition.type]: CheckboxDefinition.deserialize,\n [CodeDefinition.type]: CodeDefinition.deserialize,\n [ColorDefinition.type]: ColorDefinition.deserialize,\n [ComboboxDefinition.type]: ComboboxDefinition.deserialize,\n [FontDefinition.type]: FontDefinition.deserialize,\n [GroupDefinition.type]: record =>\n GroupDefinition.deserialize(record, deserializeUnifiedControlDef),\n [IconRadioGroupDefinition.type]: IconRadioGroupDefinition.deserialize,\n [ImageDefinition.type]: ImageDefinition.deserialize,\n [LinkDefinition.type]: LinkDefinition.deserialize,\n [ListDefinition.type]: record =>\n ListDefinition.deserialize(record, deserializeUnifiedControlDef),\n [NumberDefinition.type]: NumberDefinition.deserialize,\n [RichTextV1Definition.type]: RichTextV1Definition.deserialize,\n [RichTextV2Definition.type]: record =>\n RichTextV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [SelectDefinition.type]: SelectDefinition.deserialize,\n [ShapeDefinition.type]: record =>\n ShapeDefinition.deserialize(record, deserializeUnifiedControlDef),\n [SliderDefinition.type]: SliderDefinition.deserialize,\n [ShapeV2Definition.type]: record =>\n ShapeV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [SlotDefinition.type]: SlotDefinition.deserialize,\n [StyleDefinition.type]: StyleDefinition.deserialize,\n [StyleV2Definition.type]: record =>\n StyleV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [TextAreaDefinition.type]: TextAreaDefinition.deserialize,\n [TextInputDefinition.type]: TextInputDefinition.deserialize,\n [unstable_TypographyDefinition.type]: unstable_TypographyDefinition.deserialize,\n } as const\n\n const deserialize = deserializeMethod[record.type] ?? null\n if (deserialize == null) {\n throw new Error(`Unknown control type: ${record.type}`)\n }\n\n return deserialize(record)\n}\n"],"mappings":"AAAA;AAAA,EAIE;AAAA,EAEA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMA,SAAS,kBACd,UACA,SACkC;AAClC,SAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC9B,CAAC,KAAK,CAAC,KAAK,OAAO,MAAM;AACvB,aAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,QAAQ,OAAO,OAAO,EAAE;AAAA,IAClD;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAMO,SAAS,mBACd,mBACA,SACmB;AACnB,QAAM,UAAU,SAAS,WAAW,CAAC;AAErC,SAAO,6BAA6B,kBAAkB,mBAAmB,OAAO,CAAC;AACnF;AAEO,SAAS,6BAA6B,QAA+C;AAE1F,QAAM,oBAAuD;AAAA,IAC3D,CAAC,mBAAmB,IAAI,GAAG,mBAAmB;AAAA,IAC9C,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,gBAAgB,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC,mBAAmB,IAAI,GAAG,mBAAmB;AAAA,IAC9C,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,gBAAgB,IAAI,GAAG,CAAAA,YACtB,gBAAgB,YAAYA,SAAQ,4BAA4B;AAAA,IAClE,CAAC,yBAAyB,IAAI,GAAG,yBAAyB;AAAA,IAC1D,CAAC,gBAAgB,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,eAAe,IAAI,GAAG,CAAAA,YACrB,eAAe,YAAYA,SAAQ,4BAA4B;AAAA,IACjE,CAAC,iBAAiB,IAAI,GAAG,iBAAiB;AAAA,IAC1C,CAAC,qBAAqB,IAAI,GAAG,qBAAqB;AAAA,IAClD,CAAC,qBAAqB,IAAI,GAAG,CAAAA,YAC3B,qBAAqB,YAAYA,SAAQ,4BAA4B;AAAA,IACvE,CAAC,iBAAiB,IAAI,GAAG,iBAAiB;AAAA,IAC1C,CAAC,gBAAgB,IAAI,GAAG,CAAAA,YACtB,gBAAgB,YAAYA,SAAQ,4BAA4B;AAAA,IAClE,CAAC,iBAAiB,IAAI,GAAG,iBAAiB;AAAA,IAC1C,CAAC,kBAAkB,IAAI,GAAG,CAAAA,YACxB,kBAAkB,YAAYA,SAAQ,4BAA4B;AAAA,IACpE,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,gBAAgB,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC,kBAAkB,IAAI,GAAG,CAAAA,YACxB,kBAAkB,YAAYA,SAAQ,4BAA4B;AAAA,IACpE,CAAC,mBAAmB,IAAI,GAAG,mBAAmB;AAAA,IAC9C,CAAC,oBAAoB,IAAI,GAAG,oBAAoB;AAAA,IAChD,CAAC,8BAA8B,IAAI,GAAG,8BAA8B;AAAA,EACtE;AAEA,QAAM,cAAc,kBAAkB,OAAO,IAAI,KAAK;AACtD,MAAI,eAAe,MAAM;AACvB,UAAM,IAAI,MAAM,yBAAyB,OAAO,IAAI,EAAE;AAAA,EACxD;AAEA,SAAO,YAAY,MAAM;AAC3B;","names":["record"]}
1
+ {"version":3,"sources":["../../../../../src/controls/serialization/base/index.ts"],"sourcesContent":["import {\n ControlDefinition,\n type SerializedRecord,\n type DeserializedRecord,\n ShapeV2Definition,\n DeserializationPlugin,\n deserializeRecord,\n} from '@makeswift/controls'\n\nimport {\n CheckboxDefinition,\n CodeDefinition,\n ColorDefinition,\n ComboboxDefinition,\n FontDefinition,\n unstable_GalleryDefinition,\n GroupDefinition,\n IconRadioGroupDefinition,\n ImageDefinition,\n LinkDefinition,\n ListDefinition,\n NumberDefinition,\n RichTextV1Definition,\n RichTextV2Definition,\n SelectDefinition,\n ShapeDefinition,\n SliderDefinition,\n SlotDefinition,\n StyleDefinition,\n StyleV2Definition,\n TextAreaDefinition,\n TextInputDefinition,\n unstable_TypographyDefinition,\n} from '../../index'\n\nimport { BaseControlSerializationVisitor } from './visitor'\n\nexport { type SerializedRecord, type DeserializedRecord } from '@makeswift/controls'\n\nexport function serializeControls(\n controls: Record<string, ControlDefinition>,\n visitor: BaseControlSerializationVisitor,\n): Record<string, SerializedRecord> {\n return Object.entries(controls).reduce<Record<string, SerializedRecord>>(\n (acc, [key, control]) => {\n return { ...acc, [key]: control.accept(visitor) }\n },\n {},\n )\n}\n\nexport type DeserializeControlOptions = {\n plugins: DeserializationPlugin<any>[]\n}\n\nexport function deserializeControl(\n serializedControl: SerializedRecord,\n options: DeserializeControlOptions,\n): ControlDefinition {\n const plugins = options?.plugins ?? []\n\n return deserializeUnifiedControlDef(deserializeRecord(serializedControl, plugins))\n}\n\nexport function deserializeUnifiedControlDef(record: DeserializedRecord): ControlDefinition {\n type DeserializeMethod = (data: DeserializedRecord) => ControlDefinition\n const deserializeMethod: Record<string, DeserializeMethod> = {\n [CheckboxDefinition.type]: CheckboxDefinition.deserialize,\n [CodeDefinition.type]: CodeDefinition.deserialize,\n [ColorDefinition.type]: ColorDefinition.deserialize,\n [ComboboxDefinition.type]: ComboboxDefinition.deserialize,\n [FontDefinition.type]: FontDefinition.deserialize,\n [unstable_GalleryDefinition.type]: unstable_GalleryDefinition.deserialize,\n [GroupDefinition.type]: record =>\n GroupDefinition.deserialize(record, deserializeUnifiedControlDef),\n [IconRadioGroupDefinition.type]: IconRadioGroupDefinition.deserialize,\n [ImageDefinition.type]: ImageDefinition.deserialize,\n [LinkDefinition.type]: LinkDefinition.deserialize,\n [ListDefinition.type]: record =>\n ListDefinition.deserialize(record, deserializeUnifiedControlDef),\n [NumberDefinition.type]: NumberDefinition.deserialize,\n [RichTextV1Definition.type]: RichTextV1Definition.deserialize,\n [RichTextV2Definition.type]: record =>\n RichTextV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [SelectDefinition.type]: SelectDefinition.deserialize,\n [ShapeDefinition.type]: record =>\n ShapeDefinition.deserialize(record, deserializeUnifiedControlDef),\n [SliderDefinition.type]: SliderDefinition.deserialize,\n [ShapeV2Definition.type]: record =>\n ShapeV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [SlotDefinition.type]: SlotDefinition.deserialize,\n [StyleDefinition.type]: StyleDefinition.deserialize,\n [StyleV2Definition.type]: record =>\n StyleV2Definition.deserialize(record, deserializeUnifiedControlDef),\n [TextAreaDefinition.type]: TextAreaDefinition.deserialize,\n [TextInputDefinition.type]: TextInputDefinition.deserialize,\n [unstable_TypographyDefinition.type]: unstable_TypographyDefinition.deserialize,\n } as const\n\n const deserialize = deserializeMethod[record.type] ?? null\n if (deserialize == null) {\n throw new Error(`Unknown control type: ${record.type}`)\n }\n\n return deserialize(record)\n}\n"],"mappings":"AAAA;AAAA,EAIE;AAAA,EAEA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMA,SAAS,kBACd,UACA,SACkC;AAClC,SAAO,OAAO,QAAQ,QAAQ,EAAE;AAAA,IAC9B,CAAC,KAAK,CAAC,KAAK,OAAO,MAAM;AACvB,aAAO,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,QAAQ,OAAO,OAAO,EAAE;AAAA,IAClD;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAMO,SAAS,mBACd,mBACA,SACmB;AACnB,QAAM,UAAU,SAAS,WAAW,CAAC;AAErC,SAAO,6BAA6B,kBAAkB,mBAAmB,OAAO,CAAC;AACnF;AAEO,SAAS,6BAA6B,QAA+C;AAE1F,QAAM,oBAAuD;AAAA,IAC3D,CAAC,mBAAmB,IAAI,GAAG,mBAAmB;AAAA,IAC9C,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,gBAAgB,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC,mBAAmB,IAAI,GAAG,mBAAmB;AAAA,IAC9C,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,2BAA2B,IAAI,GAAG,2BAA2B;AAAA,IAC9D,CAAC,gBAAgB,IAAI,GAAG,CAAAA,YACtB,gBAAgB,YAAYA,SAAQ,4BAA4B;AAAA,IAClE,CAAC,yBAAyB,IAAI,GAAG,yBAAyB;AAAA,IAC1D,CAAC,gBAAgB,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,eAAe,IAAI,GAAG,CAAAA,YACrB,eAAe,YAAYA,SAAQ,4BAA4B;AAAA,IACjE,CAAC,iBAAiB,IAAI,GAAG,iBAAiB;AAAA,IAC1C,CAAC,qBAAqB,IAAI,GAAG,qBAAqB;AAAA,IAClD,CAAC,qBAAqB,IAAI,GAAG,CAAAA,YAC3B,qBAAqB,YAAYA,SAAQ,4BAA4B;AAAA,IACvE,CAAC,iBAAiB,IAAI,GAAG,iBAAiB;AAAA,IAC1C,CAAC,gBAAgB,IAAI,GAAG,CAAAA,YACtB,gBAAgB,YAAYA,SAAQ,4BAA4B;AAAA,IAClE,CAAC,iBAAiB,IAAI,GAAG,iBAAiB;AAAA,IAC1C,CAAC,kBAAkB,IAAI,GAAG,CAAAA,YACxB,kBAAkB,YAAYA,SAAQ,4BAA4B;AAAA,IACpE,CAAC,eAAe,IAAI,GAAG,eAAe;AAAA,IACtC,CAAC,gBAAgB,IAAI,GAAG,gBAAgB;AAAA,IACxC,CAAC,kBAAkB,IAAI,GAAG,CAAAA,YACxB,kBAAkB,YAAYA,SAAQ,4BAA4B;AAAA,IACpE,CAAC,mBAAmB,IAAI,GAAG,mBAAmB;AAAA,IAC9C,CAAC,oBAAoB,IAAI,GAAG,oBAAoB;AAAA,IAChD,CAAC,8BAA8B,IAAI,GAAG,8BAA8B;AAAA,EACtE;AAEA,QAAM,cAAc,kBAAkB,OAAO,IAAI,KAAK;AACtD,MAAI,eAAe,MAAM;AACvB,UAAM,IAAI,MAAM,yBAAyB,OAAO,IAAI,EAAE;AAAA,EACxD;AAEA,SAAO,YAAY,MAAM;AAC3B;","names":["record"]}
@@ -1,11 +1,7 @@
1
- import {
2
- DefaultHead
3
- } from "../../../../runtimes/react/components/framework-context";
4
1
  import { HeadSnippet } from "./HeadSnippet";
5
2
  const context = {
6
3
  // The App Router uses built-in React Canary releases, which include all stable
7
4
  // React 19 features, so we can simply use our default head implementation
8
- Head: DefaultHead,
9
5
  HeadSnippet
10
6
  };
11
7
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/next/components/framework-provider/app-router/index.ts"],"sourcesContent":["import {\n type FrameworkContext,\n DefaultHead,\n} from '../../../../runtimes/react/components/framework-context'\n\nimport { HeadSnippet } from './HeadSnippet'\n\nexport const context: Pick<FrameworkContext, 'Head' | 'HeadSnippet'> = {\n // The App Router uses built-in React Canary releases, which include all stable\n // React 19 features, so we can simply use our default head implementation\n Head: DefaultHead,\n HeadSnippet,\n}\n"],"mappings":"AAAA;AAAA,EAEE;AAAA,OACK;AAEP,SAAS,mBAAmB;AAErB,MAAM,UAA0D;AAAA;AAAA;AAAA,EAGrE,MAAM;AAAA,EACN;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/next/components/framework-provider/app-router/index.ts"],"sourcesContent":["import { type FrameworkContext } from '../../../../runtimes/react/components/framework-context'\n\nimport { HeadSnippet } from './HeadSnippet'\n\nexport const context: Pick<FrameworkContext, 'HeadSnippet'> = {\n // The App Router uses built-in React Canary releases, which include all stable\n // React 19 features, so we can simply use our default head implementation\n HeadSnippet,\n}\n"],"mappings":"AAEA,SAAS,mBAAmB;AAErB,MAAM,UAAiD;AAAA;AAAA;AAAA,EAG5D;AACF;","names":[]}
@@ -3,7 +3,9 @@ import { jsx } from "react/jsx-runtime";
3
3
  import { useMemo } from "react";
4
4
  import NextImage from "next/image";
5
5
  import { useIsPagesRouter } from "../../hooks/use-is-pages-router";
6
- import { FrameworkContext } from "../../../runtimes/react/components/framework-context";
6
+ import {
7
+ FrameworkContextProvider
8
+ } from "../../../runtimes/react/components/framework-context";
7
9
  import { context as appRouterContext } from "./app-router";
8
10
  import { context as pagesRouterContext } from "./pages-router";
9
11
  import { Link } from "./link";
@@ -20,7 +22,7 @@ function FrameworkProvider({
20
22
  }),
21
23
  [isPagesRouter]
22
24
  );
23
- return /* @__PURE__ */ jsx(FrameworkContext.Provider, { value: context, children });
25
+ return /* @__PURE__ */ jsx(FrameworkContextProvider, { value: context, children });
24
26
  }
25
27
  export {
26
28
  FrameworkProvider
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/next/components/framework-provider/index.tsx"],"sourcesContent":["'use client'\n\nimport { type PropsWithChildren, useMemo } from 'react'\nimport NextImage from 'next/image'\n\nimport { useIsPagesRouter } from '../../hooks/use-is-pages-router'\nimport { FrameworkContext } from '../../../runtimes/react/components/framework-context'\n\nimport { context as appRouterContext } from './app-router'\nimport { context as pagesRouterContext } from './pages-router'\nimport { Link } from './link'\n\nexport function FrameworkProvider({\n children,\n forcePagesRouter,\n}: PropsWithChildren<{ forcePagesRouter?: boolean }>) {\n const isPagesRouter = useIsPagesRouter() || forcePagesRouter\n const context = useMemo<FrameworkContext>(\n () => ({\n ...(isPagesRouter ? pagesRouterContext : appRouterContext),\n Image: NextImage,\n Link,\n }),\n [isPagesRouter],\n )\n\n return <FrameworkContext.Provider value={context}>{children}</FrameworkContext.Provider>\n}\n"],"mappings":";AA0BS;AAxBT,SAAiC,eAAe;AAChD,OAAO,eAAe;AAEtB,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AAEjC,SAAS,WAAW,wBAAwB;AAC5C,SAAS,WAAW,0BAA0B;AAC9C,SAAS,YAAY;AAEd,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAAsD;AACpD,QAAM,gBAAgB,iBAAiB,KAAK;AAC5C,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,MACL,GAAI,gBAAgB,qBAAqB;AAAA,MACzC,OAAO;AAAA,MACP;AAAA,IACF;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEA,SAAO,oBAAC,iBAAiB,UAAjB,EAA0B,OAAO,SAAU,UAAS;AAC9D;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/next/components/framework-provider/index.tsx"],"sourcesContent":["'use client'\n\nimport { type PropsWithChildren, useMemo } from 'react'\nimport NextImage from 'next/image'\n\nimport { useIsPagesRouter } from '../../hooks/use-is-pages-router'\nimport {\n type FrameworkContext,\n FrameworkContextProvider,\n} from '../../../runtimes/react/components/framework-context'\n\nimport { context as appRouterContext } from './app-router'\nimport { context as pagesRouterContext } from './pages-router'\nimport { Link } from './link'\n\nexport function FrameworkProvider({\n children,\n forcePagesRouter,\n}: PropsWithChildren<{ forcePagesRouter?: boolean }>) {\n const isPagesRouter = useIsPagesRouter() || forcePagesRouter\n const context = useMemo<Partial<FrameworkContext>>(\n () => ({\n ...(isPagesRouter ? pagesRouterContext : appRouterContext),\n Image: NextImage,\n Link,\n }),\n [isPagesRouter],\n )\n\n return <FrameworkContextProvider value={context}>{children}</FrameworkContextProvider>\n}\n"],"mappings":";AA6BS;AA3BT,SAAiC,eAAe;AAChD,OAAO,eAAe;AAEtB,SAAS,wBAAwB;AACjC;AAAA,EAEE;AAAA,OACK;AAEP,SAAS,WAAW,wBAAwB;AAC5C,SAAS,WAAW,0BAA0B;AAC9C,SAAS,YAAY;AAEd,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAAsD;AACpD,QAAM,gBAAgB,iBAAiB,KAAK;AAC5C,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,MACL,GAAI,gBAAgB,qBAAqB;AAAA,MACzC,OAAO;AAAA,MACP;AAAA,IACF;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEA,SAAO,oBAAC,4BAAyB,OAAO,SAAU,UAAS;AAC7D;","names":[]}