@creative-web-solution/front-library 7.0.7 → 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 (141) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/DOM/Class.ts +10 -12
  3. package/DOM/DocumentSize.ts +3 -1
  4. package/DOM/Filter.ts +0 -2
  5. package/DOM/Index.ts +1 -3
  6. package/DOM/Manipulation.ts +0 -3
  7. package/DOM/Matrix.ts +12 -12
  8. package/DOM/Offset.ts +4 -5
  9. package/DOM/OuterSize.ts +12 -12
  10. package/DOM/PageToDOM.ts +2 -2
  11. package/DOM/Position.ts +3 -3
  12. package/DOM/Size.ts +3 -7
  13. package/DOM/StrToDOM.ts +0 -1
  14. package/DOM/Styles.ts +3 -12
  15. package/DOM/Traversing.ts +0 -6
  16. package/DOM/WindowScroll.ts +3 -1
  17. package/DOM/WindowSize.ts +3 -1
  18. package/DOM/Wrap.ts +0 -1
  19. package/Events/DeviceOrientation.ts +27 -31
  20. package/Events/EventsManager.ts +10 -25
  21. package/Events/Gesture.ts +36 -37
  22. package/Events/HistoryController.ts +11 -17
  23. package/Events/ImageLoad.ts +35 -19
  24. package/Events/IntersectObserver.ts +15 -19
  25. package/Events/KeyboardHandler.ts +10 -8
  26. package/Events/MediaQueriesEvents.ts +53 -51
  27. package/Events/OnAnimationEnd.ts +2 -3
  28. package/Events/OnTransitionEnd.ts +3 -3
  29. package/Events/PubSub.ts +5 -8
  30. package/Events/TouchHover.ts +18 -21
  31. package/Events/WindowEvents.ts +26 -30
  32. package/Helpers/Colors.ts +7 -23
  33. package/Helpers/Cookie.ts +5 -12
  34. package/Helpers/Coordinates.ts +0 -7
  35. package/Helpers/Debounce.ts +3 -7
  36. package/Helpers/Defer.ts +1 -1
  37. package/Helpers/GetValue.ts +0 -2
  38. package/Helpers/Insert.ts +0 -1
  39. package/Helpers/Sequential.ts +0 -2
  40. package/Helpers/Slice.ts +0 -3
  41. package/Helpers/Throttle.ts +0 -1
  42. package/Helpers/TransitionHelpers.ts +8 -6
  43. package/Helpers/Type.ts +1 -14
  44. package/Helpers/Unique.ts +3 -3
  45. package/Helpers/UrlParser.ts +13 -22
  46. package/Helpers/Wait.ts +1 -1
  47. package/Modules/Accordion/Tab.ts +18 -16
  48. package/Modules/Accordion/index.ts +24 -16
  49. package/Modules/Autocomplete.ts +95 -101
  50. package/Modules/DragSlider.ts +72 -63
  51. package/Modules/GlobalState.ts +60 -53
  52. package/Modules/LoadGMap.ts +4 -7
  53. package/Modules/Notifications/Notification.ts +28 -32
  54. package/Modules/Notifications/index.ts +43 -36
  55. package/Modules/Popin/Popin.ts +100 -110
  56. package/Modules/Popin/PopinAccessibility.ts +8 -8
  57. package/Modules/Popin/PopinBackground.ts +11 -11
  58. package/Modules/Popin/PopinController.ts +23 -29
  59. package/Modules/Popin/Tools.ts +18 -19
  60. package/Modules/QuickTemplate.ts +4 -6
  61. package/Modules/ScrollSnap.ts +110 -104
  62. package/Modules/SkinCheckbox.ts +51 -37
  63. package/Modules/SkinFile.ts +62 -52
  64. package/Modules/SkinRadio.ts +62 -42
  65. package/Modules/SkinSelect.ts +116 -100
  66. package/Modules/Slider/Slide.ts +49 -52
  67. package/Modules/Slider/Slider.ts +100 -136
  68. package/Modules/Slider/SliderControls.ts +60 -59
  69. package/Modules/Tabs/Tab.ts +27 -23
  70. package/Modules/Tabs/index.ts +35 -25
  71. package/Modules/Validator/Date.ts +2 -1
  72. package/Modules/Validator/Equals.ts +1 -1
  73. package/Modules/Validator/Internal/Input.ts +370 -0
  74. package/Modules/Validator/Internal/InputValidator.ts +99 -0
  75. package/Modules/Validator/Internal/ValidatorFunctionsController.ts +58 -0
  76. package/Modules/Validator/Max.ts +1 -1
  77. package/Modules/Validator/Min.ts +1 -1
  78. package/Modules/Validator/MultiRequired.ts +5 -5
  79. package/Modules/Validator/Number.ts +1 -0
  80. package/Modules/Validator/Pattern.ts +1 -1
  81. package/Modules/Validator/Recaptcha.ts +1 -0
  82. package/Modules/Validator/Required.ts +3 -2
  83. package/Modules/Validator/ServerCheck.ts +23 -15
  84. package/Modules/Validator/Tools/GetQueryFromForm.ts +1 -6
  85. package/Modules/Validator/Tools/IsDate.ts +2 -3
  86. package/Modules/Validator/Tools/IsEmail.ts +2 -5
  87. package/Modules/Validator/Tools/IsEmpty.ts +0 -2
  88. package/Modules/Validator/Tools/IsNumber.ts +0 -2
  89. package/Modules/Validator/Tools/IsUrl.ts +1 -3
  90. package/Modules/Validator/Tools/Label.ts +5 -15
  91. package/Modules/Validator/Tools/RadioButton.ts +4 -10
  92. package/Modules/Validator/Url.ts +1 -0
  93. package/Modules/Validator/index.ts +36 -36
  94. package/Modules/YouTubePlayer.ts +18 -16
  95. package/README.md +1 -1
  96. package/Types/Accordion.d.ts +36 -0
  97. package/Types/Autocomplete.d.ts +95 -0
  98. package/Types/DOM.d.ts +69 -0
  99. package/Types/DragSlider.d.ts +56 -0
  100. package/Types/EventsHelpers.d.ts +390 -0
  101. package/Types/GLImageTransition.d.ts +47 -43
  102. package/Types/GlobalState.d.ts +9 -0
  103. package/Types/Helpers.d.ts +30 -0
  104. package/Types/Notifications.d.ts +48 -44
  105. package/Types/Popin.d.ts +95 -0
  106. package/Types/ScrollSnap.d.ts +66 -0
  107. package/Types/SkinCheckbox.d.ts +26 -0
  108. package/Types/SkinFile.d.ts +38 -0
  109. package/Types/SkinRadio.d.ts +28 -0
  110. package/Types/SkinSelect.d.ts +59 -0
  111. package/Types/Slider.d.ts +106 -0
  112. package/Types/Tabs.d.ts +26 -0
  113. package/Types/Validator.d.ts +72 -0
  114. package/Types/YouTubePlayer.d.ts +27 -0
  115. package/Types/index.d.ts +22 -21
  116. package/WebGL/GLImageTransition/GLImageTransition.ts +83 -80
  117. package/WebGL/GLImageTransition/Presets/Cellular.ts +11 -11
  118. package/WebGL/GLImageTransition/Presets/Fade.ts +2 -3
  119. package/WebGL/GLImageTransition/Presets/HorizontalMovingGrid.ts +9 -9
  120. package/WebGL/GLImageTransition/Presets/PresetSample.ts +11 -9
  121. package/WebGL/GLImageTransition/Presets/Solarisation.ts +7 -12
  122. package/package.json +1 -1
  123. package/Modules/Template.ts +0 -209
  124. package/Types/AccordionTypes.d.ts +0 -29
  125. package/Types/AutocompleteTypes.d.ts +0 -85
  126. package/Types/DOMTypes.d.ts +0 -62
  127. package/Types/DragSliderTypes.d.ts +0 -52
  128. package/Types/EventsHelpersTypes.d.ts +0 -370
  129. package/Types/GlobalStateTypes.d.ts +0 -5
  130. package/Types/HelpersTypes.d.ts +0 -23
  131. package/Types/MediaPreloaderTypes.d.ts +0 -12
  132. package/Types/PopinTypes.d.ts +0 -83
  133. package/Types/ScrollSnapTypes.d.ts +0 -62
  134. package/Types/SkinCheckboxTypes.d.ts +0 -23
  135. package/Types/SkinFileTypes.d.ts +0 -34
  136. package/Types/SkinRadioTypes.d.ts +0 -24
  137. package/Types/SkinSelectTypes.d.ts +0 -48
  138. package/Types/SliderTypes.d.ts +0 -97
  139. package/Types/TabsTypes.d.ts +0 -22
  140. package/Types/ValidatorTypes.d.ts +0 -61
  141. package/Types/YouTubePlayerTypes.d.ts +0 -23
@@ -4,44 +4,45 @@ import { extend } from '../../Helpers/Extend';
4
4
  import { strToDOM } from '../../DOM/StrToDOM';
5
5
  import { append } from '../../DOM/Manipulation';
6
6
  import { windowSize } from '../../DOM/WindowSize';
7
- import template from '../Template';
8
7
  import PopinBackground from './PopinBackground';
9
8
  import PopinAccessibility from './PopinAccessibility';
10
9
  import { defaultOptions, CLICK_EVENT_NAME } from './Tools';
10
+ import quickTemplate from '../QuickTemplate';
11
11
 
12
12
 
13
13
  /**
14
14
  * Create a simple popin
15
- * @class Popin
16
15
  *
17
16
  * @see extra/modules/popin.md for details.
18
17
  *
19
- * @example let popin = new Popin( popinOptions );
18
+ * @example
19
+ * ```ts
20
+ * let popin = new Popin( popinOptions );
20
21
  * popin.load( 'my-url.html', {method: 'post'} );
22
+ * ```
21
23
  */
22
24
  export default class Popin {
23
25
 
24
26
  #loadingPromise: Promise<void> | null = null;
25
- #loaderOpened: boolean = false;
26
- #popinOpened: boolean = false;
27
+ #loaderOpened = false;
28
+ #popinOpened = false;
27
29
  #$loader: HTMLElement;
28
- #templates: PopinTemplatesOptionsType;
29
- #selectors: PopinSelectorsOptionsType;
30
- #animations: PopinAnimationsOptionsType;
31
- #errorTpl;
30
+ #templates: FLib.Popin.TemplatesOptions;
31
+ #selectors: FLib.Popin.SelectorsOptions;
32
+ #animations: FLib.Popin.AnimationsOptions;
32
33
  #$popinContent: HTMLElement;
33
34
  #$initialFocus;
34
35
  #isInlinePopin: boolean;
35
36
  #focusControl: PopinAccessibility;
36
37
  #keyboardControls;
37
- #options: PopinOptionsType;
38
- #controllerOptions: PopinControllerOptionsType | undefined;
38
+ #options: FLib.Popin.Options;
39
+ #controllerOptions: FLib.Popin.ControllerOptions | undefined;
39
40
  #backgroundLayer: PopinBackground;
40
41
  #tick;
41
42
  #$popin: HTMLElement;
42
43
 
43
44
 
44
- constructor ( userOptions: PopinOptionsType = {}, $popin?: HTMLElement, _controllerOptions?: PopinControllerOptionsType ) {
45
+ constructor ( userOptions: FLib.Popin.OptionsInit = {}, $popin?: HTMLElement, _controllerOptions?: FLib.Popin.ControllerOptions ) {
45
46
 
46
47
  if ( !( "AbortController" in window ) ) {
47
48
  throw 'This plugin uses fecth and AbortController. You may need to add a polyfill for this browser.';
@@ -51,8 +52,8 @@ export default class Popin {
51
52
  this.#controllerOptions = _controllerOptions;
52
53
 
53
54
  if ( _controllerOptions ) {
54
- this.#options = userOptions;
55
- this.#backgroundLayer = _controllerOptions.background!;
55
+ this.#options = userOptions as FLib.Popin.Options;
56
+ this.#backgroundLayer = _controllerOptions.background;
56
57
  }
57
58
  else {
58
59
  this.#options = extend( defaultOptions, userOptions );
@@ -60,18 +61,17 @@ export default class Popin {
60
61
  }
61
62
 
62
63
 
63
- this.#templates = this.#options.templates!;
64
- this.#selectors = this.#options.selectors!;
65
- this.#animations = this.#options.animations!;
64
+ this.#templates = this.#options.templates;
65
+ this.#selectors = this.#options.selectors;
66
+ this.#animations = this.#options.animations;
66
67
  // Add loader in the popin
67
- this.#$loader = strToDOM( this.#templates.popinLoader! ) as HTMLElement;
68
+ this.#$loader = strToDOM( this.#templates.popinLoader ) as HTMLElement;
68
69
 
69
70
  if ( $popin ) {
70
71
  this.#$popin = $popin;
71
72
  }
72
73
  else {
73
- const popinHtml = this.#templates.popin!;
74
- this.#errorTpl = template( this.#templates.errorMessage! );
74
+ const popinHtml = this.#templates.popin;
75
75
 
76
76
  // Add popin template
77
77
  this.#$popin = strToDOM( popinHtml ) as HTMLElement;
@@ -81,7 +81,7 @@ export default class Popin {
81
81
  }
82
82
 
83
83
  // Init the element that will receive the content
84
- this.#$popinContent = this.#$popin.querySelector( this.#selectors.popinContent! ) || this.#$popin;
84
+ this.#$popinContent = this.#$popin.querySelector( this.#selectors.popinContent ) || this.#$popin;
85
85
 
86
86
  // Keyboard TAB focus control
87
87
  this.#focusControl = new PopinAccessibility( this.#$popin );
@@ -133,7 +133,7 @@ export default class Popin {
133
133
  }
134
134
 
135
135
 
136
- private addAccessibility() {
136
+ #addAccessibility = (): void => {
137
137
  this.#focusControl.refresh();
138
138
  this.#focusControl.toggleTabIndexNavigation( true );
139
139
  this.#focusControl.focusFirstElement();
@@ -143,23 +143,23 @@ export default class Popin {
143
143
  // ------------------------------ LOADER
144
144
 
145
145
 
146
- private openLoader() {
146
+ #openLoader = (): Promise<any> => {
147
147
  if ( this.#loaderOpened ) {
148
148
  return Promise.resolve();
149
149
  }
150
150
 
151
- return this.#animations.openLoader!( this.#$loader ).then( () => {
151
+ return this.#animations.openLoader( this.#$loader ).then( () => {
152
152
  this.#loaderOpened = true;
153
153
  } );
154
154
  }
155
155
 
156
156
 
157
- private closeLoader() {
157
+ #closeLoader = (): Promise<void> => {
158
158
  if ( !this.#loaderOpened ) {
159
159
  return Promise.resolve();
160
160
  }
161
161
 
162
- return this.#animations.closeLoader!( this.#$loader ).then( () => {
162
+ return this.#animations.closeLoader( this.#$loader ).then( () => {
163
163
  this.#loaderOpened = false;
164
164
  } );
165
165
  }
@@ -168,23 +168,23 @@ export default class Popin {
168
168
  // ------------------------------ POPIN SHOW/HIDE
169
169
 
170
170
 
171
- private showBackgroundLayer() {
171
+ #showBackgroundLayer = (): Promise<void> => {
172
172
  return this.#backgroundLayer ? this.#backgroundLayer.open() : Promise.resolve();
173
173
  }
174
174
 
175
175
 
176
- private hideBackgroundLayer() {
176
+ #hideBackgroundLayer = (): Promise<void> => {
177
177
  return this.#backgroundLayer ? this.#backgroundLayer.close() : Promise.resolve();
178
178
  }
179
179
 
180
180
 
181
- private openPopin() {
181
+ #openPopin = (): Promise<void> => {
182
182
  if ( this.#popinOpened ) {
183
183
  return Promise.resolve();
184
184
  }
185
185
 
186
186
  this.#$initialFocus = document.activeElement;
187
- this.resize();
187
+ this.#resize();
188
188
 
189
189
  if ( this.#options.autoResize ) {
190
190
  on( window, {
@@ -193,12 +193,12 @@ export default class Popin {
193
193
  } );
194
194
  }
195
195
 
196
- return this.showBackgroundLayer()
196
+ return this.#showBackgroundLayer()
197
197
  .then( () => {
198
198
  if ( this.#isInlinePopin ) {
199
- this.addAccessibility();
199
+ this.#addAccessibility();
200
200
  }
201
- return this.#animations.initOpenPopin!( this.#$popin );
201
+ return this.#animations.initOpenPopin( this.#$popin );
202
202
  } )
203
203
  .then( () => {
204
204
  if ( this.#options.onOpen ) {
@@ -206,7 +206,7 @@ export default class Popin {
206
206
  }
207
207
  } )
208
208
  .then( () => {
209
- return this.#animations.openPopin!( this.#$popin );
209
+ return this.#animations.openPopin( this.#$popin );
210
210
  } )
211
211
  .then( () => {
212
212
  this.#popinOpened = true;
@@ -214,7 +214,7 @@ export default class Popin {
214
214
  }
215
215
 
216
216
 
217
- private closePopin() {
217
+ #closePopin = (): Promise<void> => {
218
218
  if ( !this.#popinOpened ) {
219
219
  return Promise.resolve();
220
220
  }
@@ -225,8 +225,8 @@ export default class Popin {
225
225
  } );
226
226
 
227
227
  return this.#animations
228
- .closePopin!( this.#$popin )
229
- .then( this.hideBackgroundLayer.bind( this ) )
228
+ .closePopin( this.#$popin )
229
+ .then( this.#hideBackgroundLayer.bind( this ) )
230
230
  .then( () => {
231
231
  if ( this.#options.onClose ) {
232
232
  return this.#options.onClose.call( this, this.#$popin );
@@ -236,7 +236,7 @@ export default class Popin {
236
236
  this.#popinOpened = false;
237
237
 
238
238
  if ( !this.#isInlinePopin ) {
239
- this.clearPopin();
239
+ this.#clearPopin();
240
240
  }
241
241
  this.#$initialFocus.focus();
242
242
  });
@@ -246,35 +246,35 @@ export default class Popin {
246
246
  // ------------------------------ POPIN CONTENT
247
247
 
248
248
 
249
- private resizeRAF() {
250
- window.requestAnimationFrame( this.resize.bind( this ) );
249
+ #resizeRAF = (): void => {
250
+ window.requestAnimationFrame( this.#resize.bind( this ) );
251
251
  }
252
252
 
253
253
 
254
- private setPopin( resp: string ) {
254
+ #setPopin = ( resp: string ): Promise<void> => {
255
255
  this.#$popinContent.innerHTML = resp;
256
256
 
257
- return this.#options.onLoad!( this.#$popin ).then( this.resizeRAF.bind( this ) );
257
+ return this.#options.onLoad( this.#$popin ).then( this.#resizeRAF.bind( this ) );
258
258
  }
259
259
 
260
260
 
261
- private clearPopin() {
261
+ #clearPopin = (): void => {
262
262
  this.#$popinContent.innerHTML = '';
263
- this.resizeRAF();
263
+ this.#resizeRAF();
264
264
  this.#focusControl.toggleTabIndexNavigation( false );
265
265
  }
266
266
 
267
267
 
268
- private setPopinError( message: string ) {
269
- this.#$popinContent.innerHTML = this.#errorTpl({ "message": message });
270
- this.resizeRAF();
268
+ #setPopinError = ( message: string ): void => {
269
+ this.#$popinContent.innerHTML = quickTemplate( this.#templates.errorMessage, { "message": message } );
270
+ this.#resizeRAF();
271
271
  }
272
272
 
273
273
 
274
274
  // ------------------------------ POPIN LOADING
275
275
 
276
276
 
277
- private _load( url: string, type: PopinResponseType, userRequestOptions?: RequestInit ): Promise<void> {
277
+ #_load = ( url: string, type: FLib.Popin.ResponseType, userRequestOptions?: RequestInit ): Promise<void> => {
278
278
  let requestOptions: RequestInit ;
279
279
 
280
280
  this.#loadingPromise = new Promise( ( resolve, reject ) => {
@@ -288,8 +288,8 @@ export default class Popin {
288
288
  requestOptions = extend( {}, requestOptions, userRequestOptions );
289
289
  }
290
290
 
291
- this.openPopin()
292
- .then( () => this.openLoader() )
291
+ this.#openPopin()
292
+ .then( () => this.#openLoader() )
293
293
  .then( () => {
294
294
  fetch(
295
295
  url,
@@ -300,8 +300,7 @@ export default class Popin {
300
300
  return response;
301
301
  }
302
302
  else {
303
- let error = new Error( response.statusText );
304
- /** @ts-expect-error */
303
+ const error: Error & { response? } = new Error( response.statusText );
305
304
  error.response = response;
306
305
  throw error;
307
306
  }
@@ -331,31 +330,31 @@ export default class Popin {
331
330
  } )
332
331
  .then(
333
332
  data => {
334
- let [ body, response ] = data;
335
- let isHttpError = response.status < 200 || response.status >= 300;
336
- let normResponse = this.#options.normalize!( body, response, isHttpError );
333
+ const [ body, response ] = data;
334
+ const isHttpError = response.status < 200 || response.status >= 300;
335
+ const normResponse = this.#options.normalize( body, response, isHttpError );
337
336
 
338
337
  if ( normResponse.success ) {
339
- this.setPopin( normResponse.data ).then( () => {
340
- this.addAccessibility();
338
+ this.#setPopin( normResponse.data ).then( () => {
339
+ this.#addAccessibility();
341
340
  resolve();
342
341
  } );
343
342
  }
344
343
  else {
345
- this.setPopinError( this.#options.errorMessage! );
346
- this.addAccessibility();
344
+ this.#setPopinError( this.#options.errorMessage );
345
+ this.#addAccessibility();
347
346
  reject();
348
347
  }
349
348
  },
350
349
  err => {
351
- this.setPopinError( this.#options.errorMessage! );
352
- this.addAccessibility();
350
+ this.#setPopinError( this.#options.errorMessage );
351
+ this.#addAccessibility();
353
352
  reject( err );
354
353
  }
355
354
  )
356
355
  .finally( () => {
357
356
  this.#loadingPromise = null;
358
- this.closeLoader();
357
+ this.#closeLoader();
359
358
  } );
360
359
  })
361
360
  .catch( err => reject( err ) );
@@ -366,15 +365,15 @@ export default class Popin {
366
365
  }
367
366
 
368
367
 
369
- private _loadLink( $link: HTMLAnchorElement ) {
370
- return this._load(
368
+ #_loadLink = ( $link: HTMLAnchorElement ): Promise<void> => {
369
+ return this.#_load(
371
370
  $link.href,
372
- this.#options.setLinkResponseType!( $link.href, $link ),
371
+ this.#options.setLinkResponseType( $link.href, $link ),
373
372
  );
374
373
  }
375
374
 
376
375
 
377
- private _loadForm( $form: HTMLFormElement ) {
376
+ #_loadForm = ( $form: HTMLFormElement ): Promise<void> => {
378
377
  let validationResult;
379
378
 
380
379
  if ( this.#options.checkValidity ) {
@@ -389,9 +388,9 @@ export default class Popin {
389
388
 
390
389
  return validationProm
391
390
  .then( () => {
392
- return this._load(
391
+ return this.#_load(
393
392
  $form.action,
394
- this.#options.setFormResponseType!( $form ),
393
+ this.#options.setFormResponseType( $form ),
395
394
  {
396
395
  "body": new FormData( $form ),
397
396
  "method": $form.method || 'POST'
@@ -400,17 +399,17 @@ export default class Popin {
400
399
  }
401
400
 
402
401
 
403
- #openPopinHandler = ( e ) => {
402
+ #openPopinHandler = ( e: Event ): void => {
404
403
  e.preventDefault();
405
404
 
406
405
  if ( this.#loadingPromise ) {
407
406
  return;
408
407
  }
409
408
 
410
- const $target = e.target;
409
+ const $target = e.target as HTMLElement;
411
410
 
412
411
  if ( $target.nodeName === 'FORM' ) {
413
- this._loadForm( $target );
412
+ this.#_loadForm( $target as HTMLFormElement );
414
413
  return;
415
414
  }
416
415
 
@@ -420,29 +419,29 @@ export default class Popin {
420
419
  return;
421
420
  }
422
421
 
423
- this._loadLink( $target );
422
+ this.#_loadLink( $target as HTMLAnchorElement );
424
423
  }
425
424
 
426
425
 
427
- #closePopinHandler = ( e ) => {
426
+ #closePopinHandler = ( e: Event ): void => {
428
427
  e.preventDefault();
429
428
 
430
429
  if ( this.#controllerOptions ) {
431
430
  return this.#controllerOptions.controller.close();
432
431
  }
433
432
 
434
- this.closePopin();
433
+ this.#closePopin();
435
434
  }
436
435
 
437
436
 
438
- private resize() {
437
+ #resize = (): void => {
439
438
  if ( !this.#options.autoResize ) {
440
439
  return;
441
440
  }
442
441
 
443
442
  const viewportSize = windowSize();
444
443
 
445
- const maxHeight = viewportSize.height - this.#options.marginHeight! * 2;
444
+ const maxHeight = viewportSize.height - this.#options.marginHeight * 2;
446
445
 
447
446
  this.#$popinContent.style.maxHeight = `${ maxHeight }px`;
448
447
 
@@ -450,123 +449,114 @@ export default class Popin {
450
449
  }
451
450
 
452
451
 
453
- #resizeHandler = () => {
452
+ #resizeHandler = (): void => {
454
453
  if ( this.#tick ) {
455
454
  return;
456
455
  }
457
456
 
458
457
  this.#tick = true;
459
458
 
460
- window.requestAnimationFrame( this.resize.bind( this ) );
459
+ window.requestAnimationFrame( this.#resize.bind( this ) );
461
460
  }
462
461
 
463
462
 
464
463
  /**
465
464
  * Load a page from a link and display the result it in the popin
466
- *
467
- * @param $link
468
465
  */
469
466
  loadLink( $link: HTMLAnchorElement ): Promise<void> {
470
467
  if ( this.#loadingPromise ) {
471
468
  return this.#loadingPromise;
472
469
  }
473
470
 
474
- return this._loadLink( $link );
475
- };
471
+ return this.#_loadLink( $link );
472
+ }
476
473
 
477
474
 
478
475
  /**
479
476
  * Send a form and display the result it in the popin
480
- *
481
- * @param $form
482
477
  */
483
478
  loadForm( $form: HTMLFormElement ): Promise<void> {
484
479
  if ( this.#loadingPromise ) {
485
480
  return this.#loadingPromise;
486
481
  }
487
482
 
488
- return this._loadForm( $form );
489
- };
483
+ return this.#_loadForm( $form );
484
+ }
490
485
 
491
486
 
492
487
  /**
493
488
  * Load a file and display it in the popin
494
489
  *
495
- * @param url
496
490
  * @param data - All parameters available for window.fetch
497
- * @param [type=text]
498
491
  */
499
- load( url: string, data?: RequestInit, type: PopinResponseType = 'text' ): Promise<void> {
492
+ load( url: string, data?: RequestInit, type: FLib.Popin.ResponseType = 'text' ): Promise<void> {
500
493
  if ( this.#loadingPromise ) {
501
494
  return this.#loadingPromise;
502
495
  }
503
496
 
504
- return this._load(
497
+ return this.#_load(
505
498
  url,
506
499
  type,
507
500
  data
508
501
  );
509
- };
510
-
502
+ }
511
503
 
512
504
  /**
513
505
  * Insert some html in the popin and open it
514
506
  *
515
- * @param html
516
507
  * @param openFirst - Open the popin THEN insert the html
517
508
  */
518
509
  set( html: string, openFirst?: boolean ): Promise<void> {
519
510
  if ( openFirst ) {
520
- return this.openPopin().then( () => this.setPopin( html ) );
511
+ return this.#openPopin().then( () => this.#setPopin( html ) );
521
512
  }
522
- return this.setPopin( html ).then( () => this.openPopin() );
523
- };
513
+ return this.#setPopin( html ).then( () => this.#openPopin() );
514
+ }
524
515
 
525
516
 
526
517
  /**
527
518
  * Remove the content of the popin
528
519
  */
529
- clear() {
530
- return this.clearPopin();
531
- };
520
+ clear(): void {
521
+ return this.#clearPopin();
522
+ }
532
523
 
533
524
 
534
525
  /**
535
526
  * Close the popin
536
527
  */
537
528
  close(): Promise<void> {
538
- return this.closePopin();
539
- };
529
+ return this.#closePopin();
530
+ }
540
531
 
541
532
 
542
533
  /**
543
534
  * Open the popin
544
535
  */
545
536
  open(): Promise<void> {
546
- return this.openPopin();
547
- };
537
+ return this.#openPopin();
538
+ }
548
539
 
549
540
 
550
541
  /**
551
542
  * Open the popin loading
552
543
  */
553
544
  openLoading(): Promise<void> {
554
- return this.openLoader()
555
- };
556
-
545
+ return this.#openLoader()
546
+ }
557
547
 
558
548
  /**
559
549
  * Close the popin loading
560
550
  */
561
551
  closeLoading(): Promise<void> {
562
- return this.closeLoader()
563
- };
552
+ return this.#closeLoader()
553
+ }
564
554
 
565
555
 
566
556
  /**
567
557
  * Remove all events, css class or inline styles
568
558
  */
569
- destroy() {
559
+ destroy(): void {
570
560
  off(
571
561
  this.#$popin,
572
562
  {
@@ -594,5 +584,5 @@ export default class Popin {
594
584
  if ( this.#keyboardControls ) {
595
585
  this.#keyboardControls.off();
596
586
  }
597
- };
587
+ }
598
588
  }
@@ -3,9 +3,9 @@ import { toggleTabIndex, FOCUSABLE_ELEMENTS_SELECTOR } from './Tools';
3
3
 
4
4
  export default class PopinAccessibility {
5
5
 
6
- #$elements: NodeList | undefined;
7
- #$firstElement: HTMLElement | undefined;
8
- #$lastElement: HTMLElement | undefined;
6
+ #$elements: NodeListOf<HTMLElement> | undefined;
7
+ #$firstElement: HTMLElement | undefined;
8
+ #$lastElement: HTMLElement | undefined;
9
9
  #$popin: HTMLElement;
10
10
 
11
11
 
@@ -18,7 +18,7 @@ export default class PopinAccessibility {
18
18
 
19
19
 
20
20
 
21
- focusFirstElement() {
21
+ focusFirstElement(): void {
22
22
  if ( !this.#$firstElement ) {
23
23
  return;
24
24
  }
@@ -26,7 +26,7 @@ export default class PopinAccessibility {
26
26
  }
27
27
 
28
28
 
29
- handleBackwardTab( e ) {
29
+ handleBackwardTab( e: Event ): void {
30
30
  if ( !this.#$elements?.length || !this.#$firstElement ) {
31
31
  e.preventDefault();
32
32
  return;
@@ -38,7 +38,7 @@ export default class PopinAccessibility {
38
38
  }
39
39
 
40
40
 
41
- handleForwardTab( e ) {
41
+ handleForwardTab( e: Event ): void {
42
42
  if ( this.#$elements?.length || !this.#$lastElement ) {
43
43
  e.preventDefault();
44
44
  return;
@@ -50,7 +50,7 @@ export default class PopinAccessibility {
50
50
  }
51
51
 
52
52
 
53
- toggleTabIndexNavigation( activate ) {
53
+ toggleTabIndexNavigation( activate: boolean ): void {
54
54
  toggleTabIndex( this.#$elements, this.#$popin, activate );
55
55
 
56
56
  if ( activate ) {
@@ -59,7 +59,7 @@ export default class PopinAccessibility {
59
59
  }
60
60
 
61
61
 
62
- refresh() {
62
+ refresh(): void {
63
63
  this.#$elements = this.#$popin.querySelectorAll( FOCUSABLE_ELEMENTS_SELECTOR );
64
64
  this.#$firstElement = this.#$elements[ 0 ] as HTMLElement;
65
65
  this.#$lastElement = this.#$elements[ this.#$elements.length - 1 ] as HTMLElement;