@cntrl-site/sdk-nextjs 1.9.13 → 1.9.14-1

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.
@@ -105,13 +105,51 @@ class InteractionsRegistry {
105
105
  }
106
106
  return available;
107
107
  }
108
+ getTriggerPositionForItemScrollTrigger(trigger) {
109
+ const itemArea = this.items.find((item) => item.id === trigger.itemId).area[this.layoutId];
110
+ let triggerPosition = 0;
111
+ switch (trigger.itemPosition) {
112
+ case 'top':
113
+ triggerPosition = itemArea.top * window.innerWidth;
114
+ break;
115
+ case 'center':
116
+ triggerPosition = itemArea.top * window.innerWidth - window.innerHeight / 2;
117
+ break;
118
+ case 'bottom':
119
+ triggerPosition = itemArea.top * window.innerWidth - window.innerHeight;
120
+ break;
121
+ default:
122
+ triggerPosition = itemArea.top * window.innerWidth;
123
+ break;
124
+ }
125
+ switch (trigger.screenPosition) {
126
+ case 'top':
127
+ triggerPosition += 0;
128
+ break;
129
+ case 'center':
130
+ triggerPosition += (itemArea.height * window.innerWidth) / 2;
131
+ break;
132
+ case 'bottom':
133
+ triggerPosition += itemArea.height * window.innerWidth;
134
+ break;
135
+ default:
136
+ triggerPosition += 0;
137
+ break;
138
+ }
139
+ triggerPosition += trigger.offset;
140
+ return triggerPosition;
141
+ }
142
+ isItemScrollTriggerOnStartScreen(trigger) {
143
+ const triggerPosition = this.getTriggerPositionForItemScrollTrigger(trigger);
144
+ return triggerPosition < 0;
145
+ }
108
146
  notifyLoad() {
109
147
  var _a, _b;
110
148
  const timestamp = Date.now();
111
149
  for (const interaction of this.interactions) {
112
150
  const currentStateId = this.getCurrentStateByInteractionId(interaction.id);
113
151
  const matchingTrigger = interaction.triggers.find(trigger => ('position' in trigger && trigger.position === 0 && trigger.from === currentStateId)
114
- || (trigger.type === 'item-scroll-position' && this.items.find((item) => item.id === trigger.itemId) && trigger.from === currentStateId));
152
+ || (trigger.type === 'item-scroll-position' && this.items.find((item) => item.id === trigger.itemId) && trigger.from === currentStateId && this.isItemScrollTriggerOnStartScreen(trigger)));
115
153
  if (!matchingTrigger)
116
154
  continue;
117
155
  const activeStateId = this.getActiveInteractionState(interaction.id);
@@ -180,6 +218,21 @@ class InteractionsRegistry {
180
218
  triggerPosition = itemArea.top * window.innerWidth;
181
219
  break;
182
220
  }
221
+ switch (trigger.screenPosition) {
222
+ case 'top':
223
+ triggerPosition += 0;
224
+ break;
225
+ case 'center':
226
+ triggerPosition += (itemArea.height * window.innerWidth) / 2;
227
+ break;
228
+ case 'bottom':
229
+ triggerPosition += itemArea.height * window.innerWidth;
230
+ break;
231
+ default:
232
+ triggerPosition += 0;
233
+ break;
234
+ }
235
+ triggerPosition += trigger.offset;
183
236
  }
184
237
  if (!triggerPosition)
185
238
  return false;
@@ -211,6 +264,21 @@ class InteractionsRegistry {
211
264
  triggerPosition = itemArea.top * window.innerWidth;
212
265
  break;
213
266
  }
267
+ switch (matchingTrigger.screenPosition) {
268
+ case 'top':
269
+ triggerPosition += 0;
270
+ break;
271
+ case 'center':
272
+ triggerPosition += (itemArea.height * window.innerWidth) / 2;
273
+ break;
274
+ case 'bottom':
275
+ triggerPosition += itemArea.height * window.innerWidth;
276
+ break;
277
+ default:
278
+ triggerPosition += 0;
279
+ break;
280
+ }
281
+ triggerPosition += matchingTrigger.offset;
214
282
  }
215
283
  if (!triggerPosition)
216
284
  continue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cntrl-site/sdk-nextjs",
3
- "version": "1.9.13",
3
+ "version": "1.9.14-1",
4
4
  "description": "SDK for Next.js",
5
5
  "author": "arsen@momdesign.nyc",
6
6
  "license": "MIT",
@@ -4,9 +4,11 @@ import {
4
4
  ArticleItemType,
5
5
  Interaction,
6
6
  InteractionItemTrigger,
7
+ InteractionScrollTrigger,
7
8
  ItemAny,
8
9
  } from '@cntrl-site/sdk';
9
10
  import { isItemType } from '../utils/isItemType';
11
+ import { InteractionItemScrollTrigger } from '@cntrl-site/sdk/lib/types/article/Interaction';
10
12
 
11
13
  export class InteractionsRegistry implements InteractionsRegistryPort {
12
14
  private ctrls: Map<ItemId, ItemInteractionCtrl> = new Map();
@@ -114,13 +116,53 @@ export class InteractionsRegistry implements InteractionsRegistryPort {
114
116
  return available;
115
117
  }
116
118
 
119
+ getTriggerPositionForItemScrollTrigger(trigger: InteractionItemScrollTrigger): number {
120
+ const itemArea = this.items.find((item) => item.id === trigger.itemId)!.area[this.layoutId];
121
+ let triggerPosition = 0;
122
+ switch (trigger.itemPosition) {
123
+ case 'top':
124
+ triggerPosition = itemArea.top * window.innerWidth;
125
+ break;
126
+ case 'center':
127
+ triggerPosition = itemArea.top * window.innerWidth - window.innerHeight / 2;
128
+ break;
129
+ case 'bottom':
130
+ triggerPosition = itemArea.top * window.innerWidth - window.innerHeight;
131
+ break;
132
+ default:
133
+ triggerPosition = itemArea.top * window.innerWidth;
134
+ break;
135
+ }
136
+ switch (trigger.screenPosition) {
137
+ case 'top':
138
+ triggerPosition += 0;
139
+ break;
140
+ case 'center':
141
+ triggerPosition += (itemArea.height * window.innerWidth) / 2;
142
+ break;
143
+ case 'bottom':
144
+ triggerPosition += itemArea.height * window.innerWidth;
145
+ break;
146
+ default:
147
+ triggerPosition += 0;
148
+ break;
149
+ }
150
+ triggerPosition += trigger.offset;
151
+ return triggerPosition;
152
+ }
153
+
154
+ isItemScrollTriggerOnStartScreen(trigger: InteractionItemScrollTrigger): boolean {
155
+ const triggerPosition = this.getTriggerPositionForItemScrollTrigger(trigger);
156
+ return triggerPosition < 0;
157
+ }
158
+
117
159
  notifyLoad() {
118
160
  const timestamp = Date.now();
119
161
  for (const interaction of this.interactions) {
120
162
  const currentStateId = this.getCurrentStateByInteractionId(interaction.id);
121
163
  const matchingTrigger = interaction.triggers.find(trigger =>
122
164
  ('position' in trigger && trigger.position === 0 && trigger.from === currentStateId)
123
- || (trigger.type === 'item-scroll-position' && this.items.find((item) => item.id === trigger.itemId) && trigger.from === currentStateId)
165
+ || (trigger.type === 'item-scroll-position' && this.items.find((item) => item.id === trigger.itemId) && trigger.from === currentStateId && this.isItemScrollTriggerOnStartScreen(trigger))
124
166
  );
125
167
  if (!matchingTrigger) continue;
126
168
  const activeStateId = this.getActiveInteractionState(interaction.id);
@@ -186,6 +228,21 @@ export class InteractionsRegistry implements InteractionsRegistryPort {
186
228
  triggerPosition = itemArea.top * window.innerWidth;
187
229
  break;
188
230
  }
231
+ switch (trigger.screenPosition) {
232
+ case 'top':
233
+ triggerPosition += 0;
234
+ break;
235
+ case 'center':
236
+ triggerPosition += (itemArea.height * window.innerWidth) / 2;
237
+ break;
238
+ case 'bottom':
239
+ triggerPosition += itemArea.height * window.innerWidth;
240
+ break;
241
+ default:
242
+ triggerPosition += 0;
243
+ break;
244
+ }
245
+ triggerPosition += trigger.offset;
189
246
  }
190
247
  if (!triggerPosition) return false;
191
248
  const isScrolledPastTrigger = triggerPosition < position;
@@ -214,6 +271,21 @@ export class InteractionsRegistry implements InteractionsRegistryPort {
214
271
  triggerPosition = itemArea.top * window.innerWidth;
215
272
  break;
216
273
  }
274
+ switch (matchingTrigger.screenPosition) {
275
+ case 'top':
276
+ triggerPosition += 0;
277
+ break;
278
+ case 'center':
279
+ triggerPosition += (itemArea.height * window.innerWidth) / 2;
280
+ break;
281
+ case 'bottom':
282
+ triggerPosition += itemArea.height * window.innerWidth;
283
+ break;
284
+ default:
285
+ triggerPosition += 0;
286
+ break;
287
+ }
288
+ triggerPosition += matchingTrigger.offset;
217
289
  }
218
290
  if (!triggerPosition) continue;
219
291
  const isScrolledPastTrigger = triggerPosition < position;