@studiometa/js-toolkit 2.0.0-alpha.4 → 2.0.0-alpha.8

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 (194) hide show
  1. package/Base/index.d.ts +29 -47
  2. package/Base/index.js +19 -14
  3. package/Base/managers/ChildrenManager.d.ts +6 -6
  4. package/Base/managers/ChildrenManager.js +1 -2
  5. package/Base/managers/EventsManager.d.ts +9 -9
  6. package/Base/managers/EventsManager.js +18 -33
  7. package/Base/managers/OptionsManager.d.ts +0 -8
  8. package/Base/managers/OptionsManager.js +1 -6
  9. package/Base/managers/RefsManager.js +1 -2
  10. package/Base/managers/ServicesManager.d.ts +14 -3
  11. package/Base/managers/ServicesManager.js +30 -12
  12. package/Base/utils.js +1 -2
  13. package/README.md +12 -70
  14. package/decorators/index.js +1 -2
  15. package/decorators/withBreakpointManager.d.ts +4 -4
  16. package/decorators/withBreakpointManager.js +1 -2
  17. package/decorators/withBreakpointObserver.d.ts +2 -2
  18. package/decorators/withBreakpointObserver.js +1 -2
  19. package/decorators/withDrag.d.ts +3 -3
  20. package/decorators/withDrag.js +1 -2
  21. package/decorators/withExtraConfig.d.ts +3 -3
  22. package/decorators/withExtraConfig.js +1 -2
  23. package/decorators/withIntersectionObserver.d.ts +2 -2
  24. package/decorators/withIntersectionObserver.js +1 -11
  25. package/decorators/withMountWhenInView.d.ts +3 -3
  26. package/decorators/withMountWhenInView.js +1 -2
  27. package/helpers/createApp.d.ts +3 -3
  28. package/helpers/createApp.js +9 -9
  29. package/helpers/importOnInteraction.d.ts +3 -3
  30. package/helpers/importOnInteraction.js +1 -2
  31. package/helpers/importWhenIdle.d.ts +3 -3
  32. package/helpers/importWhenIdle.js +1 -2
  33. package/helpers/importWhenVisible.d.ts +3 -3
  34. package/helpers/importWhenVisible.js +1 -2
  35. package/helpers/index.js +1 -2
  36. package/helpers/utils.js +1 -2
  37. package/index.d.ts +2 -2
  38. package/index.js +1 -2
  39. package/index.modern.js +1 -2
  40. package/index.umd.js +1 -2
  41. package/package.json +3 -4
  42. package/services/Service.js +1 -2
  43. package/services/drag.js +1 -2
  44. package/services/index.js +1 -2
  45. package/services/key.js +1 -2
  46. package/services/load.d.ts +1 -1
  47. package/services/load.js +2 -3
  48. package/services/pointer.js +1 -2
  49. package/services/raf.js +1 -2
  50. package/services/resize.js +1 -6
  51. package/services/scroll.js +1 -2
  52. package/utils/collide/boundingRectToCircle.js +1 -2
  53. package/utils/collide/collideCircleCircle.js +1 -2
  54. package/utils/collide/collideCircleRect.js +1 -2
  55. package/utils/collide/collidePointCircle.js +1 -2
  56. package/utils/collide/collidePointRect.js +1 -2
  57. package/utils/collide/collideRectRect.js +1 -2
  58. package/utils/collide/index.js +1 -2
  59. package/utils/css/classes.js +1 -2
  60. package/utils/css/index.js +1 -2
  61. package/utils/css/matrix.js +1 -2
  62. package/utils/css/styles.js +1 -2
  63. package/utils/css/transition.js +1 -2
  64. package/utils/debounce.js +1 -2
  65. package/utils/focusTrap.js +1 -2
  66. package/utils/history.js +2 -3
  67. package/utils/index.d.ts +2 -1
  68. package/utils/index.js +2 -2
  69. package/utils/keyCodes.js +1 -2
  70. package/utils/math/clamp.js +1 -2
  71. package/utils/math/clamp01.js +1 -2
  72. package/utils/math/damp.js +1 -2
  73. package/utils/math/index.js +1 -2
  74. package/utils/math/inertiaFinalValue.js +1 -2
  75. package/utils/math/lerp.js +1 -2
  76. package/utils/math/map.js +1 -2
  77. package/utils/math/round.js +1 -2
  78. package/utils/memoize.d.ts +30 -0
  79. package/utils/memoize.js +30 -0
  80. package/utils/nextFrame.js +1 -2
  81. package/utils/object/autoBind.js +1 -2
  82. package/utils/object/getAllProperties.js +1 -2
  83. package/utils/object/index.js +1 -2
  84. package/utils/object/isObject.js +1 -2
  85. package/utils/string/index.js +1 -2
  86. package/utils/string/withLeadingCharacters.js +1 -2
  87. package/utils/string/withLeadingSlash.js +1 -2
  88. package/utils/string/withTrailingCharacters.js +1 -2
  89. package/utils/string/withTrailingSlash.js +1 -2
  90. package/utils/string/withoutLeadingCharacters.js +1 -2
  91. package/utils/string/withoutLeadingCharactersRecursive.js +1 -2
  92. package/utils/string/withoutLeadingSlash.js +1 -2
  93. package/utils/string/withoutTrailingCharacters.js +1 -2
  94. package/utils/string/withoutTrailingCharactersRecursive.js +1 -2
  95. package/utils/string/withoutTrailingSlash.js +1 -2
  96. package/utils/throttle.js +1 -2
  97. package/Base/index.js.map +0 -1
  98. package/Base/managers/ChildrenManager.js.map +0 -1
  99. package/Base/managers/EventsManager.js.map +0 -1
  100. package/Base/managers/OptionsManager.js.map +0 -1
  101. package/Base/managers/RefsManager.js.map +0 -1
  102. package/Base/managers/ServicesManager.js.map +0 -1
  103. package/Base/utils.js.map +0 -1
  104. package/components/Accordion/Accordion.d.ts +0 -83
  105. package/components/Accordion/Accordion.js +0 -58
  106. package/components/Accordion/Accordion.js.map +0 -1
  107. package/components/Accordion/AccordionItem.d.ts +0 -122
  108. package/components/Accordion/AccordionItem.js +0 -244
  109. package/components/Accordion/AccordionItem.js.map +0 -1
  110. package/components/Accordion/index.d.ts +0 -27
  111. package/components/Accordion/index.js +0 -19
  112. package/components/Accordion/index.js.map +0 -1
  113. package/components/Cursor.d.ts +0 -138
  114. package/components/Cursor.js +0 -136
  115. package/components/Cursor.js.map +0 -1
  116. package/components/Draggable.d.ts +0 -49
  117. package/components/Draggable.js +0 -43
  118. package/components/Draggable.js.map +0 -1
  119. package/components/Modal.d.ts +0 -158
  120. package/components/Modal.js +0 -186
  121. package/components/Modal.js.map +0 -1
  122. package/components/Tabs.d.ts +0 -108
  123. package/components/Tabs.js +0 -120
  124. package/components/Tabs.js.map +0 -1
  125. package/components/index.d.ts +0 -6
  126. package/components/index.js +0 -7
  127. package/components/index.js.map +0 -1
  128. package/decorators/index.js.map +0 -1
  129. package/decorators/withBreakpointManager.js.map +0 -1
  130. package/decorators/withBreakpointObserver.js.map +0 -1
  131. package/decorators/withDrag.js.map +0 -1
  132. package/decorators/withExtraConfig.js.map +0 -1
  133. package/decorators/withIntersectionObserver.js.map +0 -1
  134. package/decorators/withMountWhenInView.js.map +0 -1
  135. package/helpers/createApp.js.map +0 -1
  136. package/helpers/importOnInteraction.js.map +0 -1
  137. package/helpers/importWhenIdle.js.map +0 -1
  138. package/helpers/importWhenVisible.js.map +0 -1
  139. package/helpers/index.js.map +0 -1
  140. package/helpers/utils.js.map +0 -1
  141. package/index.js.map +0 -1
  142. package/index.modern.js.map +0 -1
  143. package/index.umd.js.map +0 -1
  144. package/services/Service.js.map +0 -1
  145. package/services/drag.js.map +0 -1
  146. package/services/index.js.map +0 -1
  147. package/services/key.js.map +0 -1
  148. package/services/load.js.map +0 -1
  149. package/services/pointer.js.map +0 -1
  150. package/services/raf.js.map +0 -1
  151. package/services/resize.js.map +0 -1
  152. package/services/scroll.js.map +0 -1
  153. package/utils/collide/boundingRectToCircle.js.map +0 -1
  154. package/utils/collide/collideCircleCircle.js.map +0 -1
  155. package/utils/collide/collideCircleRect.js.map +0 -1
  156. package/utils/collide/collidePointCircle.js.map +0 -1
  157. package/utils/collide/collidePointRect.js.map +0 -1
  158. package/utils/collide/collideRectRect.js.map +0 -1
  159. package/utils/collide/index.js.map +0 -1
  160. package/utils/css/classes.js.map +0 -1
  161. package/utils/css/index.js.map +0 -1
  162. package/utils/css/matrix.js.map +0 -1
  163. package/utils/css/styles.js.map +0 -1
  164. package/utils/css/transition.js.map +0 -1
  165. package/utils/debounce.js.map +0 -1
  166. package/utils/focusTrap.js.map +0 -1
  167. package/utils/history.js.map +0 -1
  168. package/utils/index.js.map +0 -1
  169. package/utils/keyCodes.js.map +0 -1
  170. package/utils/math/clamp.js.map +0 -1
  171. package/utils/math/clamp01.js.map +0 -1
  172. package/utils/math/damp.js.map +0 -1
  173. package/utils/math/index.js.map +0 -1
  174. package/utils/math/inertiaFinalValue.js.map +0 -1
  175. package/utils/math/lerp.js.map +0 -1
  176. package/utils/math/map.js.map +0 -1
  177. package/utils/math/round.js.map +0 -1
  178. package/utils/nextFrame.js.map +0 -1
  179. package/utils/object/autoBind.js.map +0 -1
  180. package/utils/object/getAllProperties.js.map +0 -1
  181. package/utils/object/index.js.map +0 -1
  182. package/utils/object/isObject.js.map +0 -1
  183. package/utils/string/index.js.map +0 -1
  184. package/utils/string/withLeadingCharacters.js.map +0 -1
  185. package/utils/string/withLeadingSlash.js.map +0 -1
  186. package/utils/string/withTrailingCharacters.js.map +0 -1
  187. package/utils/string/withTrailingSlash.js.map +0 -1
  188. package/utils/string/withoutLeadingCharacters.js.map +0 -1
  189. package/utils/string/withoutLeadingCharactersRecursive.js.map +0 -1
  190. package/utils/string/withoutLeadingSlash.js.map +0 -1
  191. package/utils/string/withoutTrailingCharacters.js.map +0 -1
  192. package/utils/string/withoutTrailingCharactersRecursive.js.map +0 -1
  193. package/utils/string/withoutTrailingSlash.js.map +0 -1
  194. package/utils/throttle.js.map +0 -1
@@ -1,136 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import Base from '../Base/index.js';
3
- import damp from '../utils/math/damp.js';
4
- import matrix from '../utils/css/matrix.js';
5
- export default class Cursor extends Base {
6
- constructor() {
7
- super(...arguments);
8
-
9
- _defineProperty(this, "x", 0);
10
-
11
- _defineProperty(this, "y", 0);
12
-
13
- _defineProperty(this, "scale", 0);
14
-
15
- _defineProperty(this, "pointerX", 0);
16
-
17
- _defineProperty(this, "pointerY", 0);
18
-
19
- _defineProperty(this, "pointerScale", 0);
20
- }
21
-
22
- mounted() {
23
- this.x = 0;
24
- this.y = 0;
25
- this.scale = 0;
26
- this.pointerX = 0;
27
- this.pointerY = 0;
28
- this.pointerScale = 0;
29
- this.render({
30
- x: this.x,
31
- y: this.y,
32
- scale: this.scale
33
- });
34
- }
35
-
36
- moved(_ref) {
37
- var {
38
- event,
39
- x,
40
- y,
41
- isDown
42
- } = _ref;
43
-
44
- if (!this.$services.has('ticked')) {
45
- this.$services.enable('ticked');
46
- }
47
-
48
- this.pointerX = x;
49
- this.pointerY = y;
50
- var scale = 1;
51
-
52
- if (!event) {
53
- this.pointerScale = scale;
54
- return;
55
- }
56
-
57
- var shouldGrow = event.target instanceof Element && event.target.matches(this.$options.growSelectors) || false;
58
- var shouldReduce = isDown || event.target instanceof Element && event.target.matches(this.$options.shrinkSelectors) || false;
59
-
60
- if (shouldGrow) {
61
- scale = this.$options.growTo;
62
- }
63
-
64
- if (shouldReduce) {
65
- scale = this.$options.shrinkTo;
66
- }
67
-
68
- this.pointerScale = scale;
69
- }
70
-
71
- ticked() {
72
- this.x = damp(this.pointerX, this.x, this.$options.translateDampFactor);
73
- this.y = damp(this.pointerY, this.y, this.$options.translateDampFactor);
74
- this.scale = damp(this.pointerScale, this.scale, this.pointerScale < this.scale ? this.$options.shrinkDampFactor : this.$options.growDampFactor);
75
- this.render({
76
- x: this.x,
77
- y: this.y,
78
- scale: this.scale
79
- });
80
-
81
- if (this.x === this.pointerX && this.y === this.pointerY && this.scale === this.pointerScale) {
82
- this.$services.disable('ticked');
83
- }
84
- }
85
-
86
- render(_ref2) {
87
- var {
88
- x,
89
- y,
90
- scale
91
- } = _ref2;
92
- var transform = matrix({
93
- translateX: x,
94
- translateY: y,
95
- scaleX: scale,
96
- scaleY: scale
97
- });
98
- this.$el.style.transform = "translateZ(0) ".concat(transform);
99
- }
100
-
101
- }
102
-
103
- _defineProperty(Cursor, "config", {
104
- name: 'Cursor',
105
- options: {
106
- growSelectors: {
107
- type: String,
108
- default: 'a, a *, button, button *, [data-cursor-grow], [data-cursor-grow] *'
109
- },
110
- shrinkSelectors: {
111
- type: String,
112
- default: '[data-cursor-shrink], [data-cursor-shrink] *'
113
- },
114
- growTo: {
115
- type: Number,
116
- default: 2
117
- },
118
- shrinkTo: {
119
- type: Number,
120
- default: 0.5
121
- },
122
- translateDampFactor: {
123
- type: Number,
124
- default: 0.25
125
- },
126
- growDampFactor: {
127
- type: Number,
128
- default: 0.25
129
- },
130
- shrinkDampFactor: {
131
- type: Number,
132
- default: 0.25
133
- }
134
- }
135
- });
136
- //# sourceMappingURL=Cursor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/components/Cursor.js"],"names":["Base","damp","matrix","Cursor","mounted","x","y","scale","pointerX","pointerY","pointerScale","render","moved","event","isDown","$services","has","enable","shouldGrow","target","Element","matches","$options","growSelectors","shouldReduce","shrinkSelectors","growTo","shrinkTo","ticked","translateDampFactor","shrinkDampFactor","growDampFactor","disable","transform","translateX","translateY","scaleX","scaleY","$el","style","name","options","type","String","default","Number"],"mappings":"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","sourcesContent":["import Base from '../Base/index.js';\nimport damp from '../utils/math/damp.js';\nimport matrix from '../utils/css/matrix.js';\n\n/**\n * @typedef {import('../services/pointer').PointerServiceProps} PointerServiceProps\n * @typedef {import('../Base').BaseOptions} BaseOptions\n */\n\n/**\n * @typedef {Object} CursorOptions\n * @property {string} growSelectors\n * @property {string} shrinkSelectors\n * @property {number} growTo\n * @property {number} shrinkTo\n * @property {number} translateDampFactor\n * @property {number} growDampFactor\n * @property {number} shrinkDampFactor\n */\n\n/**\n * @typedef {Object} CursorPrivateInterface\n * @property {BaseOptions & CursorOptions} $options\n */\n\n/**\n * @typedef {Cursor & CursorPrivateInterface} CursorInterface\n */\n\n/**\n * Custom cursor component.\n */\nexport default class Cursor extends Base {\n /**\n * Class config.\n */\n static config = {\n name: 'Cursor',\n options: {\n growSelectors: {\n type: String,\n default: 'a, a *, button, button *, [data-cursor-grow], [data-cursor-grow] *',\n },\n shrinkSelectors: {\n type: String,\n default: '[data-cursor-shrink], [data-cursor-shrink] *',\n },\n growTo: {\n type: Number,\n default: 2,\n },\n shrinkTo: {\n type: Number,\n default: 0.5,\n },\n translateDampFactor: {\n type: Number,\n default: 0.25,\n },\n growDampFactor: {\n type: Number,\n default: 0.25,\n },\n shrinkDampFactor: {\n type: Number,\n default: 0.25,\n },\n },\n };\n\n /**\n * @type {Number}\n */\n x = 0;\n\n /**\n * @type {Number}\n */\n y = 0;\n\n /**\n * @type {Number}\n */\n scale = 0;\n\n /**\n * @type {Number}\n */\n pointerX = 0;\n\n /**\n * @type {Number}\n */\n pointerY = 0;\n\n /**\n * @type {Number}\n */\n pointerScale = 0;\n\n /**\n * Mounted hook.\n * @return {void}\n */\n mounted() {\n this.x = 0;\n this.y = 0;\n this.scale = 0;\n this.pointerX = 0;\n this.pointerY = 0;\n this.pointerScale = 0;\n this.render({ x: this.x, y: this.y, scale: this.scale });\n }\n\n /**\n * Moved hook.\n *\n * @this {CursorInterface}\n *\n * @param {PointerServiceProps} options\n * @return {void}\n */\n moved({ event, x, y, isDown }) {\n if (!this.$services.has('ticked')) {\n this.$services.enable('ticked');\n }\n\n this.pointerX = x;\n this.pointerY = y;\n\n let scale = 1;\n\n if (!event) {\n this.pointerScale = scale;\n return;\n }\n\n const shouldGrow =\n (event.target instanceof Element && event.target.matches(this.$options.growSelectors)) ||\n false;\n const shouldReduce =\n isDown ||\n (event.target instanceof Element && event.target.matches(this.$options.shrinkSelectors)) ||\n false;\n\n if (shouldGrow) {\n scale = this.$options.growTo;\n }\n\n if (shouldReduce) {\n scale = this.$options.shrinkTo;\n }\n\n this.pointerScale = scale;\n }\n\n /**\n * RequestAnimationFrame hook.\n *\n * @this {CursorInterface}\n *\n * @return {void}\n */\n ticked() {\n this.x = damp(this.pointerX, this.x, this.$options.translateDampFactor);\n this.y = damp(this.pointerY, this.y, this.$options.translateDampFactor);\n this.scale = damp(\n this.pointerScale,\n this.scale,\n this.pointerScale < this.scale ? this.$options.shrinkDampFactor : this.$options.growDampFactor\n );\n\n this.render({ x: this.x, y: this.y, scale: this.scale });\n\n if (this.x === this.pointerX && this.y === this.pointerY && this.scale === this.pointerScale) {\n this.$services.disable('ticked');\n }\n }\n\n /**\n * Render the cursor.\n *\n * @param {Object} options\n * @param {Number} options.x\n * @param {Number} options.y\n * @param {Number} options.scale\n * @return {void}\n */\n render({ x, y, scale }) {\n const transform = matrix({\n translateX: x,\n translateY: y,\n scaleX: scale,\n scaleY: scale,\n });\n this.$el.style.transform = `translateZ(0) ${transform}`;\n }\n}\n"],"file":"Cursor.js"}
@@ -1,49 +0,0 @@
1
- /**
2
- * @typedef {import('stylefire').Styler} Styler
3
- * @typedef {import('../services/drag.js').DragServiceProps} DragServiceProps
4
- */
5
- /**
6
- * @typedef {Draggable} DraggableInterface
7
- */
8
- /**
9
- * Draggable class.
10
- *
11
- * @link https://jsfiddle.net/soulwire/znj683b9/
12
- */
13
- export default class Draggable extends Base {
14
- static config: {
15
- name: string;
16
- };
17
- /**
18
- * The origin of the element.
19
- * @type {{ x: number, y: number }}
20
- */
21
- elementOrigin: {
22
- x: number;
23
- y: number;
24
- };
25
- /**
26
- * The element styler for performant style update.
27
- * @type {Styler}
28
- */
29
- styler: Styler;
30
- /**
31
- * Mounted hook.
32
- * @return {void}
33
- */
34
- mounted(): void;
35
- /**
36
- * Destroyed hook.
37
- * @return {void}
38
- */
39
- destroyed(): void;
40
- /**
41
- * Drag service hook.
42
- * @param {DragServiceProps} props
43
- */
44
- dragged(props: DragServiceProps): void;
45
- }
46
- export type Styler = import('stylefire').Styler;
47
- export type DragServiceProps = import('../services/drag.js').DragServiceProps;
48
- export type DraggableInterface = Draggable;
49
- import Base from "../Base/index.js";
@@ -1,43 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import styler from 'stylefire';
3
- import Base from '../Base/index.js';
4
- import withDrag from '../decorators/withDrag.js';
5
- export default class Draggable extends withDrag(Base) {
6
- constructor() {
7
- super(...arguments);
8
-
9
- _defineProperty(this, "elementOrigin", {
10
- x: 0,
11
- y: 0
12
- });
13
-
14
- _defineProperty(this, "styler", void 0);
15
- }
16
-
17
- mounted() {
18
- this.styler = styler(this.$el);
19
- }
20
-
21
- destroyed() {
22
- this.styler = undefined;
23
- }
24
-
25
- dragged(props) {
26
- if (props.mode === 'start') {
27
- this.elementOrigin.x = this.styler.get('x');
28
- this.elementOrigin.y = this.styler.get('y');
29
- return;
30
- }
31
-
32
- this.styler.set({
33
- x: this.elementOrigin.x + props.x - props.origin.x,
34
- y: this.elementOrigin.y + props.y - props.origin.y
35
- });
36
- }
37
-
38
- }
39
-
40
- _defineProperty(Draggable, "config", {
41
- name: 'DraggableElement'
42
- });
43
- //# sourceMappingURL=Draggable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/components/Draggable.js"],"names":["styler","Base","withDrag","Draggable","x","y","mounted","$el","destroyed","undefined","dragged","props","mode","elementOrigin","get","set","origin","name"],"mappings":";AAAA,OAAOA,MAAP,MAAmB,WAAnB;AACA,OAAOC,IAAP,MAAiB,kBAAjB;AACA,OAAOC,QAAP,MAAqB,2BAArB;AAgBA,eAAe,MAAMC,SAAN,SAAwBD,QAAQ,CAACD,IAAD,CAAhC,CAAuC;AAAA;AAAA;;AAAA,2CASpC;AACdG,MAAAA,CAAC,EAAE,CADW;AAEdC,MAAAA,CAAC,EAAE;AAFW,KAToC;;AAAA;AAAA;;AAwBpDC,EAAAA,OAAO,GAAG;AACR,SAAKN,MAAL,GAAcA,MAAM,CAAC,KAAKO,GAAN,CAApB;AACD;;AAMDC,EAAAA,SAAS,GAAG;AACV,SAAKR,MAAL,GAAcS,SAAd;AACD;;AAMDC,EAAAA,OAAO,CAACC,KAAD,EAAQ;AACb,QAAIA,KAAK,CAACC,IAAN,KAAe,OAAnB,EAA4B;AAC1B,WAAKC,aAAL,CAAmBT,CAAnB,GAAuB,KAAKJ,MAAL,CAAYc,GAAZ,CAAgB,GAAhB,CAAvB;AACA,WAAKD,aAAL,CAAmBR,CAAnB,GAAuB,KAAKL,MAAL,CAAYc,GAAZ,CAAgB,GAAhB,CAAvB;AACA;AACD;;AAED,SAAKd,MAAL,CAAYe,GAAZ,CAAgB;AACdX,MAAAA,CAAC,EAAE,KAAKS,aAAL,CAAmBT,CAAnB,GAAuBO,KAAK,CAACP,CAA7B,GAAiCO,KAAK,CAACK,MAAN,CAAaZ,CADnC;AAEdC,MAAAA,CAAC,EAAE,KAAKQ,aAAL,CAAmBR,CAAnB,GAAuBM,KAAK,CAACN,CAA7B,GAAiCM,KAAK,CAACK,MAAN,CAAaX;AAFnC,KAAhB;AAID;;AAnDmD;;gBAAjCF,S,YACH;AACdc,EAAAA,IAAI,EAAE;AADQ,C","sourcesContent":["import styler from 'stylefire';\nimport Base from '../Base/index.js';\nimport withDrag from '../decorators/withDrag.js';\n\n/**\n * @typedef {import('stylefire').Styler} Styler\n * @typedef {import('../services/drag.js').DragServiceProps} DragServiceProps\n */\n\n/**\n * @typedef {Draggable} DraggableInterface\n */\n\n/**\n * Draggable class.\n *\n * @link https://jsfiddle.net/soulwire/znj683b9/\n */\nexport default class Draggable extends withDrag(Base) {\n static config = {\n name: 'DraggableElement',\n };\n\n /**\n * The origin of the element.\n * @type {{ x: number, y: number }}\n */\n elementOrigin = {\n x: 0,\n y: 0,\n };\n\n /**\n * The element styler for performant style update.\n * @type {Styler}\n */\n styler;\n\n /**\n * Mounted hook.\n * @return {void}\n */\n mounted() {\n this.styler = styler(this.$el);\n }\n\n /**\n * Destroyed hook.\n * @return {void}\n */\n destroyed() {\n this.styler = undefined;\n }\n\n /**\n * Drag service hook.\n * @param {DragServiceProps} props\n */\n dragged(props) {\n if (props.mode === 'start') {\n this.elementOrigin.x = this.styler.get('x');\n this.elementOrigin.y = this.styler.get('y');\n return;\n }\n\n this.styler.set({\n x: this.elementOrigin.x + props.x - props.origin.x,\n y: this.elementOrigin.y + props.y - props.origin.y,\n });\n }\n}\n"],"file":"Draggable.js"}
@@ -1,158 +0,0 @@
1
- /**
2
- * @typedef {Object} ModalRefs
3
- * @property {HTMLElement} close
4
- * @property {HTMLElement} container
5
- * @property {HTMLElement} content
6
- * @property {HTMLElement} modal
7
- * @property {HTMLElement} open
8
- * @property {HTMLElement} overlay
9
- */
10
- /**
11
- * @typedef {import('../utils/css/styles.js').CssStyleObject} CssStyleObject
12
- * @typedef {Partial<Record<'open'|'active'|'closed', string|CssStyleObject>>} ModalStates
13
- * @typedef {Partial<Record<keyof ModalRefs, ModalStates>>} ModalStylesOption
14
- */
15
- /**
16
- * @typedef {Object} ModalOptions
17
- * @property {String} move A selector where to move the modal to.
18
- * @property {String} autofocus A selector for the element to set the focus to when the modal opens.
19
- * @property {ModalStylesOption} styles The styles for the different state of the modal.
20
- */
21
- /**
22
- * @typedef {Object} ModalPrivateInterface
23
- * @property {ModalRefs} $refs
24
- * @property {ModalOptions} $options
25
- * @property {Boolean} isOpen
26
- * @property {Comment} refModalPlaceholder
27
- * @property {HTMLElement} refModalParentBackup
28
- * @property {Function} refModalUnbindGetRefFilter
29
- */
30
- /**
31
- * @typedef {Modal & ModalPrivateInterface} ModalInterface
32
- */
33
- /**
34
- * Modal class.
35
- */
36
- export default class Modal extends Base {
37
- /**
38
- * Modal options.
39
- */
40
- static config: {
41
- name: string;
42
- refs: string[];
43
- options: {
44
- move: StringConstructor;
45
- autofocus: {
46
- type: StringConstructor;
47
- default: string;
48
- };
49
- styles: {
50
- type: ObjectConstructor;
51
- /**
52
- * @return {ModalStylesOption}
53
- */
54
- default: () => ModalStylesOption;
55
- };
56
- };
57
- };
58
- /**
59
- * Open the modal on click on the `open` ref.
60
- *
61
- * @return {Function} The component's `open` method.
62
- */
63
- get onOpenClick(): Function;
64
- /**
65
- * Close the modal on click on the `close` ref.
66
- *
67
- * @return {Function} The component's `close` method.
68
- */
69
- get onCloseClick(): Function;
70
- /**
71
- * Close the modal on click on the `overlay` ref.
72
- *
73
- * @return {Function} The component's `close` method.
74
- */
75
- get onOverlayClick(): Function;
76
- /**
77
- * Initialize the component's behaviours.
78
- *
79
- * @this {ModalInterface}
80
- */
81
- mounted(): ModalInterface;
82
- isOpen: boolean;
83
- refModalPlaceholder: Comment;
84
- refModalParentBackup: any;
85
- refModalUnbindGetRefFilter: any;
86
- /**
87
- * Unbind all events on destroy.
88
- *
89
- * @this {ModalInterface}
90
- * @return {Modal} The Modal instance.
91
- */
92
- destroyed(): Modal;
93
- /**
94
- * Close the modal on `ESC` and trap the tabulation.
95
- *
96
- * @this {ModalInterface}
97
- * @param {Object} options
98
- * @param {KeyboardEvent} options.event The original keyboard event
99
- * @param {Boolean} options.isUp Is it a keyup event?
100
- * @param {Boolean} options.isDown Is it a keydown event?
101
- * @param {Boolean} options.ESC Is it the ESC key?
102
- */
103
- keyed({ event, isUp, isDown, ESC }: {
104
- event: KeyboardEvent;
105
- isUp: boolean;
106
- isDown: boolean;
107
- ESC: boolean;
108
- }): void;
109
- /**
110
- * Open the modal.
111
- *
112
- * @this {ModalInterface}
113
- * @return {Promise<ModalInterface>} The Modal instance.
114
- */
115
- open(): Promise<ModalInterface>;
116
- /**
117
- * Close the modal.
118
- *
119
- * @this {ModalInterface}
120
- * @return {Promise<ModalInterface>} The Modal instance.
121
- */
122
- close(): Promise<ModalInterface>;
123
- }
124
- export type ModalRefs = {
125
- close: HTMLElement;
126
- container: HTMLElement;
127
- content: HTMLElement;
128
- modal: HTMLElement;
129
- open: HTMLElement;
130
- overlay: HTMLElement;
131
- };
132
- export type CssStyleObject = import('../utils/css/styles.js').CssStyleObject;
133
- export type ModalStates = Partial<Record<'open' | 'active' | 'closed', string | CssStyleObject>>;
134
- export type ModalStylesOption = Partial<Record<keyof ModalRefs, ModalStates>>;
135
- export type ModalOptions = {
136
- /**
137
- * A selector where to move the modal to.
138
- */
139
- move: string;
140
- /**
141
- * A selector for the element to set the focus to when the modal opens.
142
- */
143
- autofocus: string;
144
- /**
145
- * The styles for the different state of the modal.
146
- */
147
- styles: ModalStylesOption;
148
- };
149
- export type ModalPrivateInterface = {
150
- $refs: ModalRefs;
151
- $options: ModalOptions;
152
- isOpen: boolean;
153
- refModalPlaceholder: Comment;
154
- refModalParentBackup: HTMLElement;
155
- refModalUnbindGetRefFilter: Function;
156
- };
157
- export type ModalInterface = Modal & ModalPrivateInterface;
158
- import Base from "../Base/index.js";
@@ -1,186 +0,0 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- import Base from '../Base/index.js';
4
- import transition from '../utils/css/transition.js';
5
- import { trap, untrap, saveActiveElement } from '../utils/focusTrap.js';
6
- export default class Modal extends Base {
7
- get onOpenClick() {
8
- return this.open;
9
- }
10
-
11
- get onCloseClick() {
12
- return this.close;
13
- }
14
-
15
- get onOverlayClick() {
16
- return this.close;
17
- }
18
-
19
- mounted() {
20
- this.isOpen = false;
21
- this.close();
22
-
23
- if (this.$options.move) {
24
- var target = document.querySelector(this.$options.move) || document.body;
25
- var refsBackup = this.$refs;
26
- this.refModalPlaceholder = document.createComment('');
27
- this.refModalParentBackup = this.$refs.modal.parentElement || this.$el;
28
- this.refModalParentBackup.insertBefore(this.refModalPlaceholder, this.$refs.modal);
29
- this.refModalUnbindGetRefFilter = this.$on('get:refs', refs => {
30
- Object.entries(refsBackup).forEach(_ref => {
31
- var [key, ref] = _ref;
32
-
33
- if (!refs[key]) {
34
- refs[key] = ref;
35
- }
36
- });
37
- });
38
- target.appendChild(this.$refs.modal);
39
- }
40
-
41
- return this;
42
- }
43
-
44
- destroyed() {
45
- this.close();
46
-
47
- if (this.$options.move && this.refModalParentBackup) {
48
- this.refModalParentBackup.insertBefore(this.$refs.modal, this.refModalPlaceholder);
49
- this.refModalUnbindGetRefFilter();
50
- this.refModalPlaceholder.remove();
51
- delete this.refModalPlaceholder;
52
- delete this.refModalParentBackup;
53
- delete this.refModalUnbindGetRefFilter;
54
- }
55
-
56
- return this;
57
- }
58
-
59
- keyed(_ref2) {
60
- var {
61
- event,
62
- isUp,
63
- isDown,
64
- ESC
65
- } = _ref2;
66
-
67
- if (!this.isOpen) {
68
- return;
69
- }
70
-
71
- if (isDown) {
72
- trap(this.$refs.modal, event);
73
- }
74
-
75
- if (ESC && isUp) {
76
- this.close();
77
- }
78
- }
79
-
80
- open() {
81
- var _this = this;
82
-
83
- return _asyncToGenerator(function* () {
84
- if (_this.isOpen) {
85
- return Promise.resolve(_this);
86
- }
87
-
88
- _this.$refs.modal.setAttribute('aria-hidden', 'false');
89
-
90
- document.documentElement.style.overflow = 'hidden';
91
- _this.isOpen = true;
92
-
93
- _this.$emit('open');
94
-
95
- var refs = _this.$refs;
96
- return Promise.all(Object.entries(_this.$options.styles).map(_ref3 => {
97
- var [refName, {
98
- open,
99
- active,
100
- closed
101
- } = {
102
- open: '',
103
- active: '',
104
- closed: ''
105
- }] = _ref3;
106
- return transition(refs[refName], {
107
- from: closed,
108
- active,
109
- to: open
110
- }, 'keep');
111
- })).then(() => {
112
- if (_this.$options.autofocus && _this.$refs.modal.querySelector(_this.$options.autofocus)) {
113
- saveActiveElement();
114
-
115
- var autofocusElement = _this.$refs.modal.querySelector(_this.$options.autofocus);
116
-
117
- autofocusElement.focus();
118
- }
119
-
120
- return Promise.resolve(_this);
121
- });
122
- })();
123
- }
124
-
125
- close() {
126
- var _this2 = this;
127
-
128
- return _asyncToGenerator(function* () {
129
- if (!_this2.isOpen) {
130
- return Promise.resolve(_this2);
131
- }
132
-
133
- _this2.$refs.modal.setAttribute('aria-hidden', 'true');
134
-
135
- document.documentElement.style.overflow = '';
136
- _this2.isOpen = false;
137
- untrap();
138
-
139
- _this2.$emit('close');
140
-
141
- var refs = _this2.$refs;
142
- return Promise.all(Object.entries(_this2.$options.styles).map(_ref4 => {
143
- var [refName, {
144
- open,
145
- active,
146
- closed
147
- } = {
148
- open: '',
149
- active: '',
150
- closed: ''
151
- }] = _ref4;
152
- return transition(refs[refName], {
153
- from: open,
154
- active,
155
- to: closed
156
- }, 'keep');
157
- })).then(() => Promise.resolve(_this2));
158
- })();
159
- }
160
-
161
- }
162
-
163
- _defineProperty(Modal, "config", {
164
- name: 'Modal',
165
- refs: ['close', 'container', 'content', 'modal', 'open', 'overlay'],
166
- options: {
167
- move: String,
168
- autofocus: {
169
- type: String,
170
- default: '[autofocus]'
171
- },
172
- styles: {
173
- type: Object,
174
- default: () => ({
175
- modal: {
176
- closed: {
177
- opacity: '0',
178
- pointerEvents: 'none',
179
- visibility: 'hidden'
180
- }
181
- }
182
- })
183
- }
184
- }
185
- });
186
- //# sourceMappingURL=Modal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../packages/js-toolkit/components/Modal.js"],"names":["Base","transition","trap","untrap","saveActiveElement","Modal","onOpenClick","open","onCloseClick","close","onOverlayClick","mounted","isOpen","$options","move","target","document","querySelector","body","refsBackup","$refs","refModalPlaceholder","createComment","refModalParentBackup","modal","parentElement","$el","insertBefore","refModalUnbindGetRefFilter","$on","refs","Object","entries","forEach","key","ref","appendChild","destroyed","remove","keyed","event","isUp","isDown","ESC","Promise","resolve","setAttribute","documentElement","style","overflow","$emit","all","styles","map","refName","active","closed","from","to","then","autofocus","autofocusElement","focus","name","options","String","type","default","opacity","pointerEvents","visibility"],"mappings":"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","sourcesContent":["import Base from '../Base/index.js';\nimport transition from '../utils/css/transition.js';\nimport { trap, untrap, saveActiveElement } from '../utils/focusTrap.js';\n\n/**\n * @typedef {Object} ModalRefs\n * @property {HTMLElement} close\n * @property {HTMLElement} container\n * @property {HTMLElement} content\n * @property {HTMLElement} modal\n * @property {HTMLElement} open\n * @property {HTMLElement} overlay\n */\n\n/**\n * @typedef {import('../utils/css/styles.js').CssStyleObject} CssStyleObject\n * @typedef {Partial<Record<'open'|'active'|'closed', string|CssStyleObject>>} ModalStates\n * @typedef {Partial<Record<keyof ModalRefs, ModalStates>>} ModalStylesOption\n */\n\n/**\n * @typedef {Object} ModalOptions\n * @property {String} move A selector where to move the modal to.\n * @property {String} autofocus A selector for the element to set the focus to when the modal opens.\n * @property {ModalStylesOption} styles The styles for the different state of the modal.\n */\n\n/**\n * @typedef {Object} ModalPrivateInterface\n * @property {ModalRefs} $refs\n * @property {ModalOptions} $options\n * @property {Boolean} isOpen\n * @property {Comment} refModalPlaceholder\n * @property {HTMLElement} refModalParentBackup\n * @property {Function} refModalUnbindGetRefFilter\n */\n\n/**\n * @typedef {Modal & ModalPrivateInterface} ModalInterface\n */\n\n/**\n * Modal class.\n */\nexport default class Modal extends Base {\n /**\n * Modal options.\n */\n static config = {\n name: 'Modal',\n refs: ['close', 'container', 'content', 'modal', 'open', 'overlay'],\n options: {\n move: String,\n autofocus: { type: String, default: '[autofocus]' },\n styles: {\n type: Object,\n /**\n * @return {ModalStylesOption}\n */\n default: () => ({\n modal: {\n closed: {\n opacity: '0',\n pointerEvents: 'none',\n visibility: 'hidden',\n },\n },\n }),\n },\n },\n };\n\n /**\n * Open the modal on click on the `open` ref.\n *\n * @return {Function} The component's `open` method.\n */\n get onOpenClick() {\n return this.open;\n }\n\n /**\n * Close the modal on click on the `close` ref.\n *\n * @return {Function} The component's `close` method.\n */\n get onCloseClick() {\n return this.close;\n }\n\n /**\n * Close the modal on click on the `overlay` ref.\n *\n * @return {Function} The component's `close` method.\n */\n get onOverlayClick() {\n return this.close;\n }\n\n /**\n * Initialize the component's behaviours.\n *\n * @this {ModalInterface}\n */\n mounted() {\n this.isOpen = false;\n this.close();\n\n if (this.$options.move) {\n const target = document.querySelector(this.$options.move) || document.body;\n const refsBackup = this.$refs;\n\n this.refModalPlaceholder = document.createComment('');\n this.refModalParentBackup = this.$refs.modal.parentElement || this.$el;\n this.refModalParentBackup.insertBefore(this.refModalPlaceholder, this.$refs.modal);\n\n this.refModalUnbindGetRefFilter = this.$on(\n 'get:refs',\n /**\n * @param {ModalRefs} refs\n */\n // @ts-ignore\n (refs) => {\n Object.entries(refsBackup).forEach(([key, ref]) => {\n if (!refs[key]) {\n refs[key] = ref;\n }\n });\n }\n );\n target.appendChild(this.$refs.modal);\n }\n\n return this;\n }\n\n /**\n * Unbind all events on destroy.\n *\n * @this {ModalInterface}\n * @return {Modal} The Modal instance.\n */\n destroyed() {\n this.close();\n\n if (this.$options.move && this.refModalParentBackup) {\n this.refModalParentBackup.insertBefore(this.$refs.modal, this.refModalPlaceholder);\n this.refModalUnbindGetRefFilter();\n this.refModalPlaceholder.remove();\n delete this.refModalPlaceholder;\n delete this.refModalParentBackup;\n delete this.refModalUnbindGetRefFilter;\n }\n\n return this;\n }\n\n /**\n * Close the modal on `ESC` and trap the tabulation.\n *\n * @this {ModalInterface}\n * @param {Object} options\n * @param {KeyboardEvent} options.event The original keyboard event\n * @param {Boolean} options.isUp Is it a keyup event?\n * @param {Boolean} options.isDown Is it a keydown event?\n * @param {Boolean} options.ESC Is it the ESC key?\n */\n keyed({ event, isUp, isDown, ESC }) {\n if (!this.isOpen) {\n return;\n }\n\n if (isDown) {\n trap(this.$refs.modal, event);\n }\n\n if (ESC && isUp) {\n this.close();\n }\n }\n\n /**\n * Open the modal.\n *\n * @this {ModalInterface}\n * @return {Promise<ModalInterface>} The Modal instance.\n */\n async open() {\n if (this.isOpen) {\n return Promise.resolve(this);\n }\n\n this.$refs.modal.setAttribute('aria-hidden', 'false');\n document.documentElement.style.overflow = 'hidden';\n\n this.isOpen = true;\n this.$emit('open');\n\n /** @type {ModalRefs} */\n const refs = this.$refs;\n\n return Promise.all(\n Object.entries(this.$options.styles).map(\n ([refName, { open, active, closed } = { open: '', active: '', closed: '' }]) =>\n transition(\n refs[refName],\n {\n from: closed,\n active,\n to: open,\n },\n 'keep'\n )\n )\n ).then(() => {\n if (this.$options.autofocus && this.$refs.modal.querySelector(this.$options.autofocus)) {\n saveActiveElement();\n /** @type {HTMLElement} */\n const autofocusElement = this.$refs.modal.querySelector(this.$options.autofocus);\n autofocusElement.focus();\n }\n return Promise.resolve(this);\n });\n }\n\n /**\n * Close the modal.\n *\n * @this {ModalInterface}\n * @return {Promise<ModalInterface>} The Modal instance.\n */\n async close() {\n if (!this.isOpen) {\n return Promise.resolve(this);\n }\n\n this.$refs.modal.setAttribute('aria-hidden', 'true');\n document.documentElement.style.overflow = '';\n\n this.isOpen = false;\n untrap();\n this.$emit('close');\n\n /** @type {ModalRefs} */\n const refs = this.$refs;\n\n return Promise.all(\n Object.entries(this.$options.styles).map(\n ([refName, { open, active, closed } = { open: '', active: '', closed: '' }]) =>\n transition(\n refs[refName],\n {\n from: open,\n active,\n to: closed,\n },\n 'keep'\n )\n )\n ).then(() => Promise.resolve(this));\n }\n}\n"],"file":"Modal.js"}