@wix/site-service-interactions 1.0.29 → 1.0.31

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 (39) hide show
  1. package/cjs/build/definition/index.d.ts +4 -1
  2. package/cjs/build/definition/index.js.map +1 -1
  3. package/cjs/build/implementations/configEntries.d.ts +6 -4
  4. package/cjs/build/implementations/configEntries.js +17 -8
  5. package/cjs/build/implementations/configEntries.js.map +1 -1
  6. package/cjs/build/implementations/coreInteractions.js +3 -1
  7. package/cjs/build/implementations/coreInteractions.js.map +1 -1
  8. package/cjs/build/implementations/v2/ClickTriggerStyleSheet.d.ts +16 -0
  9. package/cjs/build/implementations/v2/ClickTriggerStyleSheet.js +40 -0
  10. package/cjs/build/implementations/v2/ClickTriggerStyleSheet.js.map +1 -0
  11. package/cjs/build/implementations/v2/InteractionsScriptElement.d.ts +1 -1
  12. package/cjs/build/implementations/v2/InteractionsScriptElement.js +4 -2
  13. package/cjs/build/implementations/v2/InteractionsScriptElement.js.map +1 -1
  14. package/cjs/build/implementations/v2/configStyleHeadContent.d.ts +2 -0
  15. package/cjs/build/implementations/v2/configStyleHeadContent.js +4 -2
  16. package/cjs/build/implementations/v2/configStyleHeadContent.js.map +1 -1
  17. package/dist/definition/index.d.ts +4 -1
  18. package/dist/definition/index.js.map +1 -1
  19. package/dist/implementations/configEntries.d.ts +6 -4
  20. package/dist/implementations/configEntries.js +17 -8
  21. package/dist/implementations/configEntries.js.map +1 -1
  22. package/dist/implementations/coreInteractions.js +3 -1
  23. package/dist/implementations/coreInteractions.js.map +1 -1
  24. package/dist/implementations/v2/ClickTriggerStyleSheet.d.ts +16 -0
  25. package/dist/implementations/v2/ClickTriggerStyleSheet.js +35 -0
  26. package/dist/implementations/v2/ClickTriggerStyleSheet.js.map +1 -0
  27. package/dist/implementations/v2/InteractionsScriptElement.d.ts +1 -1
  28. package/dist/implementations/v2/InteractionsScriptElement.js +4 -2
  29. package/dist/implementations/v2/InteractionsScriptElement.js.map +1 -1
  30. package/dist/implementations/v2/configStyleHeadContent.d.ts +2 -0
  31. package/dist/implementations/v2/configStyleHeadContent.js +3 -1
  32. package/dist/implementations/v2/configStyleHeadContent.js.map +1 -1
  33. package/package.json +2 -2
  34. package/src/definition/index.ts +4 -1
  35. package/src/implementations/configEntries.ts +22 -8
  36. package/src/implementations/coreInteractions.ts +3 -1
  37. package/src/implementations/v2/ClickTriggerStyleSheet.tsx +48 -0
  38. package/src/implementations/v2/InteractionsScriptElement.tsx +8 -1
  39. package/src/implementations/v2/configStyleHeadContent.ts +5 -1
@@ -18,7 +18,10 @@ export type InteractStyleRule = {
18
18
  };
19
19
  /** Set of interactions in the host's config, with the CSS rules that go with it. */
20
20
  export type InteractConfigEntry = {
21
- /** Key of the component that scopes the entry's CSS rules. Required when `styles` isn't empty. */
21
+ /**
22
+ * Key of the component that scopes the entry's CSS rules. Required when `styles` isn't empty. Outside the
23
+ * reactions entry it also claims that component and everything inside it: reactions there are dropped.
24
+ */
22
25
  namespace?: string;
23
26
  /** The entry's interactions and effects, in the `@wix/interact` config format. */
24
27
  interact: InteractConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/definition/index.ts"],"names":[],"mappings":";;;AAAA,wDAAyD;AAuG5C,QAAA,sBAAsB,GAAG,IAAA,oCAAmB,EACxD,gCAAgC,CAChC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/definition/index.ts"],"names":[],"mappings":";;;AAAA,wDAAyD;AA0G5C,QAAA,sBAAsB,GAAG,IAAA,oCAAmB,EACxD,gCAAgC,CAChC,CAAA"}
@@ -5,9 +5,11 @@ export declare const getResolvedConfigEntries: (config: IInteractionsServiceConf
5
5
  export declare const getInteractiveKeys: ({ interact }: InteractConfigEntry) => Set<string>;
6
6
  /**
7
7
  * Interact resolves a custom-element key to the first instance containing that key, so a key shared
8
- * by two entries would silently drop one of them. Experience entries own the keys they declare:
9
- * whatever they claim is stripped from the reactions entry by dropping whole interactions whose
10
- * resolved keys overlap. Top-level effect and sequence libraries are left intact. A collision between two
11
- * experience entries stays an error, since neither of them is authoritative.
8
+ * by two entries would silently drop one of them. Experience entries own the keys they declare, and an
9
+ * experience's namespace (its section's comp path) is a scope no reaction may touch: the section and
10
+ * every component inside it belong to the experience, whatever keys the experience itself declares.
11
+ * Both are stripped from the reactions entry by dropping whole interactions whose resolved keys overlap.
12
+ * Top-level effect and sequence libraries are left intact. A collision between two experience entries
13
+ * stays an error, since neither of them is authoritative.
12
14
  */
13
15
  export declare const resolveInteractKeyConflicts: (entries: InteractConfigEntry[]) => InteractConfigEntry[];
@@ -35,29 +35,38 @@ const getInteractiveKeys = ({ interact }) => {
35
35
  return keys;
36
36
  };
37
37
  exports.getInteractiveKeys = getInteractiveKeys;
38
- const dropOverriddenKeys = (entry, overriddenKeys) => {
38
+ /** Keys are comp paths, so a component inside a section has the section's path as a prefix. */
39
+ const isInScope = (key, scope) => key === scope || key.startsWith(`${scope}/`);
40
+ const dropOverriddenKeys = (entry, overriddenKeys, scopes) => {
39
41
  const { interact } = entry;
42
+ const isOverridden = (key) => overriddenKeys.has(key) || scopes.some((scope) => isInScope(key, scope));
40
43
  return {
41
44
  ...entry,
42
45
  interact: {
43
46
  ...interact,
44
- interactions: interact.interactions.filter((interaction) => ![...getInteractionKeys(interact, interaction)].some((key) => overriddenKeys.has(key))),
47
+ interactions: interact.interactions.filter((interaction) => ![...getInteractionKeys(interact, interaction)].some(isOverridden)),
45
48
  },
46
49
  };
47
50
  };
48
51
  /**
49
52
  * Interact resolves a custom-element key to the first instance containing that key, so a key shared
50
- * by two entries would silently drop one of them. Experience entries own the keys they declare:
51
- * whatever they claim is stripped from the reactions entry by dropping whole interactions whose
52
- * resolved keys overlap. Top-level effect and sequence libraries are left intact. A collision between two
53
- * experience entries stays an error, since neither of them is authoritative.
53
+ * by two entries would silently drop one of them. Experience entries own the keys they declare, and an
54
+ * experience's namespace (its section's comp path) is a scope no reaction may touch: the section and
55
+ * every component inside it belong to the experience, whatever keys the experience itself declares.
56
+ * Both are stripped from the reactions entry by dropping whole interactions whose resolved keys overlap.
57
+ * Top-level effect and sequence libraries are left intact. A collision between two experience entries
58
+ * stays an error, since neither of them is authoritative.
54
59
  */
55
60
  const resolveInteractKeyConflicts = (entries) => {
56
61
  const owners = new Map();
62
+ const scopes = [];
57
63
  entries.forEach((entry, index) => {
58
64
  if (entry.namespace === exports.REACTIONS_NAMESPACE) {
59
65
  return;
60
66
  }
67
+ if (entry.namespace) {
68
+ scopes.push(entry.namespace);
69
+ }
61
70
  const owner = entry.namespace ?? `entry-${index}`;
62
71
  for (const key of (0, exports.getInteractiveKeys)(entry)) {
63
72
  const existingOwner = owners.get(key);
@@ -68,11 +77,11 @@ const resolveInteractKeyConflicts = (entries) => {
68
77
  owners.set(key, owner);
69
78
  }
70
79
  });
71
- if (!owners.size) {
80
+ if (!owners.size && !scopes.length) {
72
81
  return entries;
73
82
  }
74
83
  const overriddenKeys = new Set(owners.keys());
75
- return entries.map((entry) => entry.namespace === exports.REACTIONS_NAMESPACE ? dropOverriddenKeys(entry, overriddenKeys) : entry);
84
+ return entries.map((entry) => entry.namespace === exports.REACTIONS_NAMESPACE ? dropOverriddenKeys(entry, overriddenKeys, scopes) : entry);
76
85
  };
77
86
  exports.resolveInteractKeyConflicts = resolveInteractKeyConflicts;
78
87
  //# sourceMappingURL=configEntries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configEntries.js","sourceRoot":"","sources":["../../../src/implementations/configEntries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configEntries.js","sourceRoot":"","sources":["../../../src/implementations/configEntries.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ const InteractionsScriptElement_1 = require("./InteractionsScriptElement");
16
16
  const InteractionsScriptElement_2 = require("./v2/InteractionsScriptElement");
17
17
  const configCss_1 = require("./v2/configCss");
18
18
  const configStyleHeadContent_1 = require("./v2/configStyleHeadContent");
19
+ const clickTriggerCss_1 = require("./v2/clickTriggerCss");
19
20
  const interactionsScriptContent_1 = require("./v2/interactionsScriptContent");
20
21
  const authoredStyles_1 = require("./v2/authoredStyles");
21
22
  const configEntries_1 = require("./configEntries");
@@ -69,7 +70,8 @@ const initRuntime = (entries, isReducedMotion, getService, useV2) => {
69
70
  addTopComponent((0, InteractionsScriptElement_1.createInteractionsScriptElement)(runtimeConfigs[0], isReducedMotion, pageId));
70
71
  return;
71
72
  }
72
- addTopComponent((0, InteractionsScriptElement_2.createV2InteractionsScriptElement)(runtimeConfigs, isReducedMotion, pageId));
73
+ const clickTriggerCss = entries.map(({ interact }) => (0, clickTriggerCss_1.getClickTriggerCss)(interact).trim()).filter(Boolean);
74
+ addTopComponent((0, InteractionsScriptElement_2.createV2InteractionsScriptElement)(runtimeConfigs, isReducedMotion, pageId, clickTriggerCss));
73
75
  };
74
76
  const getInteractiveComps = (entries) => {
75
77
  const keys = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"coreInteractions.js","sourceRoot":"","sources":["../../../src/implementations/coreInteractions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coreInteractions.js","sourceRoot":"","sources":["../../../src/implementations/coreInteractions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { FunctionComponent } from 'react';
2
+ type StyleSheetDocument = Pick<Document, 'adoptedStyleSheets' | 'querySelectorAll'>;
3
+ /**
4
+ * Adopts the rules the server did not already send as a constructable stylesheet, and returns a
5
+ * function that removes that sheet again.
6
+ */
7
+ export declare const adoptMissingStyleSheet: (rules: Array<string>, document?: StyleSheetDocument | undefined) => () => void;
8
+ /**
9
+ * The server sends the click-trigger cursor rules in the head only for what it rendered, so content
10
+ * rendered on the client (client-side navigation, password-protected / members-only pages) never gets
11
+ * them. Adopt the missing ones while the page is mounted and remove them when navigating away.
12
+ */
13
+ export declare const ClickTriggerStyleSheet: FunctionComponent<{
14
+ rules: Array<string>;
15
+ }>;
16
+ export {};
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClickTriggerStyleSheet = exports.adoptMissingStyleSheet = void 0;
4
+ const react_1 = require("react");
5
+ const configStyleHeadContent_1 = require("./configStyleHeadContent");
6
+ const getServerRenderedCss = (document) => Array.from(document.querySelectorAll(`style[${configStyleHeadContent_1.SSR_STYLE_ATTRIBUTE}]`))
7
+ .map((style) => style.textContent ?? '')
8
+ .join('\n');
9
+ /**
10
+ * Adopts the rules the server did not already send as a constructable stylesheet, and returns a
11
+ * function that removes that sheet again.
12
+ */
13
+ const adoptMissingStyleSheet = (rules, document = globalThis.document) => {
14
+ if (!document?.adoptedStyleSheets) {
15
+ return () => { };
16
+ }
17
+ const serverRenderedCss = getServerRenderedCss(document);
18
+ const css = rules.filter((rule) => !serverRenderedCss.includes(rule)).join('\n');
19
+ if (!css) {
20
+ return () => { };
21
+ }
22
+ const sheet = new CSSStyleSheet();
23
+ sheet.replaceSync(css);
24
+ document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
25
+ return () => {
26
+ document.adoptedStyleSheets = document.adoptedStyleSheets.filter((adopted) => adopted !== sheet);
27
+ };
28
+ };
29
+ exports.adoptMissingStyleSheet = adoptMissingStyleSheet;
30
+ /**
31
+ * The server sends the click-trigger cursor rules in the head only for what it rendered, so content
32
+ * rendered on the client (client-side navigation, password-protected / members-only pages) never gets
33
+ * them. Adopt the missing ones while the page is mounted and remove them when navigating away.
34
+ */
35
+ const ClickTriggerStyleSheet = ({ rules }) => {
36
+ (0, react_1.useEffect)(() => (0, exports.adoptMissingStyleSheet)(rules), [rules]);
37
+ return null;
38
+ };
39
+ exports.ClickTriggerStyleSheet = ClickTriggerStyleSheet;
40
+ //# sourceMappingURL=ClickTriggerStyleSheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClickTriggerStyleSheet.js","sourceRoot":"","sources":["../../../../src/implementations/v2/ClickTriggerStyleSheet.tsx"],"names":[],"mappings":";;;AAAA,iCAAiC;AAEjC,qEAA8D;AAI9D,MAAM,oBAAoB,GAAG,CAAC,QAA4B,EAAU,EAAE,CACrE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,4CAAmB,GAAG,CAAC,CAAC;KACpE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;KACvC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEb;;;GAGG;AACI,MAAM,sBAAsB,GAAG,CACrC,KAAoB,EACpB,QAAQ,GAAmC,UAAU,CAAC,QAAQ,EAC7D,EAAE;IACH,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;QACnC,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IAChB,CAAC;IAED,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;IACxD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChF,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAA;IACjC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACtB,QAAQ,CAAC,kBAAkB,GAAG,CAAC,GAAG,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;IAErE,OAAO,GAAG,EAAE;QACX,QAAQ,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC,CAAA;IACjG,CAAC,CAAA;AACF,CAAC,CAAA;AArBY,QAAA,sBAAsB,GAAtB,sBAAsB,CAqBlC;AAED;;;;GAIG;AACI,MAAM,sBAAsB,GAAgD,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAChG,IAAA,iBAAS,EAAC,GAAG,EAAE,CAAC,IAAA,QAAA,sBAAsB,EAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEvD,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA;AAJY,QAAA,sBAAsB,GAAtB,sBAAsB,CAIlC"}
@@ -1,3 +1,3 @@
1
1
  import type { FunctionComponent } from 'react';
2
2
  import type { InteractConfig } from '@wix/interact';
3
- export declare const createV2InteractionsScriptElement: (config: InteractConfig | InteractConfig[], isReducedMotion: boolean, pageId: string) => FunctionComponent;
3
+ export declare const createV2InteractionsScriptElement: (config: InteractConfig | InteractConfig[], isReducedMotion: boolean, pageId: string, clickTriggerCss?: Array<string>) => FunctionComponent;
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createV2InteractionsScriptElement = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const reviveScriptElement_1 = require("../reviveScriptElement");
9
+ const ClickTriggerStyleSheet_1 = require("./ClickTriggerStyleSheet");
9
10
  const interactionsScriptContent_1 = require("./interactionsScriptContent");
10
11
  const DANGEROUSLY_SET_INNER_HTML = ['dangerously', 'Set', 'Inner', 'HTML'];
11
12
  /**
@@ -13,7 +14,7 @@ const DANGEROUSLY_SET_INNER_HTML = ['dangerously', 'Set', 'Inner', 'HTML'];
13
14
  * element early. `\u003c` is valid JSON that `JSON.parse` reads back as `<`.
14
15
  */
15
16
  const serializeConfigForScriptElement = (config) => JSON.stringify(config).replace(/</g, '\\u003c');
16
- const createV2InteractionsScriptElement = (config, isReducedMotion, pageId) => () => {
17
+ const createV2InteractionsScriptElement = (config, isReducedMotion, pageId, clickTriggerCss = []) => () => {
17
18
  // This ID is also interpolated into raw module-script text. Percent-encoding removes
18
19
  // script delimiters and template-literal syntax while keeping the ID deterministic.
19
20
  const safePageId = encodeURIComponent(pageId);
@@ -27,7 +28,8 @@ const createV2InteractionsScriptElement = (config, isReducedMotion, pageId) => (
27
28
  };
28
29
  return (react_1.default.createElement(react_1.default.Fragment, null,
29
30
  react_1.default.createElement("script", { type: "application/json", id: configId, ...configProps }),
30
- react_1.default.createElement("script", { type: "module", id: `interactions-loader-${safePageId}`, ref: reviveScriptElement_1.reviveScriptElement, ...loaderProps })));
31
+ react_1.default.createElement("script", { type: "module", id: `interactions-loader-${safePageId}`, ref: reviveScriptElement_1.reviveScriptElement, ...loaderProps }),
32
+ clickTriggerCss.length > 0 && react_1.default.createElement(ClickTriggerStyleSheet_1.ClickTriggerStyleSheet, { rules: clickTriggerCss })));
31
33
  };
32
34
  exports.createV2InteractionsScriptElement = createV2InteractionsScriptElement;
33
35
  //# sourceMappingURL=InteractionsScriptElement.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InteractionsScriptElement.js","sourceRoot":"","sources":["../../../../src/implementations/v2/InteractionsScriptElement.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAAyB;AAGzB,gEAA4D;AAC5D,2EAA4E;AAE5E,MAAM,0BAA0B,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAE1E;;;GAGG;AACH,MAAM,+BAA+B,GAAG,CAAC,MAAyC,EAAU,EAAE,CAC7F,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;AAEzC,MAAM,iCAAiC,GAC7C,CAAC,MAAyC,EAAE,eAAwB,EAAE,MAAc,EAAqB,EAAE,CAC3G,GAAG,EAAE;IACJ,qFAAqF;IACrF,oFAAoF;IACpF,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,uBAAuB,UAAU,EAAE,CAAA;IACpD,MAAM,yBAAyB,GAAG,IAAA,0DAA8B,EAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;IAC3F,MAAM,WAAW,GAAG;QACnB,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,+BAA+B,CAAC,MAAM,CAAC,EAAE;KAC1F,CAAA;IACD,MAAM,WAAW,GAAG;QACnB,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE;KAC5E,CAAA;IAED,OAAO,CACN;QACC,0CAAQ,IAAI,EAAC,kBAAkB,EAAC,EAAE,EAAE,QAAQ,KAAM,WAAW,GAAI;QACjE,0CAAQ,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAE,uBAAuB,UAAU,EAAE,EAAE,GAAG,EAAE,yCAAmB,KAAM,WAAW,GAAI,CAC1G,CACH,CAAA;AACF,CAAC,CAAA;AArBW,QAAA,iCAAiC,GAAjC,iCAAiC,CAqB5C"}
1
+ {"version":3,"file":"InteractionsScriptElement.js","sourceRoot":"","sources":["../../../../src/implementations/v2/InteractionsScriptElement.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAAyB;AAGzB,gEAA4D;AAC5D,qEAAiE;AACjE,2EAA4E;AAE5E,MAAM,0BAA0B,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAE1E;;;GAGG;AACH,MAAM,+BAA+B,GAAG,CAAC,MAAyC,EAAU,EAAE,CAC7F,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;AAEzC,MAAM,iCAAiC,GAC7C,CACC,MAAyC,EACzC,eAAwB,EACxB,MAAc,EACd,eAAe,GAAkB,EAAE,EACf,EAAE,CACvB,GAAG,EAAE;IACJ,qFAAqF;IACrF,oFAAoF;IACpF,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,uBAAuB,UAAU,EAAE,CAAA;IACpD,MAAM,yBAAyB,GAAG,IAAA,0DAA8B,EAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;IAC3F,MAAM,WAAW,GAAG;QACnB,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,+BAA+B,CAAC,MAAM,CAAC,EAAE;KAC1F,CAAA;IACD,MAAM,WAAW,GAAG;QACnB,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE;KAC5E,CAAA;IAED,OAAO,CACN;QACC,0CAAQ,IAAI,EAAC,kBAAkB,EAAC,EAAE,EAAE,QAAQ,KAAM,WAAW,GAAI;QACjE,0CAAQ,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAE,uBAAuB,UAAU,EAAE,EAAE,GAAG,EAAE,yCAAmB,KAAM,WAAW,GAAI;QAC3G,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,8BAAC,+CAAsB,IAAC,KAAK,EAAE,eAAe,GAAI,CAC/E,CACH,CAAA;AACF,CAAC,CAAA;AA3BW,QAAA,iCAAiC,GAAjC,iCAAiC,CA2B5C"}
@@ -1 +1,3 @@
1
+ /** Marks the server-rendered v2 style element so the client can tell which rules it already has. */
2
+ export declare const SSR_STYLE_ATTRIBUTE = "data-interactions-css";
1
3
  export declare const getV2ConfigStyleHeadContent: (css: string) => string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getV2ConfigStyleHeadContent = void 0;
3
+ exports.getV2ConfigStyleHeadContent = exports.SSR_STYLE_ATTRIBUTE = void 0;
4
4
  /**
5
5
  * Head content is a raw HTML string. CSS values may contain tag-like text, but an actual closing
6
6
  * style tag still terminates the raw-text element, and HeadAppender rejects `<script` substrings.
@@ -13,6 +13,8 @@ const sanitizeCssForStyleElement = (css) => {
13
13
  const withoutStyleBreakout = styleEndTagIndex === -1 ? css : css.slice(0, styleEndTagIndex);
14
14
  return withoutStyleBreakout.replace(SCRIPT_LIKE, '\\3c script');
15
15
  };
16
- const getV2ConfigStyleHeadContent = (css) => `<style>${sanitizeCssForStyleElement(css)}</style>`;
16
+ /** Marks the server-rendered v2 style element so the client can tell which rules it already has. */
17
+ exports.SSR_STYLE_ATTRIBUTE = 'data-interactions-css';
18
+ const getV2ConfigStyleHeadContent = (css) => `<style ${exports.SSR_STYLE_ATTRIBUTE}>${sanitizeCssForStyleElement(css)}</style>`;
17
19
  exports.getV2ConfigStyleHeadContent = getV2ConfigStyleHeadContent;
18
20
  //# sourceMappingURL=configStyleHeadContent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configStyleHeadContent.js","sourceRoot":"","sources":["../../../../src/implementations/v2/configStyleHeadContent.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,MAAM,aAAa,GAAG,4BAA4B,CAAA;AAClD,MAAM,WAAW,GAAG,WAAW,CAAA;AAE/B,MAAM,0BAA0B,GAAG,CAAC,GAAW,EAAU,EAAE;IAC1D,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IAClD,MAAM,oBAAoB,GAAG,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IAC3F,OAAO,oBAAoB,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;AAChE,CAAC,CAAA;AAEM,MAAM,2BAA2B,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,UAAU,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAA;AAA1G,QAAA,2BAA2B,GAA3B,2BAA2B,CAA+E"}
1
+ {"version":3,"file":"configStyleHeadContent.js","sourceRoot":"","sources":["../../../../src/implementations/v2/configStyleHeadContent.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,MAAM,aAAa,GAAG,4BAA4B,CAAA;AAClD,MAAM,WAAW,GAAG,WAAW,CAAA;AAE/B,MAAM,0BAA0B,GAAG,CAAC,GAAW,EAAU,EAAE;IAC1D,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IAClD,MAAM,oBAAoB,GAAG,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IAC3F,OAAO,oBAAoB,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;AAChE,CAAC,CAAA;AAED,oGAAoG;AACvF,QAAA,mBAAmB,GAAG,uBAAuB,CAAA;AAEnD,MAAM,2BAA2B,GAAG,CAAC,GAAW,EAAU,EAAE,CAClE,UAAU,QAAA,mBAAmB,IAAI,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAA;AAD9D,QAAA,2BAA2B,GAA3B,2BAA2B,CACmC"}
@@ -18,7 +18,10 @@ export type InteractStyleRule = {
18
18
  };
19
19
  /** Set of interactions in the host's config, with the CSS rules that go with it. */
20
20
  export type InteractConfigEntry = {
21
- /** Key of the component that scopes the entry's CSS rules. Required when `styles` isn't empty. */
21
+ /**
22
+ * Key of the component that scopes the entry's CSS rules. Required when `styles` isn't empty. Outside the
23
+ * reactions entry it also claims that component and everything inside it: reactions there are dropped.
24
+ */
22
25
  namespace?: string;
23
26
  /** The entry's interactions and effects, in the `@wix/interact` config format. */
24
27
  interact: InteractConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/definition/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAuGzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CACxD,gCAAgC,CAChC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/definition/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AA0GzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CACxD,gCAAgC,CAChC,CAAA"}
@@ -5,9 +5,11 @@ export declare const getResolvedConfigEntries: (config: IInteractionsServiceConf
5
5
  export declare const getInteractiveKeys: ({ interact }: InteractConfigEntry) => Set<string>;
6
6
  /**
7
7
  * Interact resolves a custom-element key to the first instance containing that key, so a key shared
8
- * by two entries would silently drop one of them. Experience entries own the keys they declare:
9
- * whatever they claim is stripped from the reactions entry by dropping whole interactions whose
10
- * resolved keys overlap. Top-level effect and sequence libraries are left intact. A collision between two
11
- * experience entries stays an error, since neither of them is authoritative.
8
+ * by two entries would silently drop one of them. Experience entries own the keys they declare, and an
9
+ * experience's namespace (its section's comp path) is a scope no reaction may touch: the section and
10
+ * every component inside it belong to the experience, whatever keys the experience itself declares.
11
+ * Both are stripped from the reactions entry by dropping whole interactions whose resolved keys overlap.
12
+ * Top-level effect and sequence libraries are left intact. A collision between two experience entries
13
+ * stays an error, since neither of them is authoritative.
12
14
  */
13
15
  export declare const resolveInteractKeyConflicts: (entries: InteractConfigEntry[]) => InteractConfigEntry[];
@@ -29,29 +29,38 @@ export const getInteractiveKeys = ({ interact }) => {
29
29
  }
30
30
  return keys;
31
31
  };
32
- const dropOverriddenKeys = (entry, overriddenKeys) => {
32
+ /** Keys are comp paths, so a component inside a section has the section's path as a prefix. */
33
+ const isInScope = (key, scope) => key === scope || key.startsWith(`${scope}/`);
34
+ const dropOverriddenKeys = (entry, overriddenKeys, scopes) => {
33
35
  const { interact } = entry;
36
+ const isOverridden = (key) => overriddenKeys.has(key) || scopes.some((scope) => isInScope(key, scope));
34
37
  return {
35
38
  ...entry,
36
39
  interact: {
37
40
  ...interact,
38
- interactions: interact.interactions.filter((interaction) => ![...getInteractionKeys(interact, interaction)].some((key) => overriddenKeys.has(key))),
41
+ interactions: interact.interactions.filter((interaction) => ![...getInteractionKeys(interact, interaction)].some(isOverridden)),
39
42
  },
40
43
  };
41
44
  };
42
45
  /**
43
46
  * Interact resolves a custom-element key to the first instance containing that key, so a key shared
44
- * by two entries would silently drop one of them. Experience entries own the keys they declare:
45
- * whatever they claim is stripped from the reactions entry by dropping whole interactions whose
46
- * resolved keys overlap. Top-level effect and sequence libraries are left intact. A collision between two
47
- * experience entries stays an error, since neither of them is authoritative.
47
+ * by two entries would silently drop one of them. Experience entries own the keys they declare, and an
48
+ * experience's namespace (its section's comp path) is a scope no reaction may touch: the section and
49
+ * every component inside it belong to the experience, whatever keys the experience itself declares.
50
+ * Both are stripped from the reactions entry by dropping whole interactions whose resolved keys overlap.
51
+ * Top-level effect and sequence libraries are left intact. A collision between two experience entries
52
+ * stays an error, since neither of them is authoritative.
48
53
  */
49
54
  export const resolveInteractKeyConflicts = (entries) => {
50
55
  const owners = new Map();
56
+ const scopes = [];
51
57
  entries.forEach((entry, index) => {
52
58
  if (entry.namespace === REACTIONS_NAMESPACE) {
53
59
  return;
54
60
  }
61
+ if (entry.namespace) {
62
+ scopes.push(entry.namespace);
63
+ }
55
64
  const owner = entry.namespace ?? `entry-${index}`;
56
65
  for (const key of getInteractiveKeys(entry)) {
57
66
  const existingOwner = owners.get(key);
@@ -62,10 +71,10 @@ export const resolveInteractKeyConflicts = (entries) => {
62
71
  owners.set(key, owner);
63
72
  }
64
73
  });
65
- if (!owners.size) {
74
+ if (!owners.size && !scopes.length) {
66
75
  return entries;
67
76
  }
68
77
  const overriddenKeys = new Set(owners.keys());
69
- return entries.map((entry) => entry.namespace === REACTIONS_NAMESPACE ? dropOverriddenKeys(entry, overriddenKeys) : entry);
78
+ return entries.map((entry) => entry.namespace === REACTIONS_NAMESPACE ? dropOverriddenKeys(entry, overriddenKeys, scopes) : entry);
70
79
  };
71
80
  //# sourceMappingURL=configEntries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configEntries.js","sourceRoot":"","sources":["../../src/implementations/configEntries.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAE5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAA;AAM9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAkC,EAAyB,EAAE,CACrG,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAA;AAE9F,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,MAAkC,EAAyB,EAAE,CACrG,wBAAwB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9C,KAAK,CAAC,SAAS,KAAK,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CACjH,CAAA;AAEF,mGAAmG;AACnG,MAAM,gBAAgB,GAAG,CAAC,QAAwB,EAAE,MAAmB,EAAsB,EAAE,CAC9F,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;AAEvF,MAAM,aAAa,GAAG,CAAC,IAAiB,EAAE,QAAwB,EAAE,OAAO,GAA2B,EAAE,EAAE,EAAE;IAC3G,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC9C,IAAI,GAAG,EAAE,CAAC;YACT,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACd,CAAC;IACF,CAAC;AACF,CAAC,CAAA;AAED,+FAA+F;AAC/F,MAAM,kBAAkB,GAAG,CAAC,QAAwB,EAAE,QAAkB,EAA0B,EAAE,CACnG,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAA;AAEtG,MAAM,kBAAkB,GAAG,CAAC,QAAwB,EAAE,WAAwB,EAAe,EAAE;IAC9F,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IAClD,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QACpD,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IACtE,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,QAAQ,EAAuB,EAAe,EAAE;IACpF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAE9B,KAAK,MAAM,WAAW,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QACjD,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CAAC,KAA0B,EAAE,cAA2B,EAAuB,EAAE;IAC3G,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAE1B,OAAO;QACN,GAAG,KAAK;QACR,QAAQ,EAAE;YACT,GAAG,QAAQ;YACX,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,MAAM,CACzC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CACvG;SACD;KACD,CAAA;AACF,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,OAA8B,EAAyB,EAAE;IACpG,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IAExC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,IAAI,KAAK,CAAC,SAAS,KAAK,mBAAmB,EAAE,CAAC;YAC7C,OAAM;QACP,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,IAAI,SAAS,KAAK,EAAE,CAAA;QACjD,KAAK,MAAM,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACrC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACd,4BAA4B,GAAG,mBAAmB,aAAa,UAAU,KAAK,KAAK;oBAClF,4CAA4C,CAC7C,CAAA;YACF,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACvB,CAAC;IACF,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,OAAO,CAAA;IACf,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5B,KAAK,CAAC,SAAS,KAAK,mBAAmB,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAC3F,CAAA;AACF,CAAC,CAAA"}
1
+ {"version":3,"file":"configEntries.js","sourceRoot":"","sources":["../../src/implementations/configEntries.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ import { createInteractionsScriptElement } from './InteractionsScriptElement';
13
13
  import { createV2InteractionsScriptElement } from './v2/InteractionsScriptElement';
14
14
  import { getV2ConfigCss } from './v2/configCss';
15
15
  import { getV2ConfigStyleHeadContent } from './v2/configStyleHeadContent';
16
+ import { getClickTriggerCss } from './v2/clickTriggerCss';
16
17
  import { getV2ModulePreloadHeadContent } from './v2/interactionsScriptContent';
17
18
  import { getAuthoredStylesCss } from './v2/authoredStyles';
18
19
  import { getInteractConfigEntries, getInteractiveKeys, getResolvedConfigEntries, resolveInteractKeyConflicts, } from './configEntries';
@@ -66,7 +67,8 @@ const initRuntime = (entries, isReducedMotion, getService, useV2) => {
66
67
  addTopComponent(createInteractionsScriptElement(runtimeConfigs[0], isReducedMotion, pageId));
67
68
  return;
68
69
  }
69
- addTopComponent(createV2InteractionsScriptElement(runtimeConfigs, isReducedMotion, pageId));
70
+ const clickTriggerCss = entries.map(({ interact }) => getClickTriggerCss(interact).trim()).filter(Boolean);
71
+ addTopComponent(createV2InteractionsScriptElement(runtimeConfigs, isReducedMotion, pageId, clickTriggerCss));
70
72
  };
71
73
  const getInteractiveComps = (entries) => {
72
74
  const keys = new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"coreInteractions.js","sourceRoot":"","sources":["../../src/implementations/coreInteractions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coreInteractions.js","sourceRoot":"","sources":["../../src/implementations/coreInteractions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { FunctionComponent } from 'react';
2
+ type StyleSheetDocument = Pick<Document, 'adoptedStyleSheets' | 'querySelectorAll'>;
3
+ /**
4
+ * Adopts the rules the server did not already send as a constructable stylesheet, and returns a
5
+ * function that removes that sheet again.
6
+ */
7
+ export declare const adoptMissingStyleSheet: (rules: Array<string>, document?: StyleSheetDocument | undefined) => () => void;
8
+ /**
9
+ * The server sends the click-trigger cursor rules in the head only for what it rendered, so content
10
+ * rendered on the client (client-side navigation, password-protected / members-only pages) never gets
11
+ * them. Adopt the missing ones while the page is mounted and remove them when navigating away.
12
+ */
13
+ export declare const ClickTriggerStyleSheet: FunctionComponent<{
14
+ rules: Array<string>;
15
+ }>;
16
+ export {};
@@ -0,0 +1,35 @@
1
+ import { useEffect } from 'react';
2
+ import { SSR_STYLE_ATTRIBUTE } from './configStyleHeadContent';
3
+ const getServerRenderedCss = (document) => Array.from(document.querySelectorAll(`style[${SSR_STYLE_ATTRIBUTE}]`))
4
+ .map((style) => style.textContent ?? '')
5
+ .join('\n');
6
+ /**
7
+ * Adopts the rules the server did not already send as a constructable stylesheet, and returns a
8
+ * function that removes that sheet again.
9
+ */
10
+ export const adoptMissingStyleSheet = (rules, document = globalThis.document) => {
11
+ if (!document?.adoptedStyleSheets) {
12
+ return () => { };
13
+ }
14
+ const serverRenderedCss = getServerRenderedCss(document);
15
+ const css = rules.filter((rule) => !serverRenderedCss.includes(rule)).join('\n');
16
+ if (!css) {
17
+ return () => { };
18
+ }
19
+ const sheet = new CSSStyleSheet();
20
+ sheet.replaceSync(css);
21
+ document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
22
+ return () => {
23
+ document.adoptedStyleSheets = document.adoptedStyleSheets.filter((adopted) => adopted !== sheet);
24
+ };
25
+ };
26
+ /**
27
+ * The server sends the click-trigger cursor rules in the head only for what it rendered, so content
28
+ * rendered on the client (client-side navigation, password-protected / members-only pages) never gets
29
+ * them. Adopt the missing ones while the page is mounted and remove them when navigating away.
30
+ */
31
+ export const ClickTriggerStyleSheet = ({ rules }) => {
32
+ useEffect(() => adoptMissingStyleSheet(rules), [rules]);
33
+ return null;
34
+ };
35
+ //# sourceMappingURL=ClickTriggerStyleSheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClickTriggerStyleSheet.js","sourceRoot":"","sources":["../../../src/implementations/v2/ClickTriggerStyleSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAI9D,MAAM,oBAAoB,GAAG,CAAC,QAA4B,EAAU,EAAE,CACrE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,mBAAmB,GAAG,CAAC,CAAC;KACpE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;KACvC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEb;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACrC,KAAoB,EACpB,QAAQ,GAAmC,UAAU,CAAC,QAAQ,EAC7D,EAAE;IACH,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;QACnC,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IAChB,CAAC;IAED,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;IACxD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChF,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAA;IACjC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACtB,QAAQ,CAAC,kBAAkB,GAAG,CAAC,GAAG,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;IAErE,OAAO,GAAG,EAAE;QACX,QAAQ,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC,CAAA;IACjG,CAAC,CAAA;AACF,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAgD,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAChG,SAAS,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEvD,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA"}
@@ -1,3 +1,3 @@
1
1
  import type { FunctionComponent } from 'react';
2
2
  import type { InteractConfig } from '@wix/interact';
3
- export declare const createV2InteractionsScriptElement: (config: InteractConfig | InteractConfig[], isReducedMotion: boolean, pageId: string) => FunctionComponent;
3
+ export declare const createV2InteractionsScriptElement: (config: InteractConfig | InteractConfig[], isReducedMotion: boolean, pageId: string, clickTriggerCss?: Array<string>) => FunctionComponent;
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import { reviveScriptElement } from '../reviveScriptElement';
3
+ import { ClickTriggerStyleSheet } from './ClickTriggerStyleSheet';
3
4
  import { getV2InteractionsScriptContent } from './interactionsScriptContent';
4
5
  const DANGEROUSLY_SET_INNER_HTML = ['dangerously', 'Set', 'Inner', 'HTML'];
5
6
  /**
@@ -7,7 +8,7 @@ const DANGEROUSLY_SET_INNER_HTML = ['dangerously', 'Set', 'Inner', 'HTML'];
7
8
  * element early. `\u003c` is valid JSON that `JSON.parse` reads back as `<`.
8
9
  */
9
10
  const serializeConfigForScriptElement = (config) => JSON.stringify(config).replace(/</g, '\\u003c');
10
- export const createV2InteractionsScriptElement = (config, isReducedMotion, pageId) => () => {
11
+ export const createV2InteractionsScriptElement = (config, isReducedMotion, pageId, clickTriggerCss = []) => () => {
11
12
  // This ID is also interpolated into raw module-script text. Percent-encoding removes
12
13
  // script delimiters and template-literal syntax while keeping the ID deterministic.
13
14
  const safePageId = encodeURIComponent(pageId);
@@ -21,6 +22,7 @@ export const createV2InteractionsScriptElement = (config, isReducedMotion, pageI
21
22
  };
22
23
  return (React.createElement(React.Fragment, null,
23
24
  React.createElement("script", { type: "application/json", id: configId, ...configProps }),
24
- React.createElement("script", { type: "module", id: `interactions-loader-${safePageId}`, ref: reviveScriptElement, ...loaderProps })));
25
+ React.createElement("script", { type: "module", id: `interactions-loader-${safePageId}`, ref: reviveScriptElement, ...loaderProps }),
26
+ clickTriggerCss.length > 0 && React.createElement(ClickTriggerStyleSheet, { rules: clickTriggerCss })));
25
27
  };
26
28
  //# sourceMappingURL=InteractionsScriptElement.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InteractionsScriptElement.js","sourceRoot":"","sources":["../../../src/implementations/v2/InteractionsScriptElement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAA;AAE5E,MAAM,0BAA0B,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAE1E;;;GAGG;AACH,MAAM,+BAA+B,GAAG,CAAC,MAAyC,EAAU,EAAE,CAC7F,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;AAEhD,MAAM,CAAC,MAAM,iCAAiC,GAC7C,CAAC,MAAyC,EAAE,eAAwB,EAAE,MAAc,EAAqB,EAAE,CAC3G,GAAG,EAAE;IACJ,qFAAqF;IACrF,oFAAoF;IACpF,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,uBAAuB,UAAU,EAAE,CAAA;IACpD,MAAM,yBAAyB,GAAG,8BAA8B,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;IAC3F,MAAM,WAAW,GAAG;QACnB,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,+BAA+B,CAAC,MAAM,CAAC,EAAE;KAC1F,CAAA;IACD,MAAM,WAAW,GAAG;QACnB,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE;KAC5E,CAAA;IAED,OAAO,CACN;QACC,gCAAQ,IAAI,EAAC,kBAAkB,EAAC,EAAE,EAAE,QAAQ,KAAM,WAAW,GAAI;QACjE,gCAAQ,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAE,uBAAuB,UAAU,EAAE,EAAE,GAAG,EAAE,mBAAmB,KAAM,WAAW,GAAI,CAC1G,CACH,CAAA;AACF,CAAC,CAAA"}
1
+ {"version":3,"file":"InteractionsScriptElement.js","sourceRoot":"","sources":["../../../src/implementations/v2/InteractionsScriptElement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAA;AAE5E,MAAM,0BAA0B,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAE1E;;;GAGG;AACH,MAAM,+BAA+B,GAAG,CAAC,MAAyC,EAAU,EAAE,CAC7F,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;AAEhD,MAAM,CAAC,MAAM,iCAAiC,GAC7C,CACC,MAAyC,EACzC,eAAwB,EACxB,MAAc,EACd,eAAe,GAAkB,EAAE,EACf,EAAE,CACvB,GAAG,EAAE;IACJ,qFAAqF;IACrF,oFAAoF;IACpF,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,uBAAuB,UAAU,EAAE,CAAA;IACpD,MAAM,yBAAyB,GAAG,8BAA8B,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;IAC3F,MAAM,WAAW,GAAG;QACnB,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,+BAA+B,CAAC,MAAM,CAAC,EAAE;KAC1F,CAAA;IACD,MAAM,WAAW,GAAG;QACnB,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE;KAC5E,CAAA;IAED,OAAO,CACN;QACC,gCAAQ,IAAI,EAAC,kBAAkB,EAAC,EAAE,EAAE,QAAQ,KAAM,WAAW,GAAI;QACjE,gCAAQ,IAAI,EAAC,QAAQ,EAAC,EAAE,EAAE,uBAAuB,UAAU,EAAE,EAAE,GAAG,EAAE,mBAAmB,KAAM,WAAW,GAAI;QAC3G,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,oBAAC,sBAAsB,IAAC,KAAK,EAAE,eAAe,GAAI,CAC/E,CACH,CAAA;AACF,CAAC,CAAA"}
@@ -1 +1,3 @@
1
+ /** Marks the server-rendered v2 style element so the client can tell which rules it already has. */
2
+ export declare const SSR_STYLE_ATTRIBUTE = "data-interactions-css";
1
3
  export declare const getV2ConfigStyleHeadContent: (css: string) => string;
@@ -10,5 +10,7 @@ const sanitizeCssForStyleElement = (css) => {
10
10
  const withoutStyleBreakout = styleEndTagIndex === -1 ? css : css.slice(0, styleEndTagIndex);
11
11
  return withoutStyleBreakout.replace(SCRIPT_LIKE, '\\3c script');
12
12
  };
13
- export const getV2ConfigStyleHeadContent = (css) => `<style>${sanitizeCssForStyleElement(css)}</style>`;
13
+ /** Marks the server-rendered v2 style element so the client can tell which rules it already has. */
14
+ export const SSR_STYLE_ATTRIBUTE = 'data-interactions-css';
15
+ export const getV2ConfigStyleHeadContent = (css) => `<style ${SSR_STYLE_ATTRIBUTE}>${sanitizeCssForStyleElement(css)}</style>`;
14
16
  //# sourceMappingURL=configStyleHeadContent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configStyleHeadContent.js","sourceRoot":"","sources":["../../../src/implementations/v2/configStyleHeadContent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,aAAa,GAAG,4BAA4B,CAAA;AAClD,MAAM,WAAW,GAAG,WAAW,CAAA;AAE/B,MAAM,0BAA0B,GAAG,CAAC,GAAW,EAAU,EAAE;IAC1D,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IAClD,MAAM,oBAAoB,GAAG,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IAC3F,OAAO,oBAAoB,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;AAChE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,UAAU,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAA"}
1
+ {"version":3,"file":"configStyleHeadContent.js","sourceRoot":"","sources":["../../../src/implementations/v2/configStyleHeadContent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,aAAa,GAAG,4BAA4B,CAAA;AAClD,MAAM,WAAW,GAAG,WAAW,CAAA;AAE/B,MAAM,0BAA0B,GAAG,CAAC,GAAW,EAAU,EAAE;IAC1D,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IAClD,MAAM,oBAAoB,GAAG,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IAC3F,OAAO,oBAAoB,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;AAChE,CAAC,CAAA;AAED,oGAAoG;AACpG,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAA;AAE1D,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,GAAW,EAAU,EAAE,CAClE,UAAU,mBAAmB,IAAI,0BAA0B,CAAC,GAAG,CAAC,UAAU,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/site-service-interactions",
3
- "version": "1.0.29",
3
+ "version": "1.0.31",
4
4
  "license": "UNLICENSED",
5
5
  "files": [
6
6
  "dist",
@@ -97,5 +97,5 @@
97
97
  ]
98
98
  }
99
99
  },
100
- "falconPackageHash": "21377e514fc1e03415173603664ff803a589b77e2f6225aae09d92d1"
100
+ "falconPackageHash": "a6b81913c9fee1c5185501cae3f9f3dcc43944461337de6a62ec8c28"
101
101
  }
@@ -22,7 +22,10 @@ export type InteractStyleRule = {
22
22
 
23
23
  /** Set of interactions in the host's config, with the CSS rules that go with it. */
24
24
  export type InteractConfigEntry = {
25
- /** Key of the component that scopes the entry's CSS rules. Required when `styles` isn't empty. */
25
+ /**
26
+ * Key of the component that scopes the entry's CSS rules. Required when `styles` isn't empty. Outside the
27
+ * reactions entry it also claims that component and everything inside it: reactions there are dropped.
28
+ */
26
29
  namespace?: string
27
30
  /** The entry's interactions and effects, in the `@wix/interact` config format. */
28
31
  interact: InteractConfig
@@ -51,15 +51,23 @@ export const getInteractiveKeys = ({ interact }: InteractConfigEntry): Set<strin
51
51
  return keys
52
52
  }
53
53
 
54
- const dropOverriddenKeys = (entry: InteractConfigEntry, overriddenKeys: Set<string>): InteractConfigEntry => {
54
+ /** Keys are comp paths, so a component inside a section has the section's path as a prefix. */
55
+ const isInScope = (key: string, scope: string): boolean => key === scope || key.startsWith(`${scope}/`)
56
+
57
+ const dropOverriddenKeys = (
58
+ entry: InteractConfigEntry,
59
+ overriddenKeys: Set<string>,
60
+ scopes: readonly string[]
61
+ ): InteractConfigEntry => {
55
62
  const { interact } = entry
63
+ const isOverridden = (key: string) => overriddenKeys.has(key) || scopes.some((scope) => isInScope(key, scope))
56
64
 
57
65
  return {
58
66
  ...entry,
59
67
  interact: {
60
68
  ...interact,
61
69
  interactions: interact.interactions.filter(
62
- (interaction) => ![...getInteractionKeys(interact, interaction)].some((key) => overriddenKeys.has(key))
70
+ (interaction) => ![...getInteractionKeys(interact, interaction)].some(isOverridden)
63
71
  ),
64
72
  },
65
73
  }
@@ -67,18 +75,24 @@ const dropOverriddenKeys = (entry: InteractConfigEntry, overriddenKeys: Set<stri
67
75
 
68
76
  /**
69
77
  * Interact resolves a custom-element key to the first instance containing that key, so a key shared
70
- * by two entries would silently drop one of them. Experience entries own the keys they declare:
71
- * whatever they claim is stripped from the reactions entry by dropping whole interactions whose
72
- * resolved keys overlap. Top-level effect and sequence libraries are left intact. A collision between two
73
- * experience entries stays an error, since neither of them is authoritative.
78
+ * by two entries would silently drop one of them. Experience entries own the keys they declare, and an
79
+ * experience's namespace (its section's comp path) is a scope no reaction may touch: the section and
80
+ * every component inside it belong to the experience, whatever keys the experience itself declares.
81
+ * Both are stripped from the reactions entry by dropping whole interactions whose resolved keys overlap.
82
+ * Top-level effect and sequence libraries are left intact. A collision between two experience entries
83
+ * stays an error, since neither of them is authoritative.
74
84
  */
75
85
  export const resolveInteractKeyConflicts = (entries: InteractConfigEntry[]): InteractConfigEntry[] => {
76
86
  const owners = new Map<string, string>()
87
+ const scopes: string[] = []
77
88
 
78
89
  entries.forEach((entry, index) => {
79
90
  if (entry.namespace === REACTIONS_NAMESPACE) {
80
91
  return
81
92
  }
93
+ if (entry.namespace) {
94
+ scopes.push(entry.namespace)
95
+ }
82
96
  const owner = entry.namespace ?? `entry-${index}`
83
97
  for (const key of getInteractiveKeys(entry)) {
84
98
  const existingOwner = owners.get(key)
@@ -92,12 +106,12 @@ export const resolveInteractKeyConflicts = (entries: InteractConfigEntry[]): Int
92
106
  }
93
107
  })
94
108
 
95
- if (!owners.size) {
109
+ if (!owners.size && !scopes.length) {
96
110
  return entries
97
111
  }
98
112
 
99
113
  const overriddenKeys = new Set(owners.keys())
100
114
  return entries.map((entry) =>
101
- entry.namespace === REACTIONS_NAMESPACE ? dropOverriddenKeys(entry, overriddenKeys) : entry
115
+ entry.namespace === REACTIONS_NAMESPACE ? dropOverriddenKeys(entry, overriddenKeys, scopes) : entry
102
116
  )
103
117
  }
@@ -16,6 +16,7 @@ import { createInteractionsScriptElement } from './InteractionsScriptElement'
16
16
  import { createV2InteractionsScriptElement } from './v2/InteractionsScriptElement'
17
17
  import { getV2ConfigCss } from './v2/configCss'
18
18
  import { getV2ConfigStyleHeadContent } from './v2/configStyleHeadContent'
19
+ import { getClickTriggerCss } from './v2/clickTriggerCss'
19
20
  import { getV2ModulePreloadHeadContent } from './v2/interactionsScriptContent'
20
21
  import { getAuthoredStylesCss } from './v2/authoredStyles'
21
22
  import {
@@ -91,7 +92,8 @@ const initRuntime = (
91
92
  return
92
93
  }
93
94
 
94
- addTopComponent(createV2InteractionsScriptElement(runtimeConfigs, isReducedMotion, pageId))
95
+ const clickTriggerCss = entries.map(({ interact }) => getClickTriggerCss(interact).trim()).filter(Boolean)
96
+ addTopComponent(createV2InteractionsScriptElement(runtimeConfigs, isReducedMotion, pageId, clickTriggerCss))
95
97
  }
96
98
 
97
99
  const getInteractiveComps = (entries: InteractConfigEntry[]): Set<string> => {
@@ -0,0 +1,48 @@
1
+ import { useEffect } from 'react'
2
+ import type { FunctionComponent } from 'react'
3
+ import { SSR_STYLE_ATTRIBUTE } from './configStyleHeadContent'
4
+
5
+ type StyleSheetDocument = Pick<Document, 'adoptedStyleSheets' | 'querySelectorAll'>
6
+
7
+ const getServerRenderedCss = (document: StyleSheetDocument): string =>
8
+ Array.from(document.querySelectorAll(`style[${SSR_STYLE_ATTRIBUTE}]`))
9
+ .map((style) => style.textContent ?? '')
10
+ .join('\n')
11
+
12
+ /**
13
+ * Adopts the rules the server did not already send as a constructable stylesheet, and returns a
14
+ * function that removes that sheet again.
15
+ */
16
+ export const adoptMissingStyleSheet = (
17
+ rules: Array<string>,
18
+ document: StyleSheetDocument | undefined = globalThis.document
19
+ ) => {
20
+ if (!document?.adoptedStyleSheets) {
21
+ return () => {}
22
+ }
23
+
24
+ const serverRenderedCss = getServerRenderedCss(document)
25
+ const css = rules.filter((rule) => !serverRenderedCss.includes(rule)).join('\n')
26
+ if (!css) {
27
+ return () => {}
28
+ }
29
+
30
+ const sheet = new CSSStyleSheet()
31
+ sheet.replaceSync(css)
32
+ document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet]
33
+
34
+ return () => {
35
+ document.adoptedStyleSheets = document.adoptedStyleSheets.filter((adopted) => adopted !== sheet)
36
+ }
37
+ }
38
+
39
+ /**
40
+ * The server sends the click-trigger cursor rules in the head only for what it rendered, so content
41
+ * rendered on the client (client-side navigation, password-protected / members-only pages) never gets
42
+ * them. Adopt the missing ones while the page is mounted and remove them when navigating away.
43
+ */
44
+ export const ClickTriggerStyleSheet: FunctionComponent<{ rules: Array<string> }> = ({ rules }) => {
45
+ useEffect(() => adoptMissingStyleSheet(rules), [rules])
46
+
47
+ return null
48
+ }
@@ -2,6 +2,7 @@ import React from 'react'
2
2
  import type { FunctionComponent } from 'react'
3
3
  import type { InteractConfig } from '@wix/interact'
4
4
  import { reviveScriptElement } from '../reviveScriptElement'
5
+ import { ClickTriggerStyleSheet } from './ClickTriggerStyleSheet'
5
6
  import { getV2InteractionsScriptContent } from './interactionsScriptContent'
6
7
 
7
8
  const DANGEROUSLY_SET_INNER_HTML = ['dangerously', 'Set', 'Inner', 'HTML']
@@ -14,7 +15,12 @@ const serializeConfigForScriptElement = (config: InteractConfig | InteractConfig
14
15
  JSON.stringify(config).replace(/</g, '\\u003c')
15
16
 
16
17
  export const createV2InteractionsScriptElement =
17
- (config: InteractConfig | InteractConfig[], isReducedMotion: boolean, pageId: string): FunctionComponent =>
18
+ (
19
+ config: InteractConfig | InteractConfig[],
20
+ isReducedMotion: boolean,
21
+ pageId: string,
22
+ clickTriggerCss: Array<string> = []
23
+ ): FunctionComponent =>
18
24
  () => {
19
25
  // This ID is also interpolated into raw module-script text. Percent-encoding removes
20
26
  // script delimiters and template-literal syntax while keeping the ID deterministic.
@@ -32,6 +38,7 @@ export const createV2InteractionsScriptElement =
32
38
  <>
33
39
  <script type="application/json" id={configId} {...configProps} />
34
40
  <script type="module" id={`interactions-loader-${safePageId}`} ref={reviveScriptElement} {...loaderProps} />
41
+ {clickTriggerCss.length > 0 && <ClickTriggerStyleSheet rules={clickTriggerCss} />}
35
42
  </>
36
43
  )
37
44
  }
@@ -12,4 +12,8 @@ const sanitizeCssForStyleElement = (css: string): string => {
12
12
  return withoutStyleBreakout.replace(SCRIPT_LIKE, '\\3c script')
13
13
  }
14
14
 
15
- export const getV2ConfigStyleHeadContent = (css: string): string => `<style>${sanitizeCssForStyleElement(css)}</style>`
15
+ /** Marks the server-rendered v2 style element so the client can tell which rules it already has. */
16
+ export const SSR_STYLE_ATTRIBUTE = 'data-interactions-css'
17
+
18
+ export const getV2ConfigStyleHeadContent = (css: string): string =>
19
+ `<style ${SSR_STYLE_ATTRIBUTE}>${sanitizeCssForStyleElement(css)}</style>`