react-transition-state 1.1.4 → 1.2.0-alpha.2

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.
@@ -0,0 +1,306 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+
7
+ var PRE_ENTER = 0;
8
+ var ENTERING = 1;
9
+ var ENTERED = 2;
10
+ var PRE_EXIT = 3;
11
+ var EXITING = 4;
12
+ var EXITED = 5;
13
+ var UNMOUNTED = 6;
14
+ var STATES = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
15
+ var getFullState = function getFullState(_state) {
16
+ return {
17
+ _state: _state,
18
+ state: STATES[_state],
19
+ isEnter: _state < PRE_EXIT,
20
+ isMounted: _state !== UNMOUNTED
21
+ };
22
+ };
23
+ var startOrEnd = function startOrEnd(unmounted) {
24
+ return unmounted ? UNMOUNTED : EXITED;
25
+ };
26
+ var getEndState = function getEndState(state, unmountOnExit) {
27
+ switch (state) {
28
+ case ENTERING:
29
+ case PRE_ENTER:
30
+ return ENTERED;
31
+
32
+ case EXITING:
33
+ case PRE_EXIT:
34
+ return startOrEnd(unmountOnExit);
35
+ }
36
+ };
37
+ var getTimeout = function getTimeout(timeout) {
38
+ return typeof timeout === 'object' ? [timeout.enter, timeout.exit] : [timeout, timeout];
39
+ };
40
+
41
+ var updateState$1 = function updateState(state, setState, latestState, timeoutId, onChange) {
42
+ clearTimeout(timeoutId.current);
43
+ setState(state);
44
+ latestState.current = state;
45
+ onChange && onChange({
46
+ state: STATES[state]
47
+ });
48
+ };
49
+
50
+ var useTransition = function useTransition(_temp) {
51
+ var _ref = _temp === void 0 ? {} : _temp,
52
+ _ref$enter = _ref.enter,
53
+ enter = _ref$enter === void 0 ? true : _ref$enter,
54
+ _ref$exit = _ref.exit,
55
+ exit = _ref$exit === void 0 ? true : _ref$exit,
56
+ preEnter = _ref.preEnter,
57
+ preExit = _ref.preExit,
58
+ timeout = _ref.timeout,
59
+ initialEntered = _ref.initialEntered,
60
+ mountOnEnter = _ref.mountOnEnter,
61
+ unmountOnExit = _ref.unmountOnExit,
62
+ onChange = _ref.onChange;
63
+
64
+ var _useState = react.useState(initialEntered ? ENTERED : startOrEnd(mountOnEnter)),
65
+ state = _useState[0],
66
+ setState = _useState[1];
67
+
68
+ var latestState = react.useRef(state);
69
+ var timeoutId = react.useRef();
70
+
71
+ var _getTimeout = getTimeout(timeout),
72
+ enterTimeout = _getTimeout[0],
73
+ exitTimeout = _getTimeout[1];
74
+
75
+ var endTransition = react.useCallback(function () {
76
+ var newState = getEndState(latestState.current, unmountOnExit);
77
+ newState && updateState$1(newState, setState, latestState, timeoutId, onChange);
78
+ }, [onChange, unmountOnExit]);
79
+ var toggle = react.useCallback(function (toEnter) {
80
+ var transitState = function transitState(newState) {
81
+ updateState$1(newState, setState, latestState, timeoutId, onChange);
82
+
83
+ switch (newState) {
84
+ case ENTERING:
85
+ if (enterTimeout >= 0) timeoutId.current = setTimeout(endTransition, enterTimeout);
86
+ break;
87
+
88
+ case EXITING:
89
+ if (exitTimeout >= 0) timeoutId.current = setTimeout(endTransition, exitTimeout);
90
+ break;
91
+
92
+ case PRE_ENTER:
93
+ case PRE_EXIT:
94
+ timeoutId.current = setTimeout(function () {
95
+ return transitState(newState + 1);
96
+ }, 0);
97
+ break;
98
+ }
99
+ };
100
+
101
+ var enterStage = latestState.current <= ENTERED;
102
+ if (typeof toEnter !== 'boolean') toEnter = !enterStage;
103
+
104
+ if (toEnter) {
105
+ if (!enterStage) {
106
+ transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
107
+ }
108
+ } else {
109
+ if (enterStage) {
110
+ transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
111
+ }
112
+ }
113
+ }, [endTransition, onChange, enter, exit, preEnter, preExit, enterTimeout, exitTimeout, unmountOnExit]);
114
+ react.useEffect(function () {
115
+ return function () {
116
+ return clearTimeout(timeoutId.current);
117
+ };
118
+ }, []);
119
+ return [STATES[state], toggle, endTransition];
120
+ };
121
+
122
+ function _extends() {
123
+ _extends = Object.assign || function (target) {
124
+ for (var i = 1; i < arguments.length; i++) {
125
+ var source = arguments[i];
126
+
127
+ for (var key in source) {
128
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
129
+ target[key] = source[key];
130
+ }
131
+ }
132
+ }
133
+
134
+ return target;
135
+ };
136
+
137
+ return _extends.apply(this, arguments);
138
+ }
139
+
140
+ var initialStateMap = new Map();
141
+ var initialConfigMap = new Map();
142
+
143
+ var updateState = function updateState(_ref) {
144
+ var key = _ref.key,
145
+ _state = _ref.newState,
146
+ setStateMap = _ref.setStateMap,
147
+ latestStateMap = _ref.latestStateMap,
148
+ timeoutId = _ref.timeoutId,
149
+ onChange = _ref.onChange;
150
+ clearTimeout(timeoutId);
151
+ var state = getFullState(_state);
152
+ var stateMap = new Map(latestStateMap.current);
153
+ stateMap.set(key, state);
154
+ setStateMap(stateMap);
155
+ latestStateMap.current = stateMap;
156
+ onChange && onChange(_extends({
157
+ key: key
158
+ }, state));
159
+ };
160
+
161
+ var useTransitionMap = function useTransitionMap(_temp) {
162
+ var _ref2 = _temp === void 0 ? {} : _temp,
163
+ singleEnter = _ref2.singleEnter;
164
+
165
+ var _useState = react.useState(initialStateMap),
166
+ stateMap = _useState[0],
167
+ setStateMap = _useState[1];
168
+
169
+ var latestStateMap = react.useRef(stateMap);
170
+ var configMap = react.useRef(initialConfigMap);
171
+ var setItem = react.useCallback(function (key, config) {
172
+ if (config === void 0) {
173
+ config = {};
174
+ }
175
+
176
+ var _config = config,
177
+ initialEntered = _config.initialEntered,
178
+ mountOnEnter = _config.mountOnEnter;
179
+ var newState = initialEntered ? ENTERED : startOrEnd(mountOnEnter);
180
+ updateState({
181
+ key: key,
182
+ newState: newState,
183
+ setStateMap: setStateMap,
184
+ latestStateMap: latestStateMap
185
+ });
186
+ configMap.current.set(key, _extends({}, config));
187
+ }, []);
188
+ var deleteItem = react.useCallback(function (key) {
189
+ var newStateMap = new Map(latestStateMap.current);
190
+
191
+ if (newStateMap.delete(key)) {
192
+ setStateMap(newStateMap);
193
+ latestStateMap.current = newStateMap;
194
+ configMap.current.delete(key);
195
+ return true;
196
+ }
197
+
198
+ return false;
199
+ }, []);
200
+ var endTransition = react.useCallback(function (key) {
201
+ var stateObj = latestStateMap.current.get(key);
202
+
203
+ if (!stateObj) {
204
+ process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid key: " + key);
205
+ return;
206
+ }
207
+
208
+ var _configMap$current$ge = configMap.current.get(key),
209
+ timeoutId = _configMap$current$ge.timeoutId,
210
+ onChange = _configMap$current$ge.onChange,
211
+ unmountOnExit = _configMap$current$ge.unmountOnExit;
212
+
213
+ var newState = getEndState(stateObj._state, unmountOnExit);
214
+ newState && updateState({
215
+ key: key,
216
+ newState: newState,
217
+ setStateMap: setStateMap,
218
+ latestStateMap: latestStateMap,
219
+ timeoutId: timeoutId,
220
+ onChange: onChange
221
+ });
222
+ }, []);
223
+ var toggle = react.useCallback(function (key, toEnter) {
224
+ var stateObj = latestStateMap.current.get(key);
225
+
226
+ if (!stateObj) {
227
+ process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid key: " + key);
228
+ return;
229
+ }
230
+
231
+ var config = configMap.current.get(key);
232
+ var _config$enter = config.enter,
233
+ enter = _config$enter === void 0 ? true : _config$enter,
234
+ _config$exit = config.exit,
235
+ exit = _config$exit === void 0 ? true : _config$exit,
236
+ preEnter = config.preEnter,
237
+ preExit = config.preExit,
238
+ timeout = config.timeout,
239
+ unmountOnExit = config.unmountOnExit,
240
+ onChange = config.onChange,
241
+ timeoutId = config.timeoutId;
242
+
243
+ var transitState = function transitState(newState) {
244
+ updateState({
245
+ key: key,
246
+ newState: newState,
247
+ setStateMap: setStateMap,
248
+ latestStateMap: latestStateMap,
249
+ timeoutId: timeoutId,
250
+ onChange: onChange
251
+ });
252
+
253
+ var _getTimeout = getTimeout(timeout),
254
+ enterTimeout = _getTimeout[0],
255
+ exitTimeout = _getTimeout[1];
256
+
257
+ switch (newState) {
258
+ case ENTERING:
259
+ if (enterTimeout >= 0) config.timeoutId = setTimeout(function () {
260
+ return endTransition(key);
261
+ }, enterTimeout);
262
+ break;
263
+
264
+ case EXITING:
265
+ if (exitTimeout >= 0) config.timeoutId = setTimeout(function () {
266
+ return endTransition(key);
267
+ }, exitTimeout);
268
+ break;
269
+
270
+ case PRE_ENTER:
271
+ case PRE_EXIT:
272
+ config.timeoutId = setTimeout(function () {
273
+ return transitState(newState + 1);
274
+ }, 0);
275
+ break;
276
+ }
277
+ };
278
+
279
+ var enterStage = stateObj._state <= ENTERED;
280
+ if (typeof toEnter !== 'boolean') toEnter = !enterStage;
281
+
282
+ if (toEnter) {
283
+ if (!enterStage) {
284
+ transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
285
+ singleEnter && latestStateMap.current.forEach(function (_, _key) {
286
+ return _key !== key && toggle(_key, false);
287
+ });
288
+ }
289
+ } else {
290
+ if (enterStage) {
291
+ transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
292
+ }
293
+ }
294
+ }, [endTransition, singleEnter]);
295
+ return {
296
+ stateMap: stateMap,
297
+ toggle: toggle,
298
+ endTransition: endTransition,
299
+ setItem: setItem,
300
+ deleteItem: deleteItem
301
+ };
302
+ };
303
+
304
+ exports["default"] = useTransition;
305
+ exports.useTransition = useTransition;
306
+ exports.useTransitionMap = useTransitionMap;
@@ -0,0 +1,19 @@
1
+ function _extends() {
2
+ _extends = Object.assign || function (target) {
3
+ for (var i = 1; i < arguments.length; i++) {
4
+ var source = arguments[i];
5
+
6
+ for (var key in source) {
7
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
8
+ target[key] = source[key];
9
+ }
10
+ }
11
+ }
12
+
13
+ return target;
14
+ };
15
+
16
+ return _extends.apply(this, arguments);
17
+ }
18
+
19
+ export { _extends as extends };
@@ -1,17 +1,5 @@
1
1
  import { useState, useRef, useCallback, useEffect } from 'react';
2
-
3
- var PRE_ENTER = 0;
4
- var ENTERING = 1;
5
- var ENTERED = 2;
6
- var PRE_EXIT = 3;
7
- var EXITING = 4;
8
- var EXITED = 5;
9
- var UNMOUNTED = 6;
10
- var STATES = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
11
-
12
- var startOrEnd = function startOrEnd(unmounted) {
13
- return unmounted ? UNMOUNTED : EXITED;
14
- };
2
+ import { ENTERED, startOrEnd, getTimeout, getEndState, PRE_EXIT, EXITING, STATES, PRE_ENTER, ENTERING } from './utils.js';
15
3
 
16
4
  var updateState = function updateState(state, setState, latestState, timeoutId, onChange) {
17
5
  clearTimeout(timeoutId.current);
@@ -42,33 +30,14 @@ var useTransition = function useTransition(_temp) {
42
30
 
43
31
  var latestState = useRef(state);
44
32
  var timeoutId = useRef();
45
- var enterTimeout, exitTimeout;
46
33
 
47
- if (typeof timeout === 'object') {
48
- enterTimeout = timeout.enter;
49
- exitTimeout = timeout.exit;
50
- } else {
51
- enterTimeout = exitTimeout = timeout;
52
- }
34
+ var _getTimeout = getTimeout(timeout),
35
+ enterTimeout = _getTimeout[0],
36
+ exitTimeout = _getTimeout[1];
53
37
 
54
38
  var endTransition = useCallback(function () {
55
- var newState;
56
-
57
- switch (latestState.current) {
58
- case ENTERING:
59
- case PRE_ENTER:
60
- newState = ENTERED;
61
- break;
62
-
63
- case EXITING:
64
- case PRE_EXIT:
65
- newState = startOrEnd(unmountOnExit);
66
- break;
67
- }
68
-
69
- if (newState !== undefined) {
70
- updateState(newState, setState, latestState, timeoutId, onChange);
71
- }
39
+ var newState = getEndState(latestState.current, unmountOnExit);
40
+ newState && updateState(newState, setState, latestState, timeoutId, onChange);
72
41
  }, [onChange, unmountOnExit]);
73
42
  var toggle = useCallback(function (toEnter) {
74
43
  var transitState = function transitState(newState) {
@@ -113,4 +82,4 @@ var useTransition = function useTransition(_temp) {
113
82
  return [STATES[state], toggle, endTransition];
114
83
  };
115
84
 
116
- export { useTransition as default, useTransition };
85
+ export { useTransition };
@@ -0,0 +1,169 @@
1
+ import { extends as _extends } from '../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { useState, useRef, useCallback } from 'react';
3
+ import { ENTERED, startOrEnd, getEndState, PRE_EXIT, EXITING, PRE_ENTER, ENTERING, getFullState, getTimeout } from './utils.js';
4
+
5
+ var initialStateMap = new Map();
6
+ var initialConfigMap = new Map();
7
+
8
+ var updateState = function updateState(_ref) {
9
+ var key = _ref.key,
10
+ _state = _ref.newState,
11
+ setStateMap = _ref.setStateMap,
12
+ latestStateMap = _ref.latestStateMap,
13
+ timeoutId = _ref.timeoutId,
14
+ onChange = _ref.onChange;
15
+ clearTimeout(timeoutId);
16
+ var state = getFullState(_state);
17
+ var stateMap = new Map(latestStateMap.current);
18
+ stateMap.set(key, state);
19
+ setStateMap(stateMap);
20
+ latestStateMap.current = stateMap;
21
+ onChange && onChange(_extends({
22
+ key: key
23
+ }, state));
24
+ };
25
+
26
+ var useTransitionMap = function useTransitionMap(_temp) {
27
+ var _ref2 = _temp === void 0 ? {} : _temp,
28
+ singleEnter = _ref2.singleEnter;
29
+
30
+ var _useState = useState(initialStateMap),
31
+ stateMap = _useState[0],
32
+ setStateMap = _useState[1];
33
+
34
+ var latestStateMap = useRef(stateMap);
35
+ var configMap = useRef(initialConfigMap);
36
+ var setItem = useCallback(function (key, config) {
37
+ if (config === void 0) {
38
+ config = {};
39
+ }
40
+
41
+ var _config = config,
42
+ initialEntered = _config.initialEntered,
43
+ mountOnEnter = _config.mountOnEnter;
44
+ var newState = initialEntered ? ENTERED : startOrEnd(mountOnEnter);
45
+ updateState({
46
+ key: key,
47
+ newState: newState,
48
+ setStateMap: setStateMap,
49
+ latestStateMap: latestStateMap
50
+ });
51
+ configMap.current.set(key, _extends({}, config));
52
+ }, []);
53
+ var deleteItem = useCallback(function (key) {
54
+ var newStateMap = new Map(latestStateMap.current);
55
+
56
+ if (newStateMap.delete(key)) {
57
+ setStateMap(newStateMap);
58
+ latestStateMap.current = newStateMap;
59
+ configMap.current.delete(key);
60
+ return true;
61
+ }
62
+
63
+ return false;
64
+ }, []);
65
+ var endTransition = useCallback(function (key) {
66
+ var stateObj = latestStateMap.current.get(key);
67
+
68
+ if (!stateObj) {
69
+ process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid key: " + key);
70
+ return;
71
+ }
72
+
73
+ var _configMap$current$ge = configMap.current.get(key),
74
+ timeoutId = _configMap$current$ge.timeoutId,
75
+ onChange = _configMap$current$ge.onChange,
76
+ unmountOnExit = _configMap$current$ge.unmountOnExit;
77
+
78
+ var newState = getEndState(stateObj._state, unmountOnExit);
79
+ newState && updateState({
80
+ key: key,
81
+ newState: newState,
82
+ setStateMap: setStateMap,
83
+ latestStateMap: latestStateMap,
84
+ timeoutId: timeoutId,
85
+ onChange: onChange
86
+ });
87
+ }, []);
88
+ var toggle = useCallback(function (key, toEnter) {
89
+ var stateObj = latestStateMap.current.get(key);
90
+
91
+ if (!stateObj) {
92
+ process.env.NODE_ENV !== 'production' && console.error("[React-Transition-State] invalid key: " + key);
93
+ return;
94
+ }
95
+
96
+ var config = configMap.current.get(key);
97
+ var _config$enter = config.enter,
98
+ enter = _config$enter === void 0 ? true : _config$enter,
99
+ _config$exit = config.exit,
100
+ exit = _config$exit === void 0 ? true : _config$exit,
101
+ preEnter = config.preEnter,
102
+ preExit = config.preExit,
103
+ timeout = config.timeout,
104
+ unmountOnExit = config.unmountOnExit,
105
+ onChange = config.onChange,
106
+ timeoutId = config.timeoutId;
107
+
108
+ var transitState = function transitState(newState) {
109
+ updateState({
110
+ key: key,
111
+ newState: newState,
112
+ setStateMap: setStateMap,
113
+ latestStateMap: latestStateMap,
114
+ timeoutId: timeoutId,
115
+ onChange: onChange
116
+ });
117
+
118
+ var _getTimeout = getTimeout(timeout),
119
+ enterTimeout = _getTimeout[0],
120
+ exitTimeout = _getTimeout[1];
121
+
122
+ switch (newState) {
123
+ case ENTERING:
124
+ if (enterTimeout >= 0) config.timeoutId = setTimeout(function () {
125
+ return endTransition(key);
126
+ }, enterTimeout);
127
+ break;
128
+
129
+ case EXITING:
130
+ if (exitTimeout >= 0) config.timeoutId = setTimeout(function () {
131
+ return endTransition(key);
132
+ }, exitTimeout);
133
+ break;
134
+
135
+ case PRE_ENTER:
136
+ case PRE_EXIT:
137
+ config.timeoutId = setTimeout(function () {
138
+ return transitState(newState + 1);
139
+ }, 0);
140
+ break;
141
+ }
142
+ };
143
+
144
+ var enterStage = stateObj._state <= ENTERED;
145
+ if (typeof toEnter !== 'boolean') toEnter = !enterStage;
146
+
147
+ if (toEnter) {
148
+ if (!enterStage) {
149
+ transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
150
+ singleEnter && latestStateMap.current.forEach(function (_, _key) {
151
+ return _key !== key && toggle(_key, false);
152
+ });
153
+ }
154
+ } else {
155
+ if (enterStage) {
156
+ transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
157
+ }
158
+ }
159
+ }, [endTransition, singleEnter]);
160
+ return {
161
+ stateMap: stateMap,
162
+ toggle: toggle,
163
+ endTransition: endTransition,
164
+ setItem: setItem,
165
+ deleteItem: deleteItem
166
+ };
167
+ };
168
+
169
+ export { useTransitionMap };
@@ -0,0 +1,35 @@
1
+ var PRE_ENTER = 0;
2
+ var ENTERING = 1;
3
+ var ENTERED = 2;
4
+ var PRE_EXIT = 3;
5
+ var EXITING = 4;
6
+ var EXITED = 5;
7
+ var UNMOUNTED = 6;
8
+ var STATES = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
9
+ var getFullState = function getFullState(_state) {
10
+ return {
11
+ _state: _state,
12
+ state: STATES[_state],
13
+ isEnter: _state < PRE_EXIT,
14
+ isMounted: _state !== UNMOUNTED
15
+ };
16
+ };
17
+ var startOrEnd = function startOrEnd(unmounted) {
18
+ return unmounted ? UNMOUNTED : EXITED;
19
+ };
20
+ var getEndState = function getEndState(state, unmountOnExit) {
21
+ switch (state) {
22
+ case ENTERING:
23
+ case PRE_ENTER:
24
+ return ENTERED;
25
+
26
+ case EXITING:
27
+ case PRE_EXIT:
28
+ return startOrEnd(unmountOnExit);
29
+ }
30
+ };
31
+ var getTimeout = function getTimeout(timeout) {
32
+ return typeof timeout === 'object' ? [timeout.enter, timeout.exit] : [timeout, timeout];
33
+ };
34
+
35
+ export { ENTERED, ENTERING, EXITED, EXITING, PRE_ENTER, PRE_EXIT, STATES, UNMOUNTED, getEndState, getFullState, getTimeout, startOrEnd };
@@ -0,0 +1,2 @@
1
+ export { useTransition as default, useTransition } from './hooks/useTransition.js';
2
+ export { useTransitionMap } from './hooks/useTransitionMap.js';
package/package.json CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "name": "react-transition-state",
3
- "version": "1.1.4",
3
+ "version": "1.2.0-alpha.2",
4
4
  "description": "Zero dependency, 0.7KB react-transition-group alternative.",
5
5
  "author": "Zheng Song",
6
6
  "license": "MIT",
7
7
  "repository": "szhsin/react-transition-state",
8
8
  "homepage": "https://szhsin.github.io/react-transition-state/",
9
- "main": "dist/index.js",
10
- "module": "dist/index.es.js",
11
- "types": "dist/index.d.ts",
9
+ "main": "dist/cjs/index.js",
10
+ "module": "dist/es/index.js",
11
+ "types": "types/index.d.ts",
12
12
  "sideEffects": false,
13
13
  "files": [
14
- "dist"
14
+ "dist/",
15
+ "types/*.d.ts"
15
16
  ],
16
17
  "keywords": [
17
18
  "react",
@@ -26,12 +27,12 @@
26
27
  "bundle": "rollup -c",
27
28
  "test": "jest",
28
29
  "eg": "npm start --prefix example",
29
- "dtslint": "dtslint --localTs node_modules/typescript/lib types",
30
- "types": "npm run dtslint && cp -f types/index.d.ts dist/",
30
+ "types": "dtslint --localTs node_modules/typescript/lib types",
31
31
  "tsc": "cd types && tsc",
32
32
  "lint": "eslint .",
33
33
  "lint:fix": "eslint --fix .",
34
- "pret": "prettier --write .",
34
+ "pret": "prettier -c .",
35
+ "pret:fix": "prettier -w .",
35
36
  "build": "run-s clean lint pret bundle types"
36
37
  },
37
38
  "peerDependencies": {
@@ -39,24 +40,24 @@
39
40
  "react-dom": ">=16.8.0"
40
41
  },
41
42
  "devDependencies": {
42
- "@babel/core": "^7.17.5",
43
+ "@babel/core": "^7.17.9",
43
44
  "@babel/preset-env": "^7.16.11",
44
- "@rollup/plugin-babel": "^5.3.0",
45
+ "@rollup/plugin-babel": "^5.3.1",
45
46
  "@testing-library/react-hooks": "^7.0.2",
46
- "@types/jest": "^27.4.0",
47
+ "@types/jest": "^27.4.1",
47
48
  "babel-plugin-pure-annotations": "^0.1.2",
48
49
  "dtslint": "^4.1.6",
49
- "eslint": "^8.9.0",
50
- "eslint-config-prettier": "^8.4.0",
51
- "eslint-plugin-jest": "^26.1.1",
52
- "eslint-plugin-react-hooks": "^4.3.0",
50
+ "eslint": "^8.12.0",
51
+ "eslint-config-prettier": "^8.5.0",
52
+ "eslint-plugin-jest": "^26.1.3",
53
+ "eslint-plugin-react-hooks": "^4.4.0",
53
54
  "jest": "^27.5.1",
54
55
  "npm-run-all": "^4.1.5",
55
- "prettier": "^2.5.1",
56
+ "prettier": "^2.6.2",
56
57
  "react": "^17.0.2",
57
58
  "react-dom": "^17.0.2",
58
59
  "regenerator-runtime": "^0.13.9",
59
- "rollup": "^2.67.3",
60
- "typescript": "^4.5.5"
60
+ "rollup": "^2.70.1",
61
+ "typescript": "^4.6.3"
61
62
  }
62
63
  }
@@ -23,4 +23,22 @@ export const useTransition: (
23
23
  options?: TransitionOptions
24
24
  ) => [TransitionState, (toEnter?: boolean) => void, () => void];
25
25
 
26
+ interface State {
27
+ state: TransitionState;
28
+ isMounted: boolean;
29
+ isEnter: boolean;
30
+ }
31
+
32
+ export interface TransitionMapOptions<K> extends Omit<TransitionOptions, 'onChange'> {
33
+ onChange?: (event: { key: K } & State) => void;
34
+ }
35
+
36
+ export const useTransitionMap: <K>(options?: { singleEnter: boolean }) => {
37
+ stateMap: Omit<Map<K, State>, 'clear' | 'delete' | 'set'>;
38
+ toggle: (key: K, toEnter?: boolean) => void;
39
+ endTransition: (key: K) => void;
40
+ setItem: (key: K, options?: TransitionMapOptions<K>) => void;
41
+ deleteItem: (key: K) => boolean;
42
+ };
43
+
26
44
  export default useTransition;
package/dist/index.js DELETED
@@ -1,121 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var react = require('react');
6
-
7
- var PRE_ENTER = 0;
8
- var ENTERING = 1;
9
- var ENTERED = 2;
10
- var PRE_EXIT = 3;
11
- var EXITING = 4;
12
- var EXITED = 5;
13
- var UNMOUNTED = 6;
14
- var STATES = ['preEnter', 'entering', 'entered', 'preExit', 'exiting', 'exited', 'unmounted'];
15
-
16
- var startOrEnd = function startOrEnd(unmounted) {
17
- return unmounted ? UNMOUNTED : EXITED;
18
- };
19
-
20
- var updateState = function updateState(state, setState, latestState, timeoutId, onChange) {
21
- clearTimeout(timeoutId.current);
22
- setState(state);
23
- latestState.current = state;
24
- onChange && onChange({
25
- state: STATES[state]
26
- });
27
- };
28
-
29
- var useTransition = function useTransition(_temp) {
30
- var _ref = _temp === void 0 ? {} : _temp,
31
- _ref$enter = _ref.enter,
32
- enter = _ref$enter === void 0 ? true : _ref$enter,
33
- _ref$exit = _ref.exit,
34
- exit = _ref$exit === void 0 ? true : _ref$exit,
35
- preEnter = _ref.preEnter,
36
- preExit = _ref.preExit,
37
- timeout = _ref.timeout,
38
- initialEntered = _ref.initialEntered,
39
- mountOnEnter = _ref.mountOnEnter,
40
- unmountOnExit = _ref.unmountOnExit,
41
- onChange = _ref.onChange;
42
-
43
- var _useState = react.useState(initialEntered ? ENTERED : startOrEnd(mountOnEnter)),
44
- state = _useState[0],
45
- setState = _useState[1];
46
-
47
- var latestState = react.useRef(state);
48
- var timeoutId = react.useRef();
49
- var enterTimeout, exitTimeout;
50
-
51
- if (typeof timeout === 'object') {
52
- enterTimeout = timeout.enter;
53
- exitTimeout = timeout.exit;
54
- } else {
55
- enterTimeout = exitTimeout = timeout;
56
- }
57
-
58
- var endTransition = react.useCallback(function () {
59
- var newState;
60
-
61
- switch (latestState.current) {
62
- case ENTERING:
63
- case PRE_ENTER:
64
- newState = ENTERED;
65
- break;
66
-
67
- case EXITING:
68
- case PRE_EXIT:
69
- newState = startOrEnd(unmountOnExit);
70
- break;
71
- }
72
-
73
- if (newState !== undefined) {
74
- updateState(newState, setState, latestState, timeoutId, onChange);
75
- }
76
- }, [onChange, unmountOnExit]);
77
- var toggle = react.useCallback(function (toEnter) {
78
- var transitState = function transitState(newState) {
79
- updateState(newState, setState, latestState, timeoutId, onChange);
80
-
81
- switch (newState) {
82
- case ENTERING:
83
- if (enterTimeout >= 0) timeoutId.current = setTimeout(endTransition, enterTimeout);
84
- break;
85
-
86
- case EXITING:
87
- if (exitTimeout >= 0) timeoutId.current = setTimeout(endTransition, exitTimeout);
88
- break;
89
-
90
- case PRE_ENTER:
91
- case PRE_EXIT:
92
- timeoutId.current = setTimeout(function () {
93
- return transitState(newState + 1);
94
- }, 0);
95
- break;
96
- }
97
- };
98
-
99
- var enterStage = latestState.current <= ENTERED;
100
- if (typeof toEnter !== 'boolean') toEnter = !enterStage;
101
-
102
- if (toEnter) {
103
- if (!enterStage) {
104
- transitState(enter ? preEnter ? PRE_ENTER : ENTERING : ENTERED);
105
- }
106
- } else {
107
- if (enterStage) {
108
- transitState(exit ? preExit ? PRE_EXIT : EXITING : startOrEnd(unmountOnExit));
109
- }
110
- }
111
- }, [endTransition, onChange, enter, exit, preEnter, preExit, enterTimeout, exitTimeout, unmountOnExit]);
112
- react.useEffect(function () {
113
- return function () {
114
- return clearTimeout(timeoutId.current);
115
- };
116
- }, []);
117
- return [STATES[state], toggle, endTransition];
118
- };
119
-
120
- exports['default'] = useTransition;
121
- exports.useTransition = useTransition;