ember-nav-stack 6.1.2 → 7.1.0

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 (79) hide show
  1. package/README.md +165 -21
  2. package/addon-main.cjs +4 -0
  3. package/dist/_app_/components/nav-stack-inner-wrapper.js +1 -0
  4. package/dist/_app_/components/nav-stack.js +1 -0
  5. package/dist/_app_/components/to-nav-stack.js +1 -0
  6. package/dist/_app_/helpers/nav-layer-indices.js +1 -0
  7. package/dist/_app_/modifiers/back-swipe.js +1 -0
  8. package/dist/_app_/services/gesture.js +1 -0
  9. package/dist/_app_/services/nav-stacks.js +1 -0
  10. package/dist/_app_/templates/stackable.js +1 -0
  11. package/dist/back-swipe-gesture.js +261 -0
  12. package/dist/back-swipe-gesture.js.map +1 -0
  13. package/dist/components/nav-stack-inner-wrapper.js +10 -0
  14. package/dist/components/nav-stack-inner-wrapper.js.map +1 -0
  15. package/dist/components/nav-stack.js +700 -0
  16. package/dist/components/nav-stack.js.map +1 -0
  17. package/dist/components/to-nav-stack.js +22 -0
  18. package/dist/components/to-nav-stack.js.map +1 -0
  19. package/dist/helpers/nav-layer-indices.js +21 -0
  20. package/dist/helpers/nav-layer-indices.js.map +1 -0
  21. package/dist/index.js +7 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/modifiers/back-swipe.js +40 -0
  24. package/dist/modifiers/back-swipe.js.map +1 -0
  25. package/dist/routes/stackable-route.js +99 -0
  26. package/dist/routes/stackable-route.js.map +1 -0
  27. package/{addon → dist}/services/gesture.js +7 -9
  28. package/dist/services/gesture.js.map +1 -0
  29. package/dist/services/nav-stacks.js +137 -0
  30. package/dist/services/nav-stacks.js.map +1 -0
  31. package/dist/styles/nav-stack.css +399 -0
  32. package/dist/templates/stackable.js +8 -0
  33. package/dist/templates/stackable.js.map +1 -0
  34. package/{addon-test-support → dist/test-support}/in-viewport.js +7 -10
  35. package/dist/test-support/in-viewport.js.map +1 -0
  36. package/dist/test-support/index.js +2 -0
  37. package/dist/test-support/index.js.map +1 -0
  38. package/{addon → dist}/utils/animation.js +17 -40
  39. package/dist/utils/animation.js.map +1 -0
  40. package/{addon → dist}/utils/back-swipe-recognizer.js +29 -49
  41. package/dist/utils/back-swipe-recognizer.js.map +1 -0
  42. package/dist/utils/clone-store.js +88 -0
  43. package/dist/utils/clone-store.js.map +1 -0
  44. package/dist/utils/component.js +121 -0
  45. package/dist/utils/component.js.map +1 -0
  46. package/dist/utils/header-style.js +46 -0
  47. package/dist/utils/header-style.js.map +1 -0
  48. package/dist/utils/transition-decision.js +71 -0
  49. package/dist/utils/transition-decision.js.map +1 -0
  50. package/dist/utils/waiter-state.js +130 -0
  51. package/dist/utils/waiter-state.js.map +1 -0
  52. package/package.json +79 -91
  53. package/.vscode/settings.json +0 -2
  54. package/CHANGELOG.md +0 -208
  55. package/MODULE_REPORT.md +0 -27
  56. package/RELEASE.md +0 -54
  57. package/addon/components/nav-stack/component.js +0 -690
  58. package/addon/components/nav-stack/template.hbs +0 -37
  59. package/addon/components/to-nav-stack.js +0 -32
  60. package/addon/helpers/nav-layer-indices.js +0 -29
  61. package/addon/routes/stackable-route.js +0 -61
  62. package/addon/services/nav-stacks.js +0 -157
  63. package/addon/utils/component.js +0 -40
  64. package/app/components/nav-stack/component.js +0 -1
  65. package/app/components/nav-stack/template.js +0 -1
  66. package/app/components/to-nav-stack.js +0 -1
  67. package/app/helpers/nav-layer-indices.js +0 -1
  68. package/app/services/gesture.js +0 -1
  69. package/app/services/nav-stacks.js +0 -1
  70. package/app/styles/nav-stack.scss +0 -117
  71. package/app/templates/stackable.hbs +0 -8
  72. package/app/utils/animation.js +0 -1
  73. package/config/deploy.js +0 -29
  74. package/config/environment.js +0 -5
  75. package/config/release.js +0 -21
  76. package/docs/ember-nav-stack-waiters-plan.md +0 -125
  77. package/index.js +0 -15
  78. package/tsconfig.json +0 -6
  79. package/vendor/wobble-shim.js +0 -3
@@ -0,0 +1,399 @@
1
+ :root {
2
+ --nav-stack-header-height: 44px;
3
+ --nav-stack-footer-height: 50px;
4
+ }
5
+
6
+ .NavStack {
7
+ position: absolute;
8
+ left: 0px;
9
+ top: 0;
10
+ width: 100%;
11
+ height: 100%;
12
+ will-change: transform;
13
+ overflow: hidden;
14
+ }
15
+ .NavStack--layer0 {
16
+ transform: translateY(0);
17
+ z-index: 1;
18
+ }
19
+ .NavStack--layer1 {
20
+ transform: translateY(100%);
21
+ z-index: 2;
22
+ }
23
+ .NavStack--layer2 {
24
+ transform: translateY(200%);
25
+ z-index: 3;
26
+ }
27
+ .NavStack-itemContainer {
28
+ position: absolute;
29
+ top: var(--nav-stack-header-height);
30
+ bottom: 0;
31
+ left: 0;
32
+ width: 500%;
33
+ }
34
+ .NavStack--withFooter .NavStack-itemContainer {
35
+ bottom: var(--nav-stack-footer-height);
36
+ }
37
+ .NavStack-item {
38
+ position: absolute;
39
+ width: 20%;
40
+ top: 0;
41
+ bottom: 0;
42
+ box-sizing: border-box;
43
+ overflow: hidden;
44
+ }
45
+ .NavStack-item-0 {
46
+ left: 0%;
47
+ }
48
+ .NavStack-item-1 {
49
+ left: 20%;
50
+ }
51
+ .NavStack-item-2 {
52
+ left: 40%;
53
+ }
54
+ .NavStack-item-3 {
55
+ left: 60%;
56
+ }
57
+ .NavStack-item-4 {
58
+ left: 80%;
59
+ }
60
+ .NavStack-item-5 {
61
+ left: 100%;
62
+ }
63
+ .NavStack-item-6 {
64
+ left: 120%;
65
+ }
66
+ .NavStack-item-7 {
67
+ left: 140%;
68
+ }
69
+ .NavStack-item-8 {
70
+ left: 160%;
71
+ }
72
+ .NavStack-item-9 {
73
+ left: 180%;
74
+ }
75
+ .NavStack-item-10 {
76
+ left: 200%;
77
+ }
78
+ .NavStack-item-11 {
79
+ left: 220%;
80
+ }
81
+ .NavStack-item-12 {
82
+ left: 240%;
83
+ }
84
+ .NavStack-item-13 {
85
+ left: 260%;
86
+ }
87
+ .NavStack-item-14 {
88
+ left: 280%;
89
+ }
90
+ .NavStack-item-15 {
91
+ left: 300%;
92
+ }
93
+ .NavStack-item-16 {
94
+ left: 320%;
95
+ }
96
+ .NavStack-item-17 {
97
+ left: 340%;
98
+ }
99
+ .NavStack-item-18 {
100
+ left: 360%;
101
+ }
102
+ .NavStack-item-19 {
103
+ left: 380%;
104
+ }
105
+ .NavStack-item-20 {
106
+ left: 400%;
107
+ }
108
+ .NavStack-item-21 {
109
+ left: 420%;
110
+ }
111
+ .NavStack-item-22 {
112
+ left: 440%;
113
+ }
114
+ .NavStack-item-23 {
115
+ left: 460%;
116
+ }
117
+ .NavStack-item-24 {
118
+ left: 480%;
119
+ }
120
+ .NavStack-item-25 {
121
+ left: 500%;
122
+ }
123
+ .NavStack-item-26 {
124
+ left: 520%;
125
+ }
126
+ .NavStack-item-27 {
127
+ left: 540%;
128
+ }
129
+ .NavStack-item-28 {
130
+ left: 560%;
131
+ }
132
+ .NavStack-item-29 {
133
+ left: 580%;
134
+ }
135
+ .NavStack-item-30 {
136
+ left: 600%;
137
+ }
138
+ .NavStack-item-31 {
139
+ left: 620%;
140
+ }
141
+ .NavStack-item-32 {
142
+ left: 640%;
143
+ }
144
+ .NavStack-item-33 {
145
+ left: 660%;
146
+ }
147
+ .NavStack-item-34 {
148
+ left: 680%;
149
+ }
150
+ .NavStack-item-35 {
151
+ left: 700%;
152
+ }
153
+ .NavStack-item-36 {
154
+ left: 720%;
155
+ }
156
+ .NavStack-item-37 {
157
+ left: 740%;
158
+ }
159
+ .NavStack-item-38 {
160
+ left: 760%;
161
+ }
162
+ .NavStack-item-39 {
163
+ left: 780%;
164
+ }
165
+ .NavStack-item-40 {
166
+ left: 800%;
167
+ }
168
+ .NavStack-item-41 {
169
+ left: 820%;
170
+ }
171
+ .NavStack-item-42 {
172
+ left: 840%;
173
+ }
174
+ .NavStack-item-43 {
175
+ left: 860%;
176
+ }
177
+ .NavStack-item-44 {
178
+ left: 880%;
179
+ }
180
+ .NavStack-item-45 {
181
+ left: 900%;
182
+ }
183
+ .NavStack-item-46 {
184
+ left: 920%;
185
+ }
186
+ .NavStack-item-47 {
187
+ left: 940%;
188
+ }
189
+ .NavStack-item-48 {
190
+ left: 960%;
191
+ }
192
+ .NavStack-item-49 {
193
+ left: 980%;
194
+ }
195
+ .NavStack-item-50 {
196
+ left: 1000%;
197
+ }
198
+ .NavStack-item-51 {
199
+ left: 1020%;
200
+ }
201
+ .NavStack-item-52 {
202
+ left: 1040%;
203
+ }
204
+ .NavStack-item-53 {
205
+ left: 1060%;
206
+ }
207
+ .NavStack-item-54 {
208
+ left: 1080%;
209
+ }
210
+ .NavStack-item-55 {
211
+ left: 1100%;
212
+ }
213
+ .NavStack-item-56 {
214
+ left: 1120%;
215
+ }
216
+ .NavStack-item-57 {
217
+ left: 1140%;
218
+ }
219
+ .NavStack-item-58 {
220
+ left: 1160%;
221
+ }
222
+ .NavStack-item-59 {
223
+ left: 1180%;
224
+ }
225
+ .NavStack-item-60 {
226
+ left: 1200%;
227
+ }
228
+ .NavStack-item-61 {
229
+ left: 1220%;
230
+ }
231
+ .NavStack-item-62 {
232
+ left: 1240%;
233
+ }
234
+ .NavStack-item-63 {
235
+ left: 1260%;
236
+ }
237
+ .NavStack-item-64 {
238
+ left: 1280%;
239
+ }
240
+ .NavStack-item-65 {
241
+ left: 1300%;
242
+ }
243
+ .NavStack-item-66 {
244
+ left: 1320%;
245
+ }
246
+ .NavStack-item-67 {
247
+ left: 1340%;
248
+ }
249
+ .NavStack-item-68 {
250
+ left: 1360%;
251
+ }
252
+ .NavStack-item-69 {
253
+ left: 1380%;
254
+ }
255
+ .NavStack-item-70 {
256
+ left: 1400%;
257
+ }
258
+ .NavStack-item-71 {
259
+ left: 1420%;
260
+ }
261
+ .NavStack-item-72 {
262
+ left: 1440%;
263
+ }
264
+ .NavStack-item-73 {
265
+ left: 1460%;
266
+ }
267
+ .NavStack-item-74 {
268
+ left: 1480%;
269
+ }
270
+ .NavStack-item-75 {
271
+ left: 1500%;
272
+ }
273
+ .NavStack-item-76 {
274
+ left: 1520%;
275
+ }
276
+ .NavStack-item-77 {
277
+ left: 1540%;
278
+ }
279
+ .NavStack-item-78 {
280
+ left: 1560%;
281
+ }
282
+ .NavStack-item-79 {
283
+ left: 1580%;
284
+ }
285
+ .NavStack-item-80 {
286
+ left: 1600%;
287
+ }
288
+ .NavStack-item-81 {
289
+ left: 1620%;
290
+ }
291
+ .NavStack-item-82 {
292
+ left: 1640%;
293
+ }
294
+ .NavStack-item-83 {
295
+ left: 1660%;
296
+ }
297
+ .NavStack-item-84 {
298
+ left: 1680%;
299
+ }
300
+ .NavStack-item-85 {
301
+ left: 1700%;
302
+ }
303
+ .NavStack-item-86 {
304
+ left: 1720%;
305
+ }
306
+ .NavStack-item-87 {
307
+ left: 1740%;
308
+ }
309
+ .NavStack-item-88 {
310
+ left: 1760%;
311
+ }
312
+ .NavStack-item-89 {
313
+ left: 1780%;
314
+ }
315
+ .NavStack-item-90 {
316
+ left: 1800%;
317
+ }
318
+ .NavStack-item-91 {
319
+ left: 1820%;
320
+ }
321
+ .NavStack-item-92 {
322
+ left: 1840%;
323
+ }
324
+ .NavStack-item-93 {
325
+ left: 1860%;
326
+ }
327
+ .NavStack-item-94 {
328
+ left: 1880%;
329
+ }
330
+ .NavStack-item-95 {
331
+ left: 1900%;
332
+ }
333
+ .NavStack-item-96 {
334
+ left: 1920%;
335
+ }
336
+ .NavStack-item-97 {
337
+ left: 1940%;
338
+ }
339
+ .NavStack-item-98 {
340
+ left: 1960%;
341
+ }
342
+ .NavStack-item-99 {
343
+ left: 1980%;
344
+ }
345
+ .NavStack-item-100 {
346
+ left: 2000%;
347
+ }
348
+ .NavStack-header {
349
+ position: absolute;
350
+ height: var(--nav-stack-header-height);
351
+ box-sizing: content-box;
352
+ top: 0;
353
+ left: 0;
354
+ right: 0;
355
+ background: rgba(0, 0, 0, 0.2);
356
+ }
357
+ .NavStack-headerContainer {
358
+ position: relative;
359
+ }
360
+ .NavStack-headerComponent,
361
+ .NavStack-headerContainerComponent {
362
+ position: absolute;
363
+ top: 0;
364
+ bottom: 0;
365
+ left: 0;
366
+ right: 0;
367
+ }
368
+ .NavStack-headerContainerComponent {
369
+ will-change: opacity transform;
370
+ }
371
+ .NavStack-parentItemHeaderContainer {
372
+ opacity: 0;
373
+ }
374
+ .NavStack-footer {
375
+ position: absolute;
376
+ bottom: 0;
377
+ height: var(--nav-stack-footer-height);
378
+ box-sizing: content-box;
379
+ left: 0;
380
+ right: 0;
381
+ background: rgba(0, 0, 0, 0.2);
382
+ }
383
+ .NavStack.is-birdsEyeDebugging {
384
+ width: 320px;
385
+ height: 480px;
386
+ }
387
+ .NavStack.is-birdsEyeDebugging.NavStack--layer1 {
388
+ transform: translateY(480px);
389
+ }
390
+ .NavStack.is-birdsEyeDebugging.NavStack--layer2 {
391
+ transform: translateY(960px);
392
+ }
393
+ .NavStack.is-birdsEyeDebugging .NavStack-itemContainer {
394
+ left: 0px;
395
+ width: 1600px;
396
+ }
397
+ .NavStack.is-birdsEyeDebugging .NavStack-item {
398
+ border: 1px dashed blue;
399
+ }
@@ -0,0 +1,8 @@
1
+ import { precompileTemplate } from '@ember/template-compilation';
2
+
3
+ var stackable = precompileTemplate("<ToNavStack @layer={{this.layerIndex}} @item={{component this.routeComponent model=this.model controller=this}} @header={{component this.headerComponent model=this.model controller=this}} />\n\n{{outlet}}\n", {
4
+ strictMode: false
5
+ });
6
+
7
+ export { stackable as default };
8
+ //# sourceMappingURL=stackable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackable.js","sources":["../../src/templates/stackable.js"],"sourcesContent":["import { precompileTemplate } from '@ember/template-compilation';\n\nexport default precompileTemplate(\n `<ToNavStack\n @layer={{this.layerIndex}}\n @item={{component this.routeComponent model=this.model controller=this}}\n @header={{component this.headerComponent model=this.model controller=this}}\n/>\n\n{{outlet}}\n`,\n { strictMode: false },\n);\n"],"names":["precompileTemplate","strictMode"],"mappings":";;AAEA,gBAAeA,kBAAkB,CAAA,gNAAA,EAS/B;AAAEC,EAAAA,UAAU,EAAE;AAAM,CACtB,CAAC;;;;"}
@@ -1,10 +1,9 @@
1
1
  import { find } from '@ember/test-helpers';
2
2
 
3
- export function isInViewport(selectorOrElement) {
3
+ function isInViewport(selectorOrElement) {
4
4
  return getElementInViewportRatio(selectorOrElement) === 1;
5
5
  }
6
-
7
- export function getElementInViewportRatio(selectorOrElement) {
6
+ function getElementInViewportRatio(selectorOrElement) {
8
7
  let element = selectorOrElement;
9
8
  if (typeof selectorOrElement == 'string') {
10
9
  element = find(selectorOrElement);
@@ -16,17 +15,15 @@ export function getElementInViewportRatio(selectorOrElement) {
16
15
  let elementRect = element.getBoundingClientRect();
17
16
  let viewportRect = viewportEl.getBoundingClientRect();
18
17
  let topOutOfViewport = Math.max(0, viewportRect.top - elementRect.top);
19
- let bottomOutOfViewport = Math.max(
20
- 0,
21
- elementRect.bottom - viewportRect.bottom,
22
- );
18
+ let bottomOutOfViewport = Math.max(0, elementRect.bottom - viewportRect.bottom);
23
19
  let leftOutOfViewport = Math.max(0, viewportRect.left - elementRect.left);
24
20
  let rightOutOfViewport = Math.max(0, elementRect.right - viewportRect.right);
25
21
  let totalArea = elementRect.width * elementRect.height;
26
22
  let outOfViewportXAmount = leftOutOfViewport + rightOutOfViewport;
27
23
  let outOfViewportYAmount = topOutOfViewport + bottomOutOfViewport;
28
- let areaOutside =
29
- outOfViewportXAmount * elementRect.height +
30
- outOfViewportYAmount * (elementRect.width - outOfViewportXAmount);
24
+ let areaOutside = outOfViewportXAmount * elementRect.height + outOfViewportYAmount * (elementRect.width - outOfViewportXAmount);
31
25
  return (totalArea - areaOutside) / totalArea;
32
26
  }
27
+
28
+ export { getElementInViewportRatio, isInViewport };
29
+ //# sourceMappingURL=in-viewport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-viewport.js","sources":["../../src/test-support/in-viewport.js"],"sourcesContent":["import { find } from '@ember/test-helpers';\n\nexport function isInViewport(selectorOrElement) {\n return getElementInViewportRatio(selectorOrElement) === 1;\n}\n\nexport function getElementInViewportRatio(selectorOrElement) {\n let element = selectorOrElement;\n if (typeof selectorOrElement == 'string') {\n element = find(selectorOrElement);\n }\n if (!element) {\n return false;\n }\n let viewportEl = document.querySelector('#ember-testing');\n let elementRect = element.getBoundingClientRect();\n let viewportRect = viewportEl.getBoundingClientRect();\n let topOutOfViewport = Math.max(0, viewportRect.top - elementRect.top);\n let bottomOutOfViewport = Math.max(\n 0,\n elementRect.bottom - viewportRect.bottom,\n );\n let leftOutOfViewport = Math.max(0, viewportRect.left - elementRect.left);\n let rightOutOfViewport = Math.max(0, elementRect.right - viewportRect.right);\n let totalArea = elementRect.width * elementRect.height;\n let outOfViewportXAmount = leftOutOfViewport + rightOutOfViewport;\n let outOfViewportYAmount = topOutOfViewport + bottomOutOfViewport;\n let areaOutside =\n outOfViewportXAmount * elementRect.height +\n outOfViewportYAmount * (elementRect.width - outOfViewportXAmount);\n return (totalArea - areaOutside) / totalArea;\n}\n"],"names":["isInViewport","selectorOrElement","getElementInViewportRatio","element","find","viewportEl","document","querySelector","elementRect","getBoundingClientRect","viewportRect","topOutOfViewport","Math","max","top","bottomOutOfViewport","bottom","leftOutOfViewport","left","rightOutOfViewport","right","totalArea","width","height","outOfViewportXAmount","outOfViewportYAmount","areaOutside"],"mappings":";;AAEO,SAASA,YAAYA,CAACC,iBAAiB,EAAE;AAC9C,EAAA,OAAOC,yBAAyB,CAACD,iBAAiB,CAAC,KAAK,CAAC;AAC3D;AAEO,SAASC,yBAAyBA,CAACD,iBAAiB,EAAE;EAC3D,IAAIE,OAAO,GAAGF,iBAAiB;AAC/B,EAAA,IAAI,OAAOA,iBAAiB,IAAI,QAAQ,EAAE;AACxCE,IAAAA,OAAO,GAAGC,IAAI,CAACH,iBAAiB,CAAC;AACnC,EAAA;EACA,IAAI,CAACE,OAAO,EAAE;AACZ,IAAA,OAAO,KAAK;AACd,EAAA;AACA,EAAA,IAAIE,UAAU,GAAGC,QAAQ,CAACC,aAAa,CAAC,gBAAgB,CAAC;AACzD,EAAA,IAAIC,WAAW,GAAGL,OAAO,CAACM,qBAAqB,EAAE;AACjD,EAAA,IAAIC,YAAY,GAAGL,UAAU,CAACI,qBAAqB,EAAE;AACrD,EAAA,IAAIE,gBAAgB,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEH,YAAY,CAACI,GAAG,GAAGN,WAAW,CAACM,GAAG,CAAC;AACtE,EAAA,IAAIC,mBAAmB,GAAGH,IAAI,CAACC,GAAG,CAChC,CAAC,EACDL,WAAW,CAACQ,MAAM,GAAGN,YAAY,CAACM,MACpC,CAAC;AACD,EAAA,IAAIC,iBAAiB,GAAGL,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEH,YAAY,CAACQ,IAAI,GAAGV,WAAW,CAACU,IAAI,CAAC;AACzE,EAAA,IAAIC,kBAAkB,GAAGP,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEL,WAAW,CAACY,KAAK,GAAGV,YAAY,CAACU,KAAK,CAAC;EAC5E,IAAIC,SAAS,GAAGb,WAAW,CAACc,KAAK,GAAGd,WAAW,CAACe,MAAM;AACtD,EAAA,IAAIC,oBAAoB,GAAGP,iBAAiB,GAAGE,kBAAkB;AACjE,EAAA,IAAIM,oBAAoB,GAAGd,gBAAgB,GAAGI,mBAAmB;AACjE,EAAA,IAAIW,WAAW,GACbF,oBAAoB,GAAGhB,WAAW,CAACe,MAAM,GACzCE,oBAAoB,IAAIjB,WAAW,CAACc,KAAK,GAAGE,oBAAoB,CAAC;AACnE,EAAA,OAAO,CAACH,SAAS,GAAGK,WAAW,IAAIL,SAAS;AAC9C;;;;"}
@@ -0,0 +1,2 @@
1
+ export { getElementInViewportRatio, isInViewport } from './in-viewport.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,38 +1,21 @@
1
+ import { schedule, later } from '@ember/runloop';
2
+ import { macroCondition, isTesting } from '@embroider/macros';
3
+
1
4
  // Thanks ember-css-transitions
2
5
  // https://github.com/peec/ember-css-transitions/blob/master/addon/mixins/transition-mixin.js
3
6
 
4
- import { later, schedule } from '@ember/runloop';
5
- import RSVP from 'rsvp';
6
- import Ember from 'ember';
7
-
8
- /**
9
- * @private
10
- * T (period) = 1 / f (frequency)
11
- * TICK = 1 / 60hz = 0,01667s = 17ms
12
- */
13
7
  const TICK = 17;
14
-
15
- /**
16
- * @public
17
- * This function performs some logic after a browser repaint.
18
- * While on testing or if raf not available, use a run-loop friendly equivalent.
19
- * This also makes the tests work as expected.
20
- */
21
8
  function rAF(cb) {
22
- if (Ember.testing || !window.requestAnimationFrame) {
9
+ if (macroCondition(isTesting())) {
23
10
  return later(cb, TICK);
24
- } else {
25
- return window.requestAnimationFrame(cb);
26
11
  }
12
+ if (!window.requestAnimationFrame) {
13
+ return later(cb, TICK);
14
+ }
15
+ return window.requestAnimationFrame(cb);
27
16
  }
28
-
29
- /**
30
- * @public
31
- * Performs some logic after DOM changes have been flushed
32
- * and after a browser repaint.
33
- */
34
- export function nextTick() {
35
- return new RSVP.Promise((resolve) => {
17
+ function nextTick() {
18
+ return new Promise(resolve => {
36
19
  schedule('afterRender', () => {
37
20
  rAF(() => {
38
21
  resolve();
@@ -46,13 +29,13 @@ export function nextTick() {
46
29
  * Computes the time a css animation will take.
47
30
  * Uses `getComputedStyle` to get durations and delays.
48
31
  */
49
- export function computeTimeout(element) {
32
+ function computeTimeout(element) {
50
33
  let {
51
34
  transitionDuration,
52
35
  transitionDelay,
53
36
  animationDuration,
54
37
  animationDelay,
55
- animationIterationCount,
38
+ animationIterationCount
56
39
  } = window.getComputedStyle(element);
57
40
 
58
41
  // `getComputedStyle` returns durations and delays in the Xs format.
@@ -60,18 +43,10 @@ export function computeTimeout(element) {
60
43
  // numeral (0-9), a decimal point, or an exponent, it returns the value up to that point
61
44
  // and ignores that character and all succeeding characters.
62
45
 
63
- let maxDelay = Math.max(
64
- parseFloat(animationDelay),
65
- parseFloat(transitionDelay),
66
- );
67
- let maxDuration = Math.max(
68
- parseFloat(animationDuration) * parseFloat(animationIterationCount),
69
- parseFloat(transitionDuration),
70
- );
71
-
46
+ let maxDelay = Math.max(parseFloat(animationDelay), parseFloat(transitionDelay));
47
+ let maxDuration = Math.max(parseFloat(animationDuration) * parseFloat(animationIterationCount), parseFloat(transitionDuration));
72
48
  return (maxDelay + maxDuration) * 1000;
73
49
  }
74
-
75
50
  let setTransformImpl = function setTransformFunc(element, value) {
76
51
  element.style.transform = value;
77
52
  };
@@ -81,5 +56,7 @@ if (document.body.style.transform === undefined) {
81
56
  element.style.webkitTransform = value;
82
57
  };
83
58
  }
59
+ let setTransform = setTransformImpl;
84
60
 
85
- export let setTransform = setTransformImpl;
61
+ export { computeTimeout, nextTick, setTransform };
62
+ //# sourceMappingURL=animation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation.js","sources":["../../src/utils/animation.js"],"sourcesContent":["// Thanks ember-css-transitions\n// https://github.com/peec/ember-css-transitions/blob/master/addon/mixins/transition-mixin.js\n\nimport { later, schedule } from '@ember/runloop';\nimport { macroCondition, isTesting } from '@embroider/macros';\n\nconst TICK = 17;\n\nfunction rAF(cb) {\n if (macroCondition(isTesting())) {\n return later(cb, TICK);\n }\n if (!window.requestAnimationFrame) {\n return later(cb, TICK);\n }\n return window.requestAnimationFrame(cb);\n}\n\nexport function nextTick() {\n return new Promise((resolve) => {\n schedule('afterRender', () => {\n rAF(() => {\n resolve();\n });\n });\n });\n}\n\n/**\n * @private\n * Computes the time a css animation will take.\n * Uses `getComputedStyle` to get durations and delays.\n */\nexport function computeTimeout(element) {\n let {\n transitionDuration,\n transitionDelay,\n animationDuration,\n animationDelay,\n animationIterationCount,\n } = window.getComputedStyle(element);\n\n // `getComputedStyle` returns durations and delays in the Xs format.\n // Conveniently if `parseFloat` encounters a character other than a sign (+ or -),\n // numeral (0-9), a decimal point, or an exponent, it returns the value up to that point\n // and ignores that character and all succeeding characters.\n\n let maxDelay = Math.max(\n parseFloat(animationDelay),\n parseFloat(transitionDelay),\n );\n let maxDuration = Math.max(\n parseFloat(animationDuration) * parseFloat(animationIterationCount),\n parseFloat(transitionDuration),\n );\n\n return (maxDelay + maxDuration) * 1000;\n}\n\nlet setTransformImpl = function setTransformFunc(element, value) {\n element.style.transform = value;\n};\n// Android <= 4.x does not support element.style.transform\nif (document.body.style.transform === undefined) {\n setTransformImpl = function setTransformFunc(element, value) {\n element.style.webkitTransform = value;\n };\n}\n\nexport let setTransform = setTransformImpl;\n"],"names":["TICK","rAF","cb","macroCondition","isTesting","later","window","requestAnimationFrame","nextTick","Promise","resolve","schedule","computeTimeout","element","transitionDuration","transitionDelay","animationDuration","animationDelay","animationIterationCount","getComputedStyle","maxDelay","Math","max","parseFloat","maxDuration","setTransformImpl","setTransformFunc","value","style","transform","document","body","undefined","webkitTransform","setTransform"],"mappings":";;;AAAA;AACA;;AAKA,MAAMA,IAAI,GAAG,EAAE;AAEf,SAASC,GAAGA,CAACC,EAAE,EAAE;AACf,EAAA,IAAIC,cAAc,CAACC,SAAS,EAAE,CAAC,EAAE;AAC/B,IAAA,OAAOC,KAAK,CAACH,EAAE,EAAEF,IAAI,CAAC;AACxB,EAAA;AACA,EAAA,IAAI,CAACM,MAAM,CAACC,qBAAqB,EAAE;AACjC,IAAA,OAAOF,KAAK,CAACH,EAAE,EAAEF,IAAI,CAAC;AACxB,EAAA;AACA,EAAA,OAAOM,MAAM,CAACC,qBAAqB,CAACL,EAAE,CAAC;AACzC;AAEO,SAASM,QAAQA,GAAG;AACzB,EAAA,OAAO,IAAIC,OAAO,CAAEC,OAAO,IAAK;IAC9BC,QAAQ,CAAC,aAAa,EAAE,MAAM;AAC5BV,MAAAA,GAAG,CAAC,MAAM;AACRS,QAAAA,OAAO,EAAE;AACX,MAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ,EAAA,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASE,cAAcA,CAACC,OAAO,EAAE;EACtC,IAAI;IACFC,kBAAkB;IAClBC,eAAe;IACfC,iBAAiB;IACjBC,cAAc;AACdC,IAAAA;AACF,GAAC,GAAGZ,MAAM,CAACa,gBAAgB,CAACN,OAAO,CAAC;;AAEpC;AACA;AACA;AACA;;AAEA,EAAA,IAAIO,QAAQ,GAAGC,IAAI,CAACC,GAAG,CACrBC,UAAU,CAACN,cAAc,CAAC,EAC1BM,UAAU,CAACR,eAAe,CAC5B,CAAC;EACD,IAAIS,WAAW,GAAGH,IAAI,CAACC,GAAG,CACxBC,UAAU,CAACP,iBAAiB,CAAC,GAAGO,UAAU,CAACL,uBAAuB,CAAC,EACnEK,UAAU,CAACT,kBAAkB,CAC/B,CAAC;AAED,EAAA,OAAO,CAACM,QAAQ,GAAGI,WAAW,IAAI,IAAI;AACxC;AAEA,IAAIC,gBAAgB,GAAG,SAASC,gBAAgBA,CAACb,OAAO,EAAEc,KAAK,EAAE;AAC/Dd,EAAAA,OAAO,CAACe,KAAK,CAACC,SAAS,GAAGF,KAAK;AACjC,CAAC;AACD;AACA,IAAIG,QAAQ,CAACC,IAAI,CAACH,KAAK,CAACC,SAAS,KAAKG,SAAS,EAAE;AAC/CP,EAAAA,gBAAgB,GAAG,SAASC,gBAAgBA,CAACb,OAAO,EAAEc,KAAK,EAAE;AAC3Dd,IAAAA,OAAO,CAACe,KAAK,CAACK,eAAe,GAAGN,KAAK;EACvC,CAAC;AACH;AAEO,IAAIO,YAAY,GAAGT;;;;"}
@@ -1,41 +1,36 @@
1
1
  import Hammer from 'hammerjs';
2
- const { DIRECTION_RIGHT } = Hammer;
2
+ import { macroCondition, isTesting } from '@embroider/macros';
3
+
4
+ const {
5
+ DIRECTION_RIGHT
6
+ } = Hammer;
3
7
  const FIELD_REGEXP = /input|textarea|select/i;
4
- import { DEBUG } from '@glimmer/env';
5
8
 
6
9
  /* This recognizer subclasses the Pan recognizer and adds the constraint that the initial touch
7
10
  * must be in the validLeftAreaPercent portion of the screen.
8
11
  */
9
- export default class BackSwipeRecognizer extends Hammer.Pan {
12
+ class BackSwipeRecognizer extends Hammer.Pan {
10
13
  constructor(options) {
11
14
  super(options);
12
15
  this.options = Object.assign({}, this.defaults, options || {});
13
- this.captureClick = (ev) => {
16
+ this.captureClick = ev => {
14
17
  ev.stopPropagation(); // Stop the click from being propagated.
15
- this.manager.element.removeEventListener(
16
- 'click',
17
- this.captureClick,
18
- true,
19
- );
18
+ this.manager.element.removeEventListener('click', this.captureClick, true);
20
19
  };
21
20
  }
22
-
23
21
  defaults = {
24
22
  enable: true,
25
23
  event: 'pan',
26
24
  threshold: 10,
27
25
  pointers: 1,
28
26
  direction: DIRECTION_RIGHT,
29
- validLeftAreaPercent: 33,
27
+ validLeftAreaPercent: 33
30
28
  };
31
-
32
29
  recognize(inputData) {
33
30
  if (inputData.isFirst) {
34
- this.isInitialTouchInValidArea =
35
- this.checkInitialTouchInValidArea(inputData);
31
+ this.isInitialTouchInValidArea = this.checkInitialTouchInValidArea(inputData);
36
32
  }
37
- let isOverElementThatPreventsScrollingInteraction =
38
- this.shouldPreventScrollingInteraction(inputData);
33
+ let isOverElementThatPreventsScrollingInteraction = this.shouldPreventScrollingInteraction(inputData);
39
34
  if (isOverElementThatPreventsScrollingInteraction) {
40
35
  this.manager.stop();
41
36
  return;
@@ -48,55 +43,40 @@ export default class BackSwipeRecognizer extends Hammer.Pan {
48
43
  }, 0);
49
44
  }
50
45
  }
51
-
52
46
  shouldPreventScrollingInteraction(inputData) {
53
- let { target } = inputData;
54
- return (
55
- inputData.isFirst &&
56
- ((target && target.tagName.match(FIELD_REGEXP)) ||
57
- (target && target.hasAttribute('data-prevent-scrolling')))
58
- );
47
+ let {
48
+ target
49
+ } = inputData;
50
+ return inputData.isFirst && (target && target.tagName.match(FIELD_REGEXP) || target && target.hasAttribute('data-prevent-scrolling'));
59
51
  }
60
-
61
52
  captureGhostClickIfNeeded(inputData) {
62
- if (
63
- inputData.srcEvent.type === 'mouseup' &&
64
- this.state & Hammer.STATE_BEGAN
65
- ) {
53
+ if (inputData.srcEvent.type === 'mouseup' && this.state & Hammer.STATE_BEGAN) {
66
54
  this.manager.element.addEventListener('click', this.captureClick, true);
67
55
  setTimeout(() => {
68
- this.manager.element.removeEventListener(
69
- 'click',
70
- this.captureClick,
71
- true,
72
- );
56
+ this.manager.element.removeEventListener('click', this.captureClick, true);
73
57
  }, 0);
74
58
  }
75
59
  }
76
-
77
- attrTest(input) {
78
- return this.isInitialTouchInValidArea && super.attrTest(input);
79
- }
80
-
81
60
  reset() {
82
61
  this.isInitialTouchInValidArea = undefined;
83
62
  }
84
-
85
63
  checkInitialTouchInValidArea(inputData) {
86
- if (DEBUG) {
64
+ if (macroCondition(isTesting())) {
87
65
  let testingEl = document.querySelector('#ember-testing');
88
66
  if (testingEl) {
89
- let minValidX = testingEl.getBoundingClientRect().left;
90
- let maxValidX =
91
- minValidX +
92
- testingEl.clientWidth * (this.options.validLeftAreaPercent / 100);
93
- return (
94
- inputData.center.x >= minValidX && inputData.center.x <= maxValidX
95
- );
67
+ let testingRect = testingEl.getBoundingClientRect();
68
+ let minValidX = testingRect.left;
69
+ let maxValidX = minValidX + testingEl.clientWidth * (this.options.validLeftAreaPercent / 100);
70
+ return inputData.center.x >= minValidX && inputData.center.x <= maxValidX;
96
71
  }
97
72
  }
98
- let maxValidX =
99
- window.innerWidth * (this.options.validLeftAreaPercent / 100);
73
+ let maxValidX = window.innerWidth * (this.options.validLeftAreaPercent / 100);
100
74
  return inputData.center.x <= maxValidX;
101
75
  }
76
+ attrTest(input) {
77
+ return this.isInitialTouchInValidArea && super.attrTest(input);
78
+ }
102
79
  }
80
+
81
+ export { BackSwipeRecognizer as default };
82
+ //# sourceMappingURL=back-swipe-recognizer.js.map