@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
@@ -8,26 +8,26 @@ export default class PopinBackground {
8
8
 
9
9
  #$bgLayer: HTMLElement;
10
10
  #isOpened: boolean;
11
- #options: PopinOptionsType;
11
+ #options: FLib.Popin.Options;
12
12
  #popin: Popin | PopinController;
13
13
 
14
14
 
15
- get isOpened() {
15
+ get isOpened(): boolean {
16
16
  return this.#isOpened;
17
17
  }
18
18
 
19
19
 
20
- constructor( popin: Popin | PopinController, options: PopinOptionsType ) {
20
+ constructor( popin: Popin | PopinController, options: FLib.Popin.Options ) {
21
21
  this.#isOpened = false;
22
22
  this.#popin = popin;
23
23
  this.#options = options;
24
- this.#$bgLayer = strToDOM( options.templates!.bgLayer! ) as HTMLElement;
24
+ this.#$bgLayer = strToDOM( options.templates.bgLayer ) as HTMLElement;
25
25
 
26
26
  document.body.appendChild( this.#$bgLayer );
27
27
  }
28
28
 
29
29
 
30
- open() {
30
+ open(): Promise<any> {
31
31
  if ( this.#isOpened ) {
32
32
  return Promise.resolve();
33
33
  }
@@ -36,13 +36,13 @@ export default class PopinBackground {
36
36
  this.#$bgLayer.addEventListener( CLICK_EVENT_NAME, this.#onBgClick );
37
37
  }
38
38
 
39
- return this.#options.animations!.openBg!( this.#$bgLayer ).then( () => {
39
+ return this.#options.animations.openBg( this.#$bgLayer ).then( () => {
40
40
  this.#isOpened = true;
41
41
  } );
42
42
  }
43
43
 
44
44
 
45
- close() {
45
+ close(): Promise<any> {
46
46
  if ( !this.#isOpened ) {
47
47
  return Promise.resolve();
48
48
  }
@@ -51,18 +51,18 @@ export default class PopinBackground {
51
51
  this.#$bgLayer.removeEventListener( CLICK_EVENT_NAME, this.#onBgClick );
52
52
  }
53
53
 
54
- return this.#options.animations!.closeBg!( this.#$bgLayer ).then( () => {
54
+ return this.#options.animations.closeBg( this.#$bgLayer ).then( () => {
55
55
  this.#isOpened = false;
56
56
  } );
57
57
  }
58
58
 
59
59
 
60
- #onBgClick = () => {
60
+ #onBgClick = (): void => {
61
61
  this.#popin.close();
62
62
  }
63
63
 
64
64
 
65
- destroy() {
65
+ destroy(): void {
66
66
  this.#$bgLayer.removeEventListener( CLICK_EVENT_NAME, this.#onBgClick );
67
- };
67
+ }
68
68
  }
@@ -7,7 +7,6 @@ import { CLICK_EVENT_NAME, defaultOptions, toggleTabIndex } from './Tools';
7
7
 
8
8
  /**
9
9
  * Create a controller tha manage all popin in the page
10
- * @class PopinController
11
10
  *
12
11
  * @see extra/modules/popin.md for details.
13
12
  *
@@ -16,13 +15,13 @@ import { CLICK_EVENT_NAME, defaultOptions, toggleTabIndex } from './Tools';
16
15
  * popin.loadForm( $form );
17
16
  */
18
17
  export default class PopinController {
19
- #options: PopinOptionsType;
20
- #selectors: PopinSelectorsOptionsType;
18
+ #options: FLib.Popin.Options;
19
+ #selectors: FLib.Popin.SelectorsOptions;
21
20
  #background: PopinBackground;
22
21
  #popin: Popin;
23
22
 
24
23
 
25
- constructor( userOptions: PopinOptionsType = {}, $popin?: HTMLElement ) {
24
+ constructor( userOptions: FLib.Popin.OptionsInit = {}, $popin?: HTMLElement ) {
26
25
 
27
26
  if ( !( "AbortController" in window ) ) {
28
27
  throw 'This plugin uses fecth and AbortController. You may need to add a polyfill for this browser.';
@@ -30,7 +29,7 @@ export default class PopinController {
30
29
 
31
30
  this.#options = extend( defaultOptions, userOptions );
32
31
 
33
- this.#selectors = this.#options.selectors!;
32
+ this.#selectors = this.#options.selectors;
34
33
 
35
34
  // global var, only one background for all popin
36
35
  this.#background = new PopinBackground( this, this.#options );
@@ -74,18 +73,18 @@ export default class PopinController {
74
73
 
75
74
  } );
76
75
 
77
- let $triggerOnLoadPopin = document.querySelector( `[${ this.#selectors.openOnLoadAttribute }]` );
76
+ const $triggerOnLoadPopin = document.querySelector( `[${ this.#selectors.openOnLoadAttribute }]` );
78
77
 
79
78
  if ( $triggerOnLoadPopin ) {
80
- this.parseElement(
79
+ this.#parseElement(
81
80
  $triggerOnLoadPopin as HTMLElement,
82
- $triggerOnLoadPopin.getAttribute( this.#selectors.openOnLoadAttribute! )
81
+ $triggerOnLoadPopin.getAttribute( this.#selectors.openOnLoadAttribute )
83
82
  );
84
83
  }
85
84
  }
86
85
 
87
86
 
88
- private parseElement( $dom: HTMLElement, customUrl?: string | null ): Promise<void> {
87
+ #parseElement = ( $dom: HTMLElement, customUrl?: string | null ): Promise<void> => {
89
88
  if ( customUrl ) {
90
89
  return this.#popin.load( customUrl );
91
90
  }
@@ -105,62 +104,55 @@ export default class PopinController {
105
104
 
106
105
 
107
106
 
108
- #openPopinHandler = ( e ) => {
107
+ #openPopinHandler = ( e: Event): void => {
109
108
  e.preventDefault();
110
109
 
111
- this.parseElement( e.target );
110
+ this.#parseElement( e.target as HTMLElement );
112
111
  }
113
112
 
114
113
 
115
114
  /**
116
115
  * Load a file and display it in the popin
117
116
  *
118
- * @param url
119
117
  * @param data - All parameters available for window.fetch
120
- * @param [type=text]
121
118
  */
122
- load( url: string, data: RequestInit, type?: PopinResponseType ): Promise<void> {
119
+ load( url: string, data: RequestInit, type?: FLib.Popin.ResponseType ): Promise<void> {
123
120
  return this.#popin.load( url, data, type );
124
- };
121
+ }
125
122
 
126
123
 
127
124
  /**
128
125
  * Send a form and display the result it in the popin
129
- *
130
- * @param $form
131
126
  */
132
127
  loadForm( $form: HTMLFormElement ): Promise<void> {
133
128
  return this.#popin.loadForm( $form );
134
- };
129
+ }
135
130
 
136
131
 
137
132
  /**
138
133
  * Load a page from a link and display the result it in the popin
139
- *
140
- * @param $link
141
134
  */
142
135
  loadLink( $link: HTMLAnchorElement ): Promise<void> {
143
136
  return this.#popin.loadLink( $link );
144
- };
137
+ }
145
138
 
146
139
 
147
140
  /**
148
141
  * Insert some html in the popin and open it
149
142
  *
150
- * @param html
151
143
  * @param openFirst - Open the popin THEN insert the html
152
144
  */
153
145
  set( html: string, openFirst?: boolean ): Promise<void> {
154
146
  return this.#popin.set( html, openFirst );
155
- };
147
+ }
156
148
 
157
149
 
158
150
  /**
159
151
  * Remove the content of the popin
160
152
  */
161
- clear() {
153
+ clear(): void {
162
154
  return this.#popin.clear();
163
- };
155
+ }
164
156
 
165
157
 
166
158
  /**
@@ -168,7 +160,7 @@ export default class PopinController {
168
160
  */
169
161
  close(): Promise<void> {
170
162
  return this.#popin.close();
171
- };
163
+ }
172
164
 
173
165
 
174
166
  /**
@@ -176,13 +168,13 @@ export default class PopinController {
176
168
  */
177
169
  open(): Promise<void> {
178
170
  return this.#popin.open();
179
- };
171
+ }
180
172
 
181
173
 
182
174
  /**
183
175
  * Remove all events, css class or inline styles
184
176
  */
185
- destroy() {
177
+ destroy(): this {
186
178
  this.#background.destroy();
187
179
  this.#popin.destroy();
188
180
 
@@ -193,6 +185,8 @@ export default class PopinController {
193
185
  "callback": this.#openPopinHandler
194
186
  }
195
187
  );
196
- };
188
+
189
+ return this;
190
+ }
197
191
 
198
192
  }
@@ -1,13 +1,12 @@
1
1
 
2
2
  export const FOCUSABLE_ELEMENTS_SELECTOR = 'a,button,input,select,textarea';
3
3
 
4
- export function toggleTabIndex( $elements, $popin, activate ) {
5
- let tabIndex;
4
+ export function toggleTabIndex( $elements: NodeListOf<HTMLElement> | undefined | null, $popin: HTMLElement, activate: boolean ): void {
6
5
  $elements = $elements || $popin.querySelectorAll( FOCUSABLE_ELEMENTS_SELECTOR );
7
- tabIndex = activate ? '0' : '-1';
6
+ const tabIndex = activate ? '0' : '-1';
8
7
  $elements.forEach( e => e.setAttribute( 'tabindex', tabIndex ) );
9
8
  $popin.setAttribute( 'tabindex', tabIndex );
10
- $popin.setAttribute( 'aria-hidden', !activate );
9
+ $popin.setAttribute( 'aria-hidden', activate ? 'false' : 'true' );
11
10
  }
12
11
 
13
12
  export const CLICK_EVENT_NAME = window.matchMedia( '(hover: none)' ).matches ? 'touchend' : 'click';
@@ -18,19 +17,19 @@ export const defaultOptions = {
18
17
  "marginHeight": 20,
19
18
  "autoResize": false,
20
19
  "enableKeyboard": true,
21
- "onLoad": () => {
20
+ "onLoad": (): Promise<any> => {
22
21
  return Promise.resolve();
23
22
  },
24
- "setLinkResponseType": () => {
23
+ "setLinkResponseType": (): string => {
25
24
  return 'text';
26
25
  },
27
- "setFormResponseType": () => {
26
+ "setFormResponseType": (): string => {
28
27
  return 'text';
29
28
  },
30
- "checkValidity": () => {
29
+ "checkValidity": (): boolean => {
31
30
  return true;
32
31
  },
33
- "normalize": body => {
32
+ "normalize": <V>( body: V ): { success: boolean, data: V } => {
34
33
  return {
35
34
  "success": true,
36
35
  "data": body
@@ -41,7 +40,7 @@ export const defaultOptions = {
41
40
  "popinLoader": "<div class=\"popin-loader\"></div>",
42
41
  "popin": "<div class=\"popin\"><div class=\"popin-content\"></div></div>",
43
42
  "bgLayer": "<div class=\"bg-popin\"></div>",
44
- "errorMessage": "<div class=\"error\"><%= message %></div>"
43
+ "errorMessage": "<div class=\"error\">{{ message }}</div>"
45
44
  },
46
45
  "selectors": {
47
46
  "popin": ".popin",
@@ -52,32 +51,32 @@ export const defaultOptions = {
52
51
  "openOnLoadAttribute": "data-onload-popin"
53
52
  },
54
53
  "animations": {
55
- "openBg": $bg => {
54
+ "openBg": ( $bg: HTMLElement ): Promise<any> => {
56
55
  $bg.style.display = 'block';
57
56
  return Promise.resolve();
58
57
  },
59
- "closeBg": $bg => {
58
+ "closeBg": ( $bg: HTMLElement ): Promise<any> => {
60
59
  $bg.style.display = 'none';
61
60
  return Promise.resolve();
62
61
  },
63
- "initOpenPopin": $popin => {
62
+ "initOpenPopin": ( $popin: HTMLElement ): Promise<any> => {
64
63
  $popin.style.display = 'block';
65
- $popin.style.opacity = 0;
64
+ $popin.style.opacity = '0';
66
65
  return Promise.resolve();
67
66
  },
68
- "openPopin": $popin => {
69
- $popin.style.opacity = 1;
67
+ "openPopin": ( $popin: HTMLElement ): Promise<any> => {
68
+ $popin.style.opacity = '1';
70
69
  return Promise.resolve();
71
70
  },
72
- "closePopin": $popin => {
71
+ "closePopin": ( $popin: HTMLElement ): Promise<any> => {
73
72
  $popin.style.display = 'none';
74
73
  return Promise.resolve();
75
74
  },
76
- "openLoader": $loader => {
75
+ "openLoader": ( $loader: HTMLElement ): Promise<any> => {
77
76
  $loader.style.display = 'block';
78
77
  return Promise.resolve();
79
78
  },
80
- "closeLoader": $loader => {
79
+ "closeLoader": ( $loader : HTMLElement): Promise<any> => {
81
80
  $loader.style.display = 'none';
82
81
  return Promise.resolve();
83
82
  }
@@ -1,16 +1,14 @@
1
1
  /**
2
2
  * Simple template function based on string substitution
3
- * @function
4
- *
5
- * @param template
6
- * @param data
7
3
  *
8
4
  * @example
9
- * let HTML = quickTemplate( 'My name is { lastname }. { firstname} { lastname }.', { "firstname": "James", "lastname": "Bond" } );
5
+ * ```ts
6
+ * let HTML = quickTemplate( 'My name is {{ lastname }}. {{ firstname }} {{ lastname }}.', { "firstname": "James", "lastname": "Bond" } );
7
+ * ```
10
8
  */
11
9
  export default function quickTemplate( template: string, data: { [ key: string ]: string } ): string {
12
10
  Object.keys( data ).forEach( key => {
13
- template = template.replace( new RegExp( `{\\s*${ key }\\s*}`, 'g' ), data[ key ] );
11
+ template = template.replace( new RegExp( `{{\\s*${ key }\\s*}}`, 'g' ), data[ key ] );
14
12
  } );
15
13
 
16
14
  return template;