@xstate/react 3.0.1 → 4.0.0-alpha.1

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 (60) hide show
  1. package/{lib → dist/declarations/src}/fsm.d.ts +0 -1
  2. package/{es/index.js → dist/declarations/src/index.d.ts} +1 -1
  3. package/dist/declarations/src/shallowEqual.d.ts +1 -0
  4. package/{es → dist/declarations/src}/types.d.ts +2 -3
  5. package/dist/declarations/src/useActor.d.ts +3 -0
  6. package/{es → dist/declarations/src}/useConstant.d.ts +0 -1
  7. package/{es → dist/declarations/src}/useInterpret.d.ts +4 -5
  8. package/{es → dist/declarations/src}/useMachine.d.ts +4 -5
  9. package/dist/declarations/src/useSelector.d.ts +2 -0
  10. package/{es → dist/declarations/src}/useSpawn.d.ts +0 -1
  11. package/dist/useConstant-644f0e11.cjs.dev.js +74 -0
  12. package/dist/useConstant-94bfdbb5.esm.js +71 -0
  13. package/dist/useConstant-eeb49d3f.cjs.prod.js +17 -0
  14. package/dist/xstate-react.cjs.d.ts +1 -0
  15. package/dist/xstate-react.cjs.dev.js +291 -0
  16. package/dist/xstate-react.cjs.js +7 -0
  17. package/dist/xstate-react.cjs.prod.js +281 -0
  18. package/dist/xstate-react.esm.js +278 -0
  19. package/fsm/dist/xstate-react-fsm.cjs.d.ts +1 -0
  20. package/fsm/dist/xstate-react-fsm.cjs.dev.js +98 -0
  21. package/fsm/dist/xstate-react-fsm.cjs.js +7 -0
  22. package/fsm/dist/xstate-react-fsm.cjs.prod.js +144 -0
  23. package/fsm/dist/xstate-react-fsm.esm.js +89 -0
  24. package/fsm/package.json +3 -5
  25. package/package.json +27 -40
  26. package/dist/xstate-react-fsm.umd.min.js +0 -54
  27. package/dist/xstate-react.umd.min.js +0 -39
  28. package/es/fsm.d.ts +0 -4
  29. package/es/fsm.js +0 -82
  30. package/es/index.d.ts +0 -7
  31. package/es/types.js +0 -1
  32. package/es/useActor.d.ts +0 -9
  33. package/es/useActor.js +0 -60
  34. package/es/useConstant.js +0 -8
  35. package/es/useInterpret.js +0 -105
  36. package/es/useMachine.js +0 -69
  37. package/es/useSelector.d.ts +0 -3
  38. package/es/useSelector.js +0 -36
  39. package/es/useSpawn.js +0 -15
  40. package/es/utils.d.ts +0 -5
  41. package/es/utils.js +0 -83
  42. package/lib/fsm.js +0 -87
  43. package/lib/index.d.ts +0 -7
  44. package/lib/index.js +0 -15
  45. package/lib/types.d.ts +0 -16
  46. package/lib/types.js +0 -2
  47. package/lib/useActor.d.ts +0 -9
  48. package/lib/useActor.js +0 -65
  49. package/lib/useConstant.d.ts +0 -2
  50. package/lib/useConstant.js +0 -11
  51. package/lib/useInterpret.d.ts +0 -14
  52. package/lib/useInterpret.js +0 -110
  53. package/lib/useMachine.d.ts +0 -22
  54. package/lib/useMachine.js +0 -73
  55. package/lib/useSelector.d.ts +0 -3
  56. package/lib/useSelector.js +0 -40
  57. package/lib/useSpawn.d.ts +0 -10
  58. package/lib/useSpawn.js +0 -19
  59. package/lib/utils.d.ts +0 -5
  60. package/lib/utils.js +0 -89
@@ -0,0 +1,144 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var fsm = require('@xstate/fsm');
6
+ var React = require('react');
7
+ var useIsomorphicLayoutEffect = require('use-isomorphic-layout-effect');
8
+ var withSelector = require('use-sync-external-store/shim/with-selector');
9
+ var useConstant = require('../../dist/useConstant-eeb49d3f.cjs.prod.js');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
12
+
13
+ var useIsomorphicLayoutEffect__default = /*#__PURE__*/_interopDefault(useIsomorphicLayoutEffect);
14
+
15
+ function _arrayWithHoles(arr) {
16
+ if (Array.isArray(arr)) return arr;
17
+ }
18
+
19
+ function _iterableToArrayLimit(arr, i) {
20
+ if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
21
+ var _arr = [];
22
+ var _n = true;
23
+ var _d = false;
24
+ var _e = undefined;
25
+
26
+ try {
27
+ for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
28
+ _arr.push(_s.value);
29
+
30
+ if (i && _arr.length === i) break;
31
+ }
32
+ } catch (err) {
33
+ _d = true;
34
+ _e = err;
35
+ } finally {
36
+ try {
37
+ if (!_n && _i["return"] != null) _i["return"]();
38
+ } finally {
39
+ if (_d) throw _e;
40
+ }
41
+ }
42
+
43
+ return _arr;
44
+ }
45
+
46
+ function _arrayLikeToArray(arr, len) {
47
+ if (len == null || len > arr.length) len = arr.length;
48
+
49
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
50
+
51
+ return arr2;
52
+ }
53
+
54
+ function _unsupportedIterableToArray(o, minLen) {
55
+ if (!o) return;
56
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
57
+ var n = Object.prototype.toString.call(o).slice(8, -1);
58
+ if (n === "Object" && o.constructor) n = o.constructor.name;
59
+ if (n === "Map" || n === "Set") return Array.from(o);
60
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
61
+ }
62
+
63
+ function _nonIterableRest() {
64
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
65
+ }
66
+
67
+ function _slicedToArray(arr, i) {
68
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
69
+ }
70
+
71
+ function identity(a) {
72
+ return a;
73
+ }
74
+
75
+ var getServiceState = function getServiceState(service) {
76
+ var currentValue;
77
+ service.subscribe(function (state) {
78
+ currentValue = state;
79
+ }).unsubscribe();
80
+ return currentValue;
81
+ };
82
+
83
+ function useMachine(stateMachine, options) {
84
+ var persistedStateRef = React.useRef();
85
+
86
+ var _useConstant = useConstant.useConstant(function () {
87
+ var queue = [];
88
+ var service = fsm.interpret(fsm.createMachine(stateMachine.config, options ? options : stateMachine._options));
89
+ var send = service.send;
90
+
91
+ service.send = function (event) {
92
+ if (service.status === fsm.InterpreterStatus.NotStarted) {
93
+ queue.push(event);
94
+ return;
95
+ }
96
+
97
+ send(event);
98
+ persistedStateRef.current = service.state;
99
+ };
100
+
101
+ return [service, queue];
102
+ }),
103
+ _useConstant2 = _slicedToArray(_useConstant, 2),
104
+ service = _useConstant2[0],
105
+ queue = _useConstant2[1]; // TODO: consider using `useInsertionEffect` if available
106
+
107
+
108
+ useIsomorphicLayoutEffect__default['default'](function () {
109
+ if (options) {
110
+ service._machine._options = options;
111
+ }
112
+ });
113
+ var useServiceResult = useService(service);
114
+ React.useEffect(function () {
115
+ service.start(persistedStateRef.current);
116
+ queue.forEach(service.send);
117
+ persistedStateRef.current = service.state;
118
+ return function () {
119
+ service.stop();
120
+ };
121
+ }, []);
122
+ return useServiceResult;
123
+ }
124
+
125
+ var isEqual = function isEqual(_prevState, nextState) {
126
+ return nextState.changed === false;
127
+ };
128
+
129
+ function useService(service) {
130
+ var getSnapshot = React.useCallback(function () {
131
+ return getServiceState(service);
132
+ }, [service]);
133
+ var subscribe = React.useCallback(function (handleStoreChange) {
134
+ var _service$subscribe = service.subscribe(handleStoreChange),
135
+ unsubscribe = _service$subscribe.unsubscribe;
136
+
137
+ return unsubscribe;
138
+ }, [service]);
139
+ var storeSnapshot = withSelector.useSyncExternalStoreWithSelector(subscribe, getSnapshot, getSnapshot, identity, isEqual);
140
+ return [storeSnapshot, service.send, service];
141
+ }
142
+
143
+ exports.useMachine = useMachine;
144
+ exports.useService = useService;
@@ -0,0 +1,89 @@
1
+ import { _ as _slicedToArray, u as useConstant } from '../../dist/useConstant-94bfdbb5.esm.js';
2
+ import { interpret, createMachine, InterpreterStatus } from '@xstate/fsm';
3
+ import { useRef, useState, useEffect, useCallback } from 'react';
4
+ import useIsomorphicLayoutEffect from 'use-isomorphic-layout-effect';
5
+ import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';
6
+
7
+ function identity(a) {
8
+ return a;
9
+ }
10
+
11
+ var getServiceState = function getServiceState(service) {
12
+ var currentValue;
13
+ service.subscribe(function (state) {
14
+ currentValue = state;
15
+ }).unsubscribe();
16
+ return currentValue;
17
+ };
18
+
19
+ function useMachine(stateMachine, options) {
20
+ var persistedStateRef = useRef();
21
+
22
+ if (process.env.NODE_ENV !== 'production') {
23
+ var _useState = useState(stateMachine),
24
+ _useState2 = _slicedToArray(_useState, 1),
25
+ initialMachine = _useState2[0];
26
+
27
+ if (stateMachine !== initialMachine) {
28
+ console.warn('Machine given to `useMachine` has changed between renders. This is not supported and might lead to unexpected results.\n' + 'Please make sure that you pass the same Machine as argument each time.');
29
+ }
30
+ }
31
+
32
+ var _useConstant = useConstant(function () {
33
+ var queue = [];
34
+ var service = interpret(createMachine(stateMachine.config, options ? options : stateMachine._options));
35
+ var send = service.send;
36
+
37
+ service.send = function (event) {
38
+ if (service.status === InterpreterStatus.NotStarted) {
39
+ queue.push(event);
40
+ return;
41
+ }
42
+
43
+ send(event);
44
+ persistedStateRef.current = service.state;
45
+ };
46
+
47
+ return [service, queue];
48
+ }),
49
+ _useConstant2 = _slicedToArray(_useConstant, 2),
50
+ service = _useConstant2[0],
51
+ queue = _useConstant2[1]; // TODO: consider using `useInsertionEffect` if available
52
+
53
+
54
+ useIsomorphicLayoutEffect(function () {
55
+ if (options) {
56
+ service._machine._options = options;
57
+ }
58
+ });
59
+ var useServiceResult = useService(service);
60
+ useEffect(function () {
61
+ service.start(persistedStateRef.current);
62
+ queue.forEach(service.send);
63
+ persistedStateRef.current = service.state;
64
+ return function () {
65
+ service.stop();
66
+ };
67
+ }, []);
68
+ return useServiceResult;
69
+ }
70
+
71
+ var isEqual = function isEqual(_prevState, nextState) {
72
+ return nextState.changed === false;
73
+ };
74
+
75
+ function useService(service) {
76
+ var getSnapshot = useCallback(function () {
77
+ return getServiceState(service);
78
+ }, [service]);
79
+ var subscribe = useCallback(function (handleStoreChange) {
80
+ var _service$subscribe = service.subscribe(handleStoreChange),
81
+ unsubscribe = _service$subscribe.unsubscribe;
82
+
83
+ return unsubscribe;
84
+ }, [service]);
85
+ var storeSnapshot = useSyncExternalStoreWithSelector(subscribe, getSnapshot, getSnapshot, identity, isEqual);
86
+ return [storeSnapshot, service.send, service];
87
+ }
88
+
89
+ export { useMachine, useService };
package/fsm/package.json CHANGED
@@ -1,6 +1,4 @@
1
1
  {
2
- "private": true,
3
- "main": "../lib/fsm.js",
4
- "module": "../es/fsm.js",
5
- "types": "../lib/fsm.d.ts"
6
- }
2
+ "main": "dist/xstate-react-fsm.cjs.js",
3
+ "module": "dist/xstate-react-fsm.esm.js"
4
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xstate/react",
3
- "version": "3.0.1",
3
+ "version": "4.0.0-alpha.1",
4
4
  "description": "XState tools for React",
5
5
  "keywords": [
6
6
  "state",
@@ -15,46 +15,37 @@
15
15
  "author": "David Khourshid <davidkpiano@gmail.com>",
16
16
  "homepage": "https://github.com/statelyai/xstate/tree/main/packages/xstate-react#readme",
17
17
  "license": "MIT",
18
- "main": "lib/index.js",
19
- "module": "es/index.js",
20
- "types": "lib/index.d.ts",
21
- "typesVersions": {
22
- "<4.0": {
23
- "lib/index.d.ts": [
24
- "index.v3.d.ts"
25
- ]
26
- }
18
+ "main": "dist/xstate-react.cjs.js",
19
+ "module": "dist/xstate-react.esm.js",
20
+ "exports": {
21
+ "./fsm": {
22
+ "module": "./fsm/dist/xstate-react-fsm.esm.js",
23
+ "default": "./fsm/dist/xstate-react-fsm.cjs.js"
24
+ },
25
+ ".": {
26
+ "module": "./dist/xstate-react.esm.js",
27
+ "default": "./dist/xstate-react.cjs.js"
28
+ },
29
+ "./package.json": "./package.json"
27
30
  },
31
+ "types": "dist/xstate-react.cjs.d.ts",
28
32
  "sideEffects": false,
29
- "directories": {
30
- "lib": "lib",
31
- "test": "test"
32
- },
33
33
  "files": [
34
- "lib/**/*.js",
35
- "lib/**/*.d.ts",
36
- "dist/**/*.js",
37
- "es/**/*.js",
38
- "es/**/*.d.ts",
39
- "fsm/package.json"
34
+ "dist",
35
+ "fsm"
40
36
  ],
41
37
  "repository": {
42
38
  "type": "git",
43
39
  "url": "git+ssh://git@github.com/statelyai/xstate.git"
44
40
  },
45
- "scripts": {
46
- "clean": "rm -rf dist lib tsconfig.tsbuildinfo",
47
- "build": "tsc && tsc --outDir es --module es2015 && rollup -c",
48
- "test": "jest",
49
- "prepare": "npm run build"
50
- },
41
+ "scripts": {},
51
42
  "bugs": {
52
43
  "url": "https://github.com/statelyai/xstate/issues"
53
44
  },
54
45
  "peerDependencies": {
55
- "@xstate/fsm": "^2.0.0",
46
+ "@xstate/fsm": "^3.0.0-alpha.0",
56
47
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
57
- "xstate": "^4.33.0"
48
+ "xstate": "^5.0.0-alpha.1"
58
49
  },
59
50
  "peerDependenciesMeta": {
60
51
  "@xstate/fsm": {
@@ -69,26 +60,22 @@
69
60
  "use-sync-external-store": "^1.0.0"
70
61
  },
71
62
  "devDependencies": {
72
- "@rollup/plugin-commonjs": "^17.0.0",
73
- "@rollup/plugin-node-resolve": "^11.0.1",
74
63
  "@testing-library/react": "^13.0.0",
75
64
  "@types/jsdom": "^12.2.3",
76
65
  "@types/react": "^17.0.43",
77
66
  "@types/react-dom": "^17.0.14",
78
67
  "@types/use-sync-external-store": "^0.0.3",
79
- "@xstate/fsm": "*",
80
- "jest": "^26.6.3",
68
+ "@xstate/fsm": "3.0.0-alpha.0",
81
69
  "jsdom": "^14.0.0",
82
70
  "jsdom-global": "^3.0.2",
83
- "lerna-alias": "3.0.3-0",
84
71
  "react": "^18.0.0",
85
72
  "react-dom": "^18.0.0",
86
- "rollup": "^2.69.0",
87
- "rollup-plugin-replace": "^2.2.0",
88
- "rollup-plugin-terser": "^5.1.2",
89
- "rollup-plugin-typescript2": "^0.30.0",
90
- "ts-jest": "^26.5.6",
91
- "typescript": "^4.5.2",
92
- "xstate": "*"
73
+ "xstate": "5.0.0-alpha.1"
74
+ },
75
+ "preconstruct": {
76
+ "entrypoints": [
77
+ "./index.ts",
78
+ "./fsm.ts"
79
+ ]
93
80
  }
94
81
  }
@@ -1,54 +0,0 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@xstate/fsm"),require("react")):"function"==typeof define&&define.amd?define(["exports","@xstate/fsm","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).XStateReactFSM={},e.XStateFSM,e.React)}(this,(function(e,t,n){"use strict";function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function u(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var o=r(n),c=u(n);var a=n.useLayoutEffect;function f(e){var t={exports:{}};return e(t,t.exports),t.exports
2
- /**
3
- * @license React
4
- * use-sync-external-store-shim.production.min.js
5
- *
6
- * Copyright (c) Facebook, Inc. and its affiliates.
7
- *
8
- * This source code is licensed under the MIT license found in the
9
- * LICENSE file in the root directory of this source tree.
10
- */}var i="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},s=o.default.useState,l=o.default.useEffect,d=o.default.useLayoutEffect,v=o.default.useDebugValue;function p(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!i(e,n)}catch(e){return!0}}var b="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=s({inst:{value:n,getSnapshot:t}}),u=r[0].inst,o=r[1];return d((function(){u.value=n,u.getSnapshot=t,p(u)&&o({inst:u})}),[e,n,t]),l((function(){return p(u)&&o({inst:u}),e((function(){p(u)&&o({inst:u})}))}),[e]),v(n),n},y={useSyncExternalStore:void 0!==o.default.useSyncExternalStore?o.default.useSyncExternalStore:b};
11
- /**
12
- * @license React
13
- * use-sync-external-store-shim.development.js
14
- *
15
- * Copyright (c) Facebook, Inc. and its affiliates.
16
- *
17
- * This source code is licensed under the MIT license found in the
18
- * LICENSE file in the root directory of this source tree.
19
- */
20
- f((function(e,t){}));var S=f((function(e){e.exports=y}));
21
- /**
22
- * @license React
23
- * use-sync-external-store-shim/with-selector.production.min.js
24
- *
25
- * Copyright (c) Facebook, Inc. and its affiliates.
26
- *
27
- * This source code is licensed under the MIT license found in the
28
- * LICENSE file in the root directory of this source tree.
29
- */var h="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},x=S.useSyncExternalStore,E=o.default.useRef,g=o.default.useEffect,j=o.default.useMemo,m=o.default.useDebugValue,O={useSyncExternalStoreWithSelector:function(e,t,n,r,u){var o=E(null);if(null===o.current){var c={hasValue:!1,value:null};o.current=c}else c=o.current;o=j((function(){function e(e){if(!f){if(f=!0,o=e,e=r(e),void 0!==u&&c.hasValue){var t=c.value;if(u(t,e))return a=t}return a=e}if(t=a,h(o,e))return t;var n=r(e);return void 0!==u&&u(t,n)?t:(o=e,a=n)}var o,a,f=!1,i=void 0===n?null:n;return[function(){return e(t())},null===i?void 0:function(){return e(i())}]}),[t,n,r,u]);var a=x(e,o[0],o[1]);return g((function(){c.hasValue=!0,c.value=a}),[a]),m(a),a}};
30
- /**
31
- * @license React
32
- * use-sync-external-store-shim/with-selector.development.js
33
- *
34
- * Copyright (c) Facebook, Inc. and its affiliates.
35
- *
36
- * This source code is licensed under the MIT license found in the
37
- * LICENSE file in the root directory of this source tree.
38
- */
39
- f((function(e,t){}));var w=f((function(e){e.exports=O}));function M(e){return e}var _=function(e,t){return!1===t.changed};function R(e){var t=n.useCallback((function(){return function(e){var t;return e.subscribe((function(e){t=e})).unsubscribe(),t}(e)}),[e]),r=n.useCallback((function(t){return e.subscribe(t).unsubscribe}),[e]);return[w.useSyncExternalStoreWithSelector(r,t,t,M,_),e.send,e]}e.useMachine=function(e,r){var u,o,f=n.useRef(),i=
40
- /*! *****************************************************************************
41
- Copyright (c) Microsoft Corporation.
42
-
43
- Permission to use, copy, modify, and/or distribute this software for any
44
- purpose with or without fee is hereby granted.
45
-
46
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
47
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
48
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
49
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
50
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
51
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
52
- PERFORMANCE OF THIS SOFTWARE.
53
- ***************************************************************************** */
54
- function(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,u,o=n.call(e),c=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)c.push(r.value)}catch(e){u={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(u)throw u.error}}return c}((u=function(){var n=[],u=t.interpret(t.createMachine(e.config,r||e._options)),o=u.send;return u.send=function(e){u.status!==t.InterpreterStatus.NotStarted?(o(e),f.current=u.state):n.push(e)},[u,n]},(o=c.useRef()).current||(o.current={v:u()}),o.current.v),2),s=i[0],l=i[1];a((function(){r&&(s._machine._options=r)}));var d=R(s);return n.useEffect((function(){return s.start(f.current),l.forEach(s.send),f.current=s.state,function(){s.stop()}}),[]),d},e.useService=R,Object.defineProperty(e,"__esModule",{value:!0})}));
@@ -1,39 +0,0 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("react"),require("xstate")):"function"==typeof define&&define.amd?define(["exports","react","xstate"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).XStateReact={},t.React,t.XState)}(this,(function(t,e,n){"use strict";function r(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}function u(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,r.get?r:{enumerable:!0,get:function(){return t[n]}})}})),e.default=t,Object.freeze(e)}var a=r(e),o=u(e),i=function(){return(i=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var u in e=arguments[n])Object.prototype.hasOwnProperty.call(e,u)&&(t[u]=e[u]);return t}).apply(this,arguments)};function c(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,u,a=n.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(r=a.next()).done;)o.push(r.value)}catch(t){u={error:t}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(u)throw u.error}}return o}function s(t){var e={exports:{}};return t(e,e.exports),e.exports
2
- /**
3
- * @license React
4
- * use-sync-external-store-shim.production.min.js
5
- *
6
- * Copyright (c) Facebook, Inc. and its affiliates.
7
- *
8
- * This source code is licensed under the MIT license found in the
9
- * LICENSE file in the root directory of this source tree.
10
- */}var f="function"==typeof Object.is?Object.is:function(t,e){return t===e&&(0!==t||1/t==1/e)||t!=t&&e!=e},l=a.default.useState,v=a.default.useEffect,d=a.default.useLayoutEffect,p=a.default.useDebugValue;function b(t){var e=t.getSnapshot;t=t.value;try{var n=e();return!f(t,n)}catch(t){return!0}}var y="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(t,e){return e()}:function(t,e){var n=e(),r=l({inst:{value:n,getSnapshot:e}}),u=r[0].inst,a=r[1];return d((function(){u.value=n,u.getSnapshot=e,b(u)&&a({inst:u})}),[t,n,e]),v((function(){return b(u)&&a({inst:u}),t((function(){b(u)&&a({inst:u})}))}),[t]),p(n),n},h={useSyncExternalStore:void 0!==a.default.useSyncExternalStore?a.default.useSyncExternalStore:y};
11
- /**
12
- * @license React
13
- * use-sync-external-store-shim.development.js
14
- *
15
- * Copyright (c) Facebook, Inc. and its affiliates.
16
- *
17
- * This source code is licensed under the MIT license found in the
18
- * LICENSE file in the root directory of this source tree.
19
- */
20
- s((function(t,e){}));var S=s((function(t){t.exports=h}));
21
- /**
22
- * @license React
23
- * use-sync-external-store-shim/with-selector.production.min.js
24
- *
25
- * Copyright (c) Facebook, Inc. and its affiliates.
26
- *
27
- * This source code is licensed under the MIT license found in the
28
- * LICENSE file in the root directory of this source tree.
29
- */var g="function"==typeof Object.is?Object.is:function(t,e){return t===e&&(0!==t||1/t==1/e)||t!=t&&e!=e},O=S.useSyncExternalStore,j=a.default.useRef,x=a.default.useEffect,m=a.default.useMemo,E=a.default.useDebugValue,w={useSyncExternalStoreWithSelector:function(t,e,n,r,u){var a=j(null);if(null===a.current){var o={hasValue:!1,value:null};a.current=o}else o=a.current;a=m((function(){function t(t){if(!c){if(c=!0,a=t,t=r(t),void 0!==u&&o.hasValue){var e=o.value;if(u(e,t))return i=e}return i=t}if(e=i,g(a,t))return e;var n=r(t);return void 0!==u&&u(e,n)?e:(a=t,i=n)}var a,i,c=!1,s=void 0===n?null:n;return[function(){return t(e())},null===s?void 0:function(){return t(s())}]}),[e,n,r,u]);var i=O(t,a[0],a[1]);return x((function(){o.hasValue=!0,o.value=i}),[i]),E(i),i}};
30
- /**
31
- * @license React
32
- * use-sync-external-store-shim/with-selector.development.js
33
- *
34
- * Copyright (c) Facebook, Inc. and its affiliates.
35
- *
36
- * This source code is licensed under the MIT license found in the
37
- * LICENSE file in the root directory of this source tree.
38
- */
39
- s((function(t,e){}));var k=s((function(t){t.exports=w})),C=e.useLayoutEffect;function P(t){var e=o.useRef();return e.current||(e.current={v:t()}),e.current.v}function R(t,e){var r=P((function(){return"function"==typeof t?t():t})),u=e.context,a=e.guards,o=e.actions,c=e.activities,s=e.services,f=e.delays;e.state;var l=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var u=0;for(r=Object.getOwnPropertySymbols(t);u<r.length;u++)e.indexOf(r[u])<0&&Object.prototype.propertyIsEnumerable.call(t,r[u])&&(n[r[u]]=t[r[u]])}return n}(e,["context","guards","actions","activities","services","delays","state"]),v=P((function(){var t={context:u,guards:a,actions:o,activities:c,services:s,delays:f},e=r.withConfig(t,(function(){return i(i({},r.context),u)}));return n.interpret(e,l)}));return C((function(){Object.assign(v.machine.options.actions,o),Object.assign(v.machine.options.guards,a),Object.assign(v.machine.options.activities,c),Object.assign(v.machine.options.services,s),Object.assign(v.machine.options.delays,f)}),[o,a,c,s,f]),v}function I(t){return t}function V(t){return"state"in t}function M(t){return"deferred"in t}function N(t){return"getSnapshot"in t?t.getSnapshot():V(t)?t.state:void 0}function _(t,e){return t===e?0!==t||0!==e||1/t==1/e:t!=t&&e!=e}var q=function(t,e){return t===e};t.shallowEqual=function(t,e){if(_(t,e))return!0;if("object"!=typeof t||null===t||"object"!=typeof e||null===e)return!1;var n=Object.keys(t),r=Object.keys(e);if(n.length!==r.length)return!1;for(var u=0;u<n.length;u++)if(!Object.prototype.hasOwnProperty.call(e,n[u])||!_(t[n[u]],e[n[u]]))return!1;return!0},t.useActor=function(t,n){void 0===n&&(n=N);var r=e.useRef(t),u=e.useRef([]),a=e.useCallback((function(e){return t.subscribe(e).unsubscribe}),[t]),o=e.useCallback((function(){return n(t)}),[t,n]),i=S.useSyncExternalStore(a,o,o),c=P((function(){return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=t[0],a=r.current;M(a)&&a.deferred?u.current.push(n):a.send(n)}}));return C((function(){for(r.current=t;u.current.length>0;){var e=u.current.shift();t.send(e)}}),[t]),[i,c]},t.useInterpret=function(t){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];var a=c(r,2),o=a[0],i=void 0===o?{}:o,s=a[1],f=R(t,i);return e.useEffect((function(){if(s){var t=f.subscribe(n.toObserver(s));return function(){t.unsubscribe()}}}),[s]),e.useEffect((function(){var t=i.state;return f.start(t?n.State.create(t):void 0),function(){f.stop(),f.status=n.InterpreterStatus.NotStarted}}),[]),f},t.useMachine=function(t){for(var r=[],u=1;u<arguments.length;u++)r[u-1]=arguments[u];var a=c(r,1),o=a[0],i=void 0===o?{}:o,s=R(t,i),f=e.useCallback((function(){return s.status===n.InterpreterStatus.NotStarted?i.state?n.State.create(i.state):s.machine.initialState:s.state}),[s]),l=e.useCallback((function(t,e){if(s.status===n.InterpreterStatus.NotStarted)return!0;var r=void 0===e.changed&&(Object.keys(e.children).length>0||"boolean"==typeof t.changed);return!(e.changed||r)}),[s]),v=e.useCallback((function(t){return s.subscribe(t).unsubscribe}),[s]),d=k.useSyncExternalStoreWithSelector(v,f,f,I,l);return e.useEffect((function(){var t=i.state;return s.start(t?n.State.create(t):void 0),function(){s.stop(),s.status=n.InterpreterStatus.NotStarted}}),[]),[d,s.send,s]},t.useSelector=function(t,n,r,u){void 0===r&&(r=q);var a=e.useRef(null),o=e.useCallback((function(e){return t.subscribe(e).unsubscribe}),[t]),i=e.useCallback((function(){return u?u(t):function(t,e){if("state"in(u=t)&&"machine"in u){if(0===t.status&&e.current)return e.current;var n=0!==(r=t).status?r.state:r.machine.initialState;return e.current=0===t.status?n:null,n}var r,u;return V(t)?t.state:void 0}(t,a)}),[t,u]);return k.useSyncExternalStoreWithSelector(o,i,i,n,r)},t.useSpawn=function(t){return P((function(){return n.spawnBehavior(t)}))},Object.defineProperty(t,"__esModule",{value:!0})}));
package/es/fsm.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import { MachineImplementationsFrom, ServiceFrom, StateFrom, StateMachine } from '@xstate/fsm';
2
- export declare function useMachine<TMachine extends StateMachine.AnyMachine>(stateMachine: TMachine, options?: MachineImplementationsFrom<TMachine>): [StateFrom<TMachine>, ServiceFrom<TMachine>['send'], ServiceFrom<TMachine>];
3
- export declare function useService<TService extends StateMachine.AnyService>(service: TService): [StateFrom<TService>, TService['send'], TService];
4
- //# sourceMappingURL=fsm.d.ts.map
package/es/fsm.js DELETED
@@ -1,82 +0,0 @@
1
- var __read = (this && this.__read) || function (o, n) {
2
- var m = typeof Symbol === "function" && o[Symbol.iterator];
3
- if (!m) return o;
4
- var i = m.call(o), r, ar = [], e;
5
- try {
6
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
- }
8
- catch (error) { e = { error: error }; }
9
- finally {
10
- try {
11
- if (r && !r.done && (m = i["return"])) m.call(i);
12
- }
13
- finally { if (e) throw e.error; }
14
- }
15
- return ar;
16
- };
17
- import { createMachine, interpret, InterpreterStatus } from '@xstate/fsm';
18
- import { useCallback, useEffect, useRef, useState } from 'react';
19
- import useIsomorphicLayoutEffect from 'use-isomorphic-layout-effect';
20
- import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';
21
- import useConstant from './useConstant';
22
- function identity(a) {
23
- return a;
24
- }
25
- var getServiceState = function (service) {
26
- var currentValue;
27
- service
28
- .subscribe(function (state) {
29
- currentValue = state;
30
- })
31
- .unsubscribe();
32
- return currentValue;
33
- };
34
- export function useMachine(stateMachine, options) {
35
- var persistedStateRef = useRef();
36
- if (process.env.NODE_ENV !== 'production') {
37
- var _a = __read(useState(stateMachine), 1), initialMachine = _a[0];
38
- if (stateMachine !== initialMachine) {
39
- console.warn('Machine given to `useMachine` has changed between renders. This is not supported and might lead to unexpected results.\n' +
40
- 'Please make sure that you pass the same Machine as argument each time.');
41
- }
42
- }
43
- var _b = __read(useConstant(function () {
44
- var queue = [];
45
- var service = interpret(createMachine(stateMachine.config, options ? options : stateMachine._options));
46
- var send = service.send;
47
- service.send = function (event) {
48
- if (service.status === InterpreterStatus.NotStarted) {
49
- queue.push(event);
50
- return;
51
- }
52
- send(event);
53
- persistedStateRef.current = service.state;
54
- };
55
- return [service, queue];
56
- }), 2), service = _b[0], queue = _b[1];
57
- useIsomorphicLayoutEffect(function () {
58
- if (options) {
59
- service._machine._options = options;
60
- }
61
- });
62
- var useServiceResult = useService(service);
63
- useEffect(function () {
64
- service.start(persistedStateRef.current);
65
- queue.forEach(service.send);
66
- persistedStateRef.current = service.state;
67
- return function () {
68
- service.stop();
69
- };
70
- }, []);
71
- return useServiceResult;
72
- }
73
- var isEqual = function (_prevState, nextState) { return nextState.changed === false; };
74
- export function useService(service) {
75
- var getSnapshot = useCallback(function () { return getServiceState(service); }, [service]);
76
- var subscribe = useCallback(function (handleStoreChange) {
77
- var unsubscribe = service.subscribe(handleStoreChange).unsubscribe;
78
- return unsubscribe;
79
- }, [service]);
80
- var storeSnapshot = useSyncExternalStoreWithSelector(subscribe, getSnapshot, getSnapshot, identity, isEqual);
81
- return [storeSnapshot, service.send, service];
82
- }
package/es/index.d.ts DELETED
@@ -1,7 +0,0 @@
1
- export { useMachine } from './useMachine';
2
- export { useActor } from './useActor';
3
- export { useInterpret } from './useInterpret';
4
- export { useSelector } from './useSelector';
5
- export { useSpawn } from './useSpawn';
6
- export { shallowEqual } from './utils';
7
- //# sourceMappingURL=index.d.ts.map
package/es/types.js DELETED
@@ -1 +0,0 @@
1
- export {};
package/es/useActor.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import { ActorRef, EventObject, Sender } from 'xstate';
2
- export declare function isActorWithState<T extends ActorRef<any>>(actorRef: T): actorRef is T & {
3
- state: any;
4
- };
5
- declare type EmittedFromActorRef<TActor extends ActorRef<any, any>> = TActor extends ActorRef<any, infer TEmitted> ? TEmitted : never;
6
- export declare function useActor<TActor extends ActorRef<any, any>>(actorRef: TActor, getSnapshot?: (actor: TActor) => EmittedFromActorRef<TActor>): [EmittedFromActorRef<TActor>, TActor['send']];
7
- export declare function useActor<TEvent extends EventObject, TEmitted>(actorRef: ActorRef<TEvent, TEmitted>, getSnapshot?: (actor: ActorRef<TEvent, TEmitted>) => TEmitted): [TEmitted, Sender<TEvent>];
8
- export {};
9
- //# sourceMappingURL=useActor.d.ts.map
package/es/useActor.js DELETED
@@ -1,60 +0,0 @@
1
- import { useRef, useCallback } from 'react';
2
- import useIsomorphicLayoutEffect from 'use-isomorphic-layout-effect';
3
- import useConstant from './useConstant';
4
- import { useSyncExternalStore } from 'use-sync-external-store/shim';
5
- export function isActorWithState(actorRef) {
6
- return 'state' in actorRef;
7
- }
8
- function isDeferredActor(actorRef) {
9
- return 'deferred' in actorRef;
10
- }
11
- function defaultGetSnapshot(actorRef) {
12
- return 'getSnapshot' in actorRef
13
- ? actorRef.getSnapshot()
14
- : isActorWithState(actorRef)
15
- ? actorRef.state
16
- : undefined;
17
- }
18
- export function useActor(actorRef, getSnapshot) {
19
- if (getSnapshot === void 0) { getSnapshot = defaultGetSnapshot; }
20
- var actorRefRef = useRef(actorRef);
21
- var deferredEventsRef = useRef([]);
22
- var subscribe = useCallback(function (handleStoreChange) {
23
- var unsubscribe = actorRef.subscribe(handleStoreChange).unsubscribe;
24
- return unsubscribe;
25
- }, [actorRef]);
26
- var boundGetSnapshot = useCallback(function () { return getSnapshot(actorRef); }, [
27
- actorRef,
28
- getSnapshot
29
- ]);
30
- var storeSnapshot = useSyncExternalStore(subscribe, boundGetSnapshot, boundGetSnapshot);
31
- var send = useConstant(function () { return function () {
32
- var args = [];
33
- for (var _i = 0; _i < arguments.length; _i++) {
34
- args[_i] = arguments[_i];
35
- }
36
- var event = args[0];
37
- if (process.env.NODE_ENV !== 'production' && args.length > 1) {
38
- console.warn("Unexpected payload: ".concat(JSON.stringify(args[1]), ". Only a single event object can be sent to actor send() functions."));
39
- }
40
- var currentActorRef = actorRefRef.current;
41
- // If the previous actor is a deferred actor,
42
- // queue the events so that they can be replayed
43
- // on the non-deferred actor.
44
- if (isDeferredActor(currentActorRef) && currentActorRef.deferred) {
45
- deferredEventsRef.current.push(event);
46
- }
47
- else {
48
- currentActorRef.send(event);
49
- }
50
- }; });
51
- useIsomorphicLayoutEffect(function () {
52
- actorRefRef.current = actorRef;
53
- // Dequeue deferred events from the previous deferred actorRef
54
- while (deferredEventsRef.current.length > 0) {
55
- var deferredEvent = deferredEventsRef.current.shift();
56
- actorRef.send(deferredEvent);
57
- }
58
- }, [actorRef]);
59
- return [storeSnapshot, send];
60
- }
package/es/useConstant.js DELETED
@@ -1,8 +0,0 @@
1
- import * as React from 'react';
2
- export default function useConstant(fn) {
3
- var ref = React.useRef();
4
- if (!ref.current) {
5
- ref.current = { v: fn() };
6
- }
7
- return ref.current.v;
8
- }