diff --git a/.changeset/config.json b/.changeset/config.json index 2ed1c23c6..9aba3d48f 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -6,6 +6,6 @@ "access": "public", "baseBranch": "main", "updateInternalDependencies": "patch", - "ignore": [], + "ignore": ["remote-view-demos"], "updateInternalDependents": "always" } diff --git a/.changeset/thin-timers-tease.md b/.changeset/thin-timers-tease.md new file mode 100644 index 000000000..6028376a3 --- /dev/null +++ b/.changeset/thin-timers-tease.md @@ -0,0 +1,6 @@ +--- +'@modular-scripts/modular-types': minor +'@modular-scripts/remote-view': minor +--- + +Implement RemoteView diff --git a/.eslintignore b/.eslintignore index 90e7b21b3..1a6492a07 100644 --- a/.eslintignore +++ b/.eslintignore @@ -42,4 +42,7 @@ yarn-error.log* *.tsbuildinfo # Top level test fixtures -/__fixtures__ \ No newline at end of file +/__fixtures__ + +# Only used in RemoteView tests +packages/remote-view-fake-cdn \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index 21b76a4a5..3e3ae817f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,3 +5,4 @@ packages/*/build packages/*/public packages/*/dist-cjs packages/*/dist-types +packages/remote-view-fake-cdn \ No newline at end of file diff --git a/__fixtures__/remote-view-fake-cdn/README.md b/__fixtures__/remote-view-fake-cdn/README.md new file mode 100644 index 000000000..6bcd071cb --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/README.md @@ -0,0 +1,34 @@ +# RemoteView Fake ESM CDN + +This directory gets statically hosted by +`packages/remote-view/src/__tests__/serve.js` in integration tests. The same +script is also used manually to run the `remote-view-demos` package examples. + +## Motivation + +To test `` locally, we need ESM views that are (a) built and (b) +hosted and exposed via http. This is expensive and complicated to do on-the-fly, +hence we have a small set of views/dependencies pre-built and exposed. + +## Contents + +- 4 pre-built ESM views: `esm-view-card`, `esm-view-list` (used in integration + tests), `view1`, `view2` (used in demos) +- React and ReactDOM at 17.0.2, exposed in the same way it would be by esm.sh + (v106). This results in various dirs and files. + +`view1` and `view2` are built against `esm.sh`, whereas the others are built +against `localhost:8484`. + +## Rebuilding the contents + +For any ESM view, you need to `yarn modular build` it, which usually requires +pasting the view into the root `packages` dir temporarily. These packages can't +live there permanently, as it inteferes with Modular's own tests. + +For ESM CDN content (React, ReactDOM etc), these must be manually downloaded and +exposed into this directory using an identical structure. + +Sometimes, it's neccessary to tweak URLs to remove preceding slashes (inside ESM +view index.html files) or add `.js` extensions (for esm.sh manually-downloaded +content). diff --git a/__fixtures__/remote-view-fake-cdn/esm-view-card/index.html b/__fixtures__/remote-view-fake-cdn/esm-view-card/index.html new file mode 100644 index 000000000..d1c745546 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/esm-view-card/index.html @@ -0,0 +1,8 @@ + + + + +
+ + + diff --git a/__fixtures__/remote-view-fake-cdn/esm-view-card/package.json b/__fixtures__/remote-view-fake-cdn/esm-view-card/package.json new file mode 100644 index 000000000..b6adc0328 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/esm-view-card/package.json @@ -0,0 +1,13 @@ +{ + "name": "esm-view-card", + "version": "1.0.0", + "modular": { + "type": "esm-view", + "externalCdnTemplate": "http://localhost:8484/[name]@[version]" + }, + "dependencies": { + "react": "17.0.2" + }, + "bundledDependencies": [], + "module": "/static/js/main.5a34a408.js" +} diff --git a/__fixtures__/remote-view-fake-cdn/esm-view-card/static/js/_trampoline.js b/__fixtures__/remote-view-fake-cdn/esm-view-card/static/js/_trampoline.js new file mode 100644 index 000000000..ec2b0c0be --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/esm-view-card/static/js/_trampoline.js @@ -0,0 +1,5 @@ +import ReactDOM from 'http://localhost:8484/react-dom@17.0.2.js'; +import React from 'http://localhost:8484/react@17.0.2.js'; +import Component from './main.5a34a408.js'; +var DOMRoot = document.getElementById('root'); +ReactDOM.render(React.createElement(Component, null), DOMRoot); diff --git a/__fixtures__/remote-view-fake-cdn/esm-view-card/static/js/main.5a34a408.js b/__fixtures__/remote-view-fake-cdn/esm-view-card/static/js/main.5a34a408.js new file mode 100644 index 000000000..798f17030 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/esm-view-card/static/js/main.5a34a408.js @@ -0,0 +1,37 @@ +import * as e from 'http://localhost:8484/react@17.0.2.js'; +var t = { + d: (e, a) => { + for (var n in a) + t.o(a, n) && + !t.o(e, n) && + Object.defineProperty(e, n, { enumerable: !0, get: a[n] }); + }, + o: (e, t) => Object.prototype.hasOwnProperty.call(e, t), + }, + a = {}; +t.d(a, { Z: () => r }); +const n = ((e) => { + var a = {}; + return t.d(a, e), a; +})({ default: () => e.default, useState: () => e.useState }); +function r() { + const [e, t] = (0, n.useState)('Some card contents'); + return n.default.createElement( + 'div', + null, + n.default.createElement('h1', null, 'My Card'), + n.default.createElement('span', null, e), + n.default.createElement( + 'button', + { + onClick: () => { + t('Some mutated card contents'); + }, + }, + 'Change card content', + ), + ); +} +var l = a.Z; +export { l as default }; +//# sourceMappingURL=main.5a34a408.js.map diff --git a/__fixtures__/remote-view-fake-cdn/esm-view-list/index.html b/__fixtures__/remote-view-fake-cdn/esm-view-list/index.html new file mode 100644 index 000000000..d1c745546 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/esm-view-list/index.html @@ -0,0 +1,8 @@ + + + + +
+ + + diff --git a/__fixtures__/remote-view-fake-cdn/esm-view-list/package.json b/__fixtures__/remote-view-fake-cdn/esm-view-list/package.json new file mode 100644 index 000000000..83538871e --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/esm-view-list/package.json @@ -0,0 +1,13 @@ +{ + "name": "esm-view-list", + "version": "1.0.0", + "modular": { + "type": "esm-view", + "externalCdnTemplate": "http://localhost:8484/[name]@[version]" + }, + "dependencies": { + "react": "17.0.2" + }, + "bundledDependencies": [], + "module": "/static/js/main.874f720c.js" +} diff --git a/__fixtures__/remote-view-fake-cdn/esm-view-list/static/js/_trampoline.js b/__fixtures__/remote-view-fake-cdn/esm-view-list/static/js/_trampoline.js new file mode 100644 index 000000000..edb60cd2d --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/esm-view-list/static/js/_trampoline.js @@ -0,0 +1,5 @@ +import ReactDOM from 'http://localhost:8484/react-dom@17.0.2.js'; +import React from 'http://localhost:8484/react@17.0.2.js'; +import Component from './main.874f720c.js'; +var DOMRoot = document.getElementById('root'); +ReactDOM.render(React.createElement(Component, null), DOMRoot); diff --git a/__fixtures__/remote-view-fake-cdn/esm-view-list/static/js/main.874f720c.js b/__fixtures__/remote-view-fake-cdn/esm-view-list/static/js/main.874f720c.js new file mode 100644 index 000000000..f8a952d01 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/esm-view-list/static/js/main.874f720c.js @@ -0,0 +1,41 @@ +import * as e from 'http://localhost:8484/react@17.0.2.js'; +var t = { + d: (e, a) => { + for (var l in a) + t.o(a, l) && + !t.o(e, l) && + Object.defineProperty(e, l, { enumerable: !0, get: a[l] }); + }, + o: (e, t) => Object.prototype.hasOwnProperty.call(e, t), + }, + a = {}; +t.d(a, { Z: () => r }); +const l = ((e) => { + var a = {}; + return t.d(a, e), a; +})({ default: () => e.default, useState: () => e.useState }); +function r() { + const [e, t] = (0, l.useState)(['foo', 'bar', 'baz']); + return l.default.createElement( + 'div', + null, + l.default.createElement('h1', null, 'My List'), + l.default.createElement( + 'ul', + null, + e.map((e) => l.default.createElement('li', null, e)), + ), + l.default.createElement( + 'button', + { + onClick: () => { + t(['baz', 'bar', 'foo']); + }, + }, + 'Invert list order', + ), + ); +} +var o = a.Z; +export { o as default }; +//# sourceMappingURL=main.874f720c.js.map diff --git a/__fixtures__/remote-view-fake-cdn/index.html b/__fixtures__/remote-view-fake-cdn/index.html new file mode 100644 index 000000000..f29351a63 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/index.html @@ -0,0 +1,8 @@ + + + + +
+ + + diff --git a/__fixtures__/remote-view-fake-cdn/react-dom@17.0.2.js b/__fixtures__/remote-view-fake-cdn/react-dom@17.0.2.js new file mode 100644 index 000000000..299fd03bf --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/react-dom@17.0.2.js @@ -0,0 +1,3 @@ +/* esm.sh - react-dom@17.0.2 */ +export * from 'http://localhost:8484/v106/react-dom@17.0.2/es2022/react-dom.js'; +export { default } from 'http://localhost:8484/v106/react-dom@17.0.2/es2022/react-dom.js'; diff --git a/__fixtures__/remote-view-fake-cdn/react@17.0.2.js b/__fixtures__/remote-view-fake-cdn/react@17.0.2.js new file mode 100644 index 000000000..bd40b9d1d --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/react@17.0.2.js @@ -0,0 +1,3 @@ +/* esm.sh - react@17.0.2 */ +export * from 'http://localhost:8484/stable/react@17.0.2/es2022/react.js'; +export { default } from 'http://localhost:8484/stable/react@17.0.2/es2022/react.js'; diff --git a/__fixtures__/remote-view-fake-cdn/stable/react@17.0.2/es2022/react.js b/__fixtures__/remote-view-fake-cdn/stable/react@17.0.2/es2022/react.js new file mode 100644 index 000000000..5721eb08c --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/stable/react@17.0.2/es2022/react.js @@ -0,0 +1,498 @@ +/* esm.sh - esbuild bundle(react@17.0.2) es2022 production */ +const __object_assign$ = Object.assign; +var Y = Object.create; +var $ = Object.defineProperty; +var G = Object.getOwnPropertyDescriptor; +var J = Object.getOwnPropertyNames; +var K = Object.getPrototypeOf, + Q = Object.prototype.hasOwnProperty; +var X = ((e) => + typeof require < 'u' + ? require + : typeof Proxy < 'u' + ? new Proxy(e, { get: (t, r) => (typeof require < 'u' ? require : t)[r] }) + : e)(function (e) { + if (typeof require < 'u') return require.apply(this, arguments); + throw new Error('Dynamic require of "' + e + '" is not supported'); +}); +var g = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports); +var Z = (e, t, r, u) => { + if ((t && typeof t == 'object') || typeof t == 'function') + for (let o of J(t)) + !Q.call(e, o) && + o !== r && + $(e, o, { + get: () => t[o], + enumerable: !(u = G(t, o)) || u.enumerable, + }); + return e; +}; +var b = (e, t, r) => ( + (r = e != null ? Y(K(e)) : {}), + Z( + t || !e || !e.__esModule + ? $(r, 'default', { value: e, enumerable: !0 }) + : r, + e, + ) +); +var V = g((n) => { + 'use strict'; + var E = __object_assign$, + y = 60103, + j = 60106; + n.Fragment = 60107; + n.StrictMode = 60108; + n.Profiler = 60114; + var x = 60109, + I = 60110, + w = 60112; + n.Suspense = 60113; + var A = 60115, + F = 60116; + typeof Symbol == 'function' && + Symbol.for && + ((l = Symbol.for), + (y = l('react.element')), + (j = l('react.portal')), + (n.Fragment = l('react.fragment')), + (n.StrictMode = l('react.strict_mode')), + (n.Profiler = l('react.profiler')), + (x = l('react.provider')), + (I = l('react.context')), + (w = l('react.forward_ref')), + (n.Suspense = l('react.suspense')), + (A = l('react.memo')), + (F = l('react.lazy'))); + var l, + O = typeof Symbol == 'function' && Symbol.iterator; + function ee(e) { + return e === null || typeof e != 'object' + ? null + : ((e = (O && e[O]) || e['@@iterator']), + typeof e == 'function' ? e : null); + } + function _(e) { + for ( + var t = 'https://reactjs.org/docs/error-decoder.html?invariant=' + e, + r = 1; + r < arguments.length; + r++ + ) + t += '&args[]=' + encodeURIComponent(arguments[r]); + return ( + 'Minified React error #' + + e + + '; visit ' + + t + + ' for the full message or use the non-minified dev environment for full errors and additional helpful warnings.' + ); + } + var L = { + isMounted: function () { + return !1; + }, + enqueueForceUpdate: function () {}, + enqueueReplaceState: function () {}, + enqueueSetState: function () {}, + }, + q = {}; + function d(e, t, r) { + (this.props = e), + (this.context = t), + (this.refs = q), + (this.updater = r || L); + } + d.prototype.isReactComponent = {}; + d.prototype.setState = function (e, t) { + if (typeof e != 'object' && typeof e != 'function' && e != null) + throw Error(_(85)); + this.updater.enqueueSetState(this, e, t, 'setState'); + }; + d.prototype.forceUpdate = function (e) { + this.updater.enqueueForceUpdate(this, e, 'forceUpdate'); + }; + function D() {} + D.prototype = d.prototype; + function S(e, t, r) { + (this.props = e), + (this.context = t), + (this.refs = q), + (this.updater = r || L); + } + var C = (S.prototype = new D()); + C.constructor = S; + E(C, d.prototype); + C.isPureReactComponent = !0; + var R = { current: null }, + M = Object.prototype.hasOwnProperty, + N = { key: !0, ref: !0, __self: !0, __source: !0 }; + function U(e, t, r) { + var u, + o = {}, + f = null, + s = null; + if (t != null) + for (u in (t.ref !== void 0 && (s = t.ref), + t.key !== void 0 && (f = '' + t.key), + t)) + M.call(t, u) && !N.hasOwnProperty(u) && (o[u] = t[u]); + var c = arguments.length - 2; + if (c === 1) o.children = r; + else if (1 < c) { + for (var i = Array(c), p = 0; p < c; p++) i[p] = arguments[p + 2]; + o.children = i; + } + if (e && e.defaultProps) + for (u in ((c = e.defaultProps), c)) o[u] === void 0 && (o[u] = c[u]); + return { + $$typeof: y, + type: e, + key: f, + ref: s, + props: o, + _owner: R.current, + }; + } + function te(e, t) { + return { + $$typeof: y, + type: e.type, + key: t, + ref: e.ref, + props: e.props, + _owner: e._owner, + }; + } + function k(e) { + return typeof e == 'object' && e !== null && e.$$typeof === y; + } + function re(e) { + var t = { '=': '=0', ':': '=2' }; + return ( + '$' + + e.replace(/[=:]/g, function (r) { + return t[r]; + }) + ); + } + var P = /\/+/g; + function h(e, t) { + return typeof e == 'object' && e !== null && e.key != null + ? re('' + e.key) + : t.toString(36); + } + function m(e, t, r, u, o) { + var f = typeof e; + (f === 'undefined' || f === 'boolean') && (e = null); + var s = !1; + if (e === null) s = !0; + else + switch (f) { + case 'string': + case 'number': + s = !0; + break; + case 'object': + switch (e.$$typeof) { + case y: + case j: + s = !0; + } + } + if (s) + return ( + (s = e), + (o = o(s)), + (e = u === '' ? '.' + h(s, 0) : u), + Array.isArray(o) + ? ((r = ''), + e != null && (r = e.replace(P, '$&/') + '/'), + m(o, t, r, '', function (p) { + return p; + })) + : o != null && + (k(o) && + (o = te( + o, + r + + (!o.key || (s && s.key === o.key) + ? '' + : ('' + o.key).replace(P, '$&/') + '/') + + e, + )), + t.push(o)), + 1 + ); + if (((s = 0), (u = u === '' ? '.' : u + ':'), Array.isArray(e))) + for (var c = 0; c < e.length; c++) { + f = e[c]; + var i = u + h(f, c); + s += m(f, t, r, i, o); + } + else if (((i = ee(e)), typeof i == 'function')) + for (e = i.call(e), c = 0; !(f = e.next()).done; ) + (f = f.value), (i = u + h(f, c++)), (s += m(f, t, r, i, o)); + else if (f === 'object') + throw ( + ((t = '' + e), + Error( + _( + 31, + t === '[object Object]' + ? 'object with keys {' + Object.keys(e).join(', ') + '}' + : t, + ), + )) + ); + return s; + } + function v(e, t, r) { + if (e == null) return e; + var u = [], + o = 0; + return ( + m(e, u, '', '', function (f) { + return t.call(r, f, o++); + }), + u + ); + } + function ne(e) { + if (e._status === -1) { + var t = e._result; + (t = t()), + (e._status = 0), + (e._result = t), + t.then( + function (r) { + e._status === 0 && + ((r = r.default), (e._status = 1), (e._result = r)); + }, + function (r) { + e._status === 0 && ((e._status = 2), (e._result = r)); + }, + ); + } + if (e._status === 1) return e._result; + throw e._result; + } + var T = { current: null }; + function a() { + var e = T.current; + if (e === null) throw Error(_(321)); + return e; + } + var oe = { + ReactCurrentDispatcher: T, + ReactCurrentBatchConfig: { transition: 0 }, + ReactCurrentOwner: R, + IsSomeRendererActing: { current: !1 }, + assign: E, + }; + n.Children = { + map: v, + forEach: function (e, t, r) { + v( + e, + function () { + t.apply(this, arguments); + }, + r, + ); + }, + count: function (e) { + var t = 0; + return ( + v(e, function () { + t++; + }), + t + ); + }, + toArray: function (e) { + return ( + v(e, function (t) { + return t; + }) || [] + ); + }, + only: function (e) { + if (!k(e)) throw Error(_(143)); + return e; + }, + }; + n.Component = d; + n.PureComponent = S; + n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = oe; + n.cloneElement = function (e, t, r) { + if (e == null) throw Error(_(267, e)); + var u = E({}, e.props), + o = e.key, + f = e.ref, + s = e._owner; + if (t != null) { + if ( + (t.ref !== void 0 && ((f = t.ref), (s = R.current)), + t.key !== void 0 && (o = '' + t.key), + e.type && e.type.defaultProps) + ) + var c = e.type.defaultProps; + for (i in t) + M.call(t, i) && + !N.hasOwnProperty(i) && + (u[i] = t[i] === void 0 && c !== void 0 ? c[i] : t[i]); + } + var i = arguments.length - 2; + if (i === 1) u.children = r; + else if (1 < i) { + c = Array(i); + for (var p = 0; p < i; p++) c[p] = arguments[p + 2]; + u.children = c; + } + return { $$typeof: y, type: e.type, key: o, ref: f, props: u, _owner: s }; + }; + n.createContext = function (e, t) { + return ( + t === void 0 && (t = null), + (e = { + $$typeof: I, + _calculateChangedBits: t, + _currentValue: e, + _currentValue2: e, + _threadCount: 0, + Provider: null, + Consumer: null, + }), + (e.Provider = { $$typeof: x, _context: e }), + (e.Consumer = e) + ); + }; + n.createElement = U; + n.createFactory = function (e) { + var t = U.bind(null, e); + return (t.type = e), t; + }; + n.createRef = function () { + return { current: null }; + }; + n.forwardRef = function (e) { + return { $$typeof: w, render: e }; + }; + n.isValidElement = k; + n.lazy = function (e) { + return { $$typeof: F, _payload: { _status: -1, _result: e }, _init: ne }; + }; + n.memo = function (e, t) { + return { $$typeof: A, type: e, compare: t === void 0 ? null : t }; + }; + n.useCallback = function (e, t) { + return a().useCallback(e, t); + }; + n.useContext = function (e, t) { + return a().useContext(e, t); + }; + n.useDebugValue = function () {}; + n.useEffect = function (e, t) { + return a().useEffect(e, t); + }; + n.useImperativeHandle = function (e, t, r) { + return a().useImperativeHandle(e, t, r); + }; + n.useLayoutEffect = function (e, t) { + return a().useLayoutEffect(e, t); + }; + n.useMemo = function (e, t) { + return a().useMemo(e, t); + }; + n.useReducer = function (e, t, r) { + return a().useReducer(e, t, r); + }; + n.useRef = function (e) { + return a().useRef(e); + }; + n.useState = function (e) { + return a().useState(e); + }; + n.version = '17.0.2'; +}); +var z = g((ce, B) => { + 'use strict'; + B.exports = V(); +}); +var W = b(z()), + { + Fragment: se, + StrictMode: le, + Profiler: pe, + Suspense: ae, + Children: ye, + Component: de, + PureComponent: _e, + __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ve, + cloneElement: me, + createContext: he, + createElement: Ee, + createFactory: Se, + createRef: Ce, + forwardRef: Re, + isValidElement: ke, + lazy: $e, + memo: ge, + useCallback: Oe, + useContext: Pe, + useDebugValue: je, + useEffect: xe, + useImperativeHandle: Ie, + useLayoutEffect: we, + useMemo: Ae, + useReducer: Fe, + useRef: Le, + useState: qe, + version: De, + } = W, + { default: H, ...ue } = W, + Me = H !== void 0 ? H : ue; +export { + ye as Children, + de as Component, + se as Fragment, + pe as Profiler, + _e as PureComponent, + le as StrictMode, + ae as Suspense, + ve as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, + me as cloneElement, + he as createContext, + Ee as createElement, + Se as createFactory, + Ce as createRef, + Me as default, + Re as forwardRef, + ke as isValidElement, + $e as lazy, + ge as memo, + Oe as useCallback, + Pe as useContext, + je as useDebugValue, + xe as useEffect, + Ie as useImperativeHandle, + we as useLayoutEffect, + Ae as useMemo, + Fe as useReducer, + Le as useRef, + qe as useState, + De as version, +}; +/*! Bundled license information: + +react/cjs/react.production.min.js: + (** @license React v17.0.2 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/__fixtures__/remote-view-fake-cdn/static/js/_trampoline.js b/__fixtures__/remote-view-fake-cdn/static/js/_trampoline.js new file mode 100644 index 000000000..8c82df023 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/static/js/_trampoline.js @@ -0,0 +1,5 @@ +import ReactDOM from 'http://localhost:8484/react-dom@17.0.2.js'; +import React from 'http://localhost:8484/react@17.0.2.js'; +import Component from './main.d2345139.js'; +var DOMRoot = document.getElementById('root'); +ReactDOM.render(React.createElement(Component, null), DOMRoot); diff --git a/__fixtures__/remote-view-fake-cdn/static/js/main.d2345139.js b/__fixtures__/remote-view-fake-cdn/static/js/main.d2345139.js new file mode 100644 index 000000000..e808b152c --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/static/js/main.d2345139.js @@ -0,0 +1,591 @@ +import * as t from 'http://localhost:8484/react@17.0.2.js'; +var e = { + 307: (t, e, r) => { + r(168), (t.exports = self.fetch.bind(self)); + }, + 168: (t, e, r) => { + r.r(e), + r.d(e, { + DOMException: () => B, + Headers: () => y, + Request: () => E, + Response: () => _, + fetch: () => O, + }); + var o = + ('undefined' !== typeof globalThis && globalThis) || + ('undefined' !== typeof self && self) || + ('undefined' !== typeof o && o), + n = 'URLSearchParams' in o, + i = 'Symbol' in o && 'iterator' in Symbol, + s = + 'FileReader' in o && + 'Blob' in o && + (function () { + try { + return new Blob(), !0; + } catch (t) { + return !1; + } + })(), + a = 'FormData' in o, + u = 'ArrayBuffer' in o; + if (u) + var f = [ + '[object Int8Array]', + '[object Uint8Array]', + '[object Uint8ClampedArray]', + '[object Int16Array]', + '[object Uint16Array]', + '[object Int32Array]', + '[object Uint32Array]', + '[object Float32Array]', + '[object Float64Array]', + ], + h = + ArrayBuffer.isView || + function (t) { + return t && f.indexOf(Object.prototype.toString.call(t)) > -1; + }; + function c(t) { + if ( + ('string' !== typeof t && (t = String(t)), + /[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(t) || '' === t) + ) + throw new TypeError( + 'Invalid character in header field name: "' + t + '"', + ); + return t.toLowerCase(); + } + function d(t) { + return 'string' !== typeof t && (t = String(t)), t; + } + function l(t) { + var e = { + next: function () { + var e = t.shift(); + return { done: void 0 === e, value: e }; + }, + }; + return ( + i && + (e[Symbol.iterator] = function () { + return e; + }), + e + ); + } + function y(t) { + (this.map = {}), + t instanceof y + ? t.forEach(function (t, e) { + this.append(e, t); + }, this) + : Array.isArray(t) + ? t.forEach(function (t) { + this.append(t[0], t[1]); + }, this) + : t && + Object.getOwnPropertyNames(t).forEach(function (e) { + this.append(e, t[e]); + }, this); + } + function p(t) { + if (t.bodyUsed) return Promise.reject(new TypeError('Already read')); + t.bodyUsed = !0; + } + function b(t) { + return new Promise(function (e, r) { + (t.onload = function () { + e(t.result); + }), + (t.onerror = function () { + r(t.error); + }); + }); + } + function m(t) { + var e = new FileReader(), + r = b(e); + return e.readAsArrayBuffer(t), r; + } + function w(t) { + if (t.slice) return t.slice(0); + var e = new Uint8Array(t.byteLength); + return e.set(new Uint8Array(t)), e.buffer; + } + function v() { + return ( + (this.bodyUsed = !1), + (this._initBody = function (t) { + var e; + (this.bodyUsed = this.bodyUsed), + (this._bodyInit = t), + t + ? 'string' === typeof t + ? (this._bodyText = t) + : s && Blob.prototype.isPrototypeOf(t) + ? (this._bodyBlob = t) + : a && FormData.prototype.isPrototypeOf(t) + ? (this._bodyFormData = t) + : n && URLSearchParams.prototype.isPrototypeOf(t) + ? (this._bodyText = t.toString()) + : u && s && (e = t) && DataView.prototype.isPrototypeOf(e) + ? ((this._bodyArrayBuffer = w(t.buffer)), + (this._bodyInit = new Blob([this._bodyArrayBuffer]))) + : u && (ArrayBuffer.prototype.isPrototypeOf(t) || h(t)) + ? (this._bodyArrayBuffer = w(t)) + : (this._bodyText = t = Object.prototype.toString.call(t)) + : (this._bodyText = ''), + this.headers.get('content-type') || + ('string' === typeof t + ? this.headers.set('content-type', 'text/plain;charset=UTF-8') + : this._bodyBlob && this._bodyBlob.type + ? this.headers.set('content-type', this._bodyBlob.type) + : n && + URLSearchParams.prototype.isPrototypeOf(t) && + this.headers.set( + 'content-type', + 'application/x-www-form-urlencoded;charset=UTF-8', + )); + }), + s && + ((this.blob = function () { + var t = p(this); + if (t) return t; + if (this._bodyBlob) return Promise.resolve(this._bodyBlob); + if (this._bodyArrayBuffer) + return Promise.resolve(new Blob([this._bodyArrayBuffer])); + if (this._bodyFormData) + throw new Error('could not read FormData body as blob'); + return Promise.resolve(new Blob([this._bodyText])); + }), + (this.arrayBuffer = function () { + if (this._bodyArrayBuffer) { + var t = p(this); + return ( + t || + (ArrayBuffer.isView(this._bodyArrayBuffer) + ? Promise.resolve( + this._bodyArrayBuffer.buffer.slice( + this._bodyArrayBuffer.byteOffset, + this._bodyArrayBuffer.byteOffset + + this._bodyArrayBuffer.byteLength, + ), + ) + : Promise.resolve(this._bodyArrayBuffer)) + ); + } + return this.blob().then(m); + })), + (this.text = function () { + var t = p(this); + if (t) return t; + if (this._bodyBlob) + return (function (t) { + var e = new FileReader(), + r = b(e); + return e.readAsText(t), r; + })(this._bodyBlob); + if (this._bodyArrayBuffer) + return Promise.resolve( + (function (t) { + for ( + var e = new Uint8Array(t), r = new Array(e.length), o = 0; + o < e.length; + o++ + ) + r[o] = String.fromCharCode(e[o]); + return r.join(''); + })(this._bodyArrayBuffer), + ); + if (this._bodyFormData) + throw new Error('could not read FormData body as text'); + return Promise.resolve(this._bodyText); + }), + a && + (this.formData = function () { + return this.text().then(T); + }), + (this.json = function () { + return this.text().then(JSON.parse); + }), + this + ); + } + (y.prototype.append = function (t, e) { + (t = c(t)), (e = d(e)); + var r = this.map[t]; + this.map[t] = r ? r + ', ' + e : e; + }), + (y.prototype.delete = function (t) { + delete this.map[c(t)]; + }), + (y.prototype.get = function (t) { + return (t = c(t)), this.has(t) ? this.map[t] : null; + }), + (y.prototype.has = function (t) { + return this.map.hasOwnProperty(c(t)); + }), + (y.prototype.set = function (t, e) { + this.map[c(t)] = d(e); + }), + (y.prototype.forEach = function (t, e) { + for (var r in this.map) + this.map.hasOwnProperty(r) && t.call(e, this.map[r], r, this); + }), + (y.prototype.keys = function () { + var t = []; + return ( + this.forEach(function (e, r) { + t.push(r); + }), + l(t) + ); + }), + (y.prototype.values = function () { + var t = []; + return ( + this.forEach(function (e) { + t.push(e); + }), + l(t) + ); + }), + (y.prototype.entries = function () { + var t = []; + return ( + this.forEach(function (e, r) { + t.push([r, e]); + }), + l(t) + ); + }), + i && (y.prototype[Symbol.iterator] = y.prototype.entries); + var g = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']; + function E(t, e) { + if (!(this instanceof E)) + throw new TypeError( + 'Please use the "new" operator, this DOM object constructor cannot be called as a function.', + ); + var r = (e = e || {}).body; + if (t instanceof E) { + if (t.bodyUsed) throw new TypeError('Already read'); + (this.url = t.url), + (this.credentials = t.credentials), + e.headers || (this.headers = new y(t.headers)), + (this.method = t.method), + (this.mode = t.mode), + (this.signal = t.signal), + r || null == t._bodyInit || ((r = t._bodyInit), (t.bodyUsed = !0)); + } else this.url = String(t); + if ( + ((this.credentials = + e.credentials || this.credentials || 'same-origin'), + (!e.headers && this.headers) || (this.headers = new y(e.headers)), + (this.method = (function (t) { + var e = t.toUpperCase(); + return g.indexOf(e) > -1 ? e : t; + })(e.method || this.method || 'GET')), + (this.mode = e.mode || this.mode || null), + (this.signal = e.signal || this.signal), + (this.referrer = null), + ('GET' === this.method || 'HEAD' === this.method) && r) + ) + throw new TypeError('Body not allowed for GET or HEAD requests'); + if ( + (this._initBody(r), + ('GET' === this.method || 'HEAD' === this.method) && + ('no-store' === e.cache || 'no-cache' === e.cache)) + ) { + var o = /([?&])_=[^&]*/; + if (o.test(this.url)) + this.url = this.url.replace(o, '$1_=' + new Date().getTime()); + else { + this.url += + (/\?/.test(this.url) ? '&' : '?') + '_=' + new Date().getTime(); + } + } + } + function T(t) { + var e = new FormData(); + return ( + t + .trim() + .split('&') + .forEach(function (t) { + if (t) { + var r = t.split('='), + o = r.shift().replace(/\+/g, ' '), + n = r.join('=').replace(/\+/g, ' '); + e.append(decodeURIComponent(o), decodeURIComponent(n)); + } + }), + e + ); + } + function A(t) { + var e = new y(); + return ( + t + .replace(/\r?\n[\t ]+/g, ' ') + .split('\r') + .map(function (t) { + return 0 === t.indexOf('\n') ? t.substr(1, t.length) : t; + }) + .forEach(function (t) { + var r = t.split(':'), + o = r.shift().trim(); + if (o) { + var n = r.join(':').trim(); + e.append(o, n); + } + }), + e + ); + } + function _(t, e) { + if (!(this instanceof _)) + throw new TypeError( + 'Please use the "new" operator, this DOM object constructor cannot be called as a function.', + ); + e || (e = {}), + (this.type = 'default'), + (this.status = void 0 === e.status ? 200 : e.status), + (this.ok = this.status >= 200 && this.status < 300), + (this.statusText = void 0 === e.statusText ? '' : '' + e.statusText), + (this.headers = new y(e.headers)), + (this.url = e.url || ''), + this._initBody(t); + } + (E.prototype.clone = function () { + return new E(this, { body: this._bodyInit }); + }), + v.call(E.prototype), + v.call(_.prototype), + (_.prototype.clone = function () { + return new _(this._bodyInit, { + status: this.status, + statusText: this.statusText, + headers: new y(this.headers), + url: this.url, + }); + }), + (_.error = function () { + var t = new _(null, { status: 0, statusText: '' }); + return (t.type = 'error'), t; + }); + var x = [301, 302, 303, 307, 308]; + _.redirect = function (t, e) { + if (-1 === x.indexOf(e)) throw new RangeError('Invalid status code'); + return new _(null, { status: e, headers: { location: t } }); + }; + var B = o.DOMException; + try { + new B(); + } catch (P) { + ((B = function (t, e) { + (this.message = t), (this.name = e); + var r = Error(t); + this.stack = r.stack; + }).prototype = Object.create(Error.prototype)), + (B.prototype.constructor = B); + } + function O(t, e) { + return new Promise(function (r, n) { + var i = new E(t, e); + if (i.signal && i.signal.aborted) + return n(new B('Aborted', 'AbortError')); + var a = new XMLHttpRequest(); + function f() { + a.abort(); + } + (a.onload = function () { + var t = { + status: a.status, + statusText: a.statusText, + headers: A(a.getAllResponseHeaders() || ''), + }; + t.url = + 'responseURL' in a + ? a.responseURL + : t.headers.get('X-Request-URL'); + var e = 'response' in a ? a.response : a.responseText; + setTimeout(function () { + r(new _(e, t)); + }, 0); + }), + (a.onerror = function () { + setTimeout(function () { + n(new TypeError('Network request failed')); + }, 0); + }), + (a.ontimeout = function () { + setTimeout(function () { + n(new TypeError('Network request failed')); + }, 0); + }), + (a.onabort = function () { + setTimeout(function () { + n(new B('Aborted', 'AbortError')); + }, 0); + }), + a.open( + i.method, + (function (t) { + try { + return '' === t && o.location.href ? o.location.href : t; + } catch (e) { + return t; + } + })(i.url), + !0, + ), + 'include' === i.credentials + ? (a.withCredentials = !0) + : 'omit' === i.credentials && (a.withCredentials = !1), + 'responseType' in a && + (s + ? (a.responseType = 'blob') + : u && + i.headers.get('Content-Type') && + -1 !== + i.headers + .get('Content-Type') + .indexOf('application/octet-stream') && + (a.responseType = 'arraybuffer')), + !e || 'object' !== typeof e.headers || e.headers instanceof y + ? i.headers.forEach(function (t, e) { + a.setRequestHeader(e, t); + }) + : Object.getOwnPropertyNames(e.headers).forEach(function (t) { + a.setRequestHeader(t, d(e.headers[t])); + }), + i.signal && + (i.signal.addEventListener('abort', f), + (a.onreadystatechange = function () { + 4 === a.readyState && i.signal.removeEventListener('abort', f); + })), + a.send('undefined' === typeof i._bodyInit ? null : i._bodyInit); + }); + } + (O.polyfill = !0), + o.fetch || + ((o.fetch = O), (o.Headers = y), (o.Request = E), (o.Response = _)); + }, + }, + r = {}; +function o(t) { + var n = r[t]; + if (void 0 !== n) return n.exports; + var i = (r[t] = { exports: {} }); + return e[t](i, i.exports, o), i.exports; +} +(o.d = (t, e) => { + for (var r in e) + o.o(e, r) && + !o.o(t, r) && + Object.defineProperty(t, r, { enumerable: !0, get: e[r] }); +}), + (o.o = (t, e) => Object.prototype.hasOwnProperty.call(t, e)), + (o.r = (t) => { + 'undefined' !== typeof Symbol && + Symbol.toStringTag && + Object.defineProperty(t, Symbol.toStringTag, { value: 'Module' }), + Object.defineProperty(t, '__esModule', { value: !0 }); + }); +var n = {}; +(() => { + o.d(n, { Z: () => h }); + const e = ((t) => { + var e = {}; + return o.d(e, t), e; + })({ + createContext: () => t.createContext, + default: () => t.default, + useContext: () => t.useContext, + useEffect: () => t.useEffect, + useState: () => t.useState, + }), + r = (0, e.createContext)([{}, () => null]), + i = Symbol('loading'); + o(307); + function s(t) { + const e = document.head; + e.querySelector(`link[href="${t}"]`) || + e.insertAdjacentHTML( + 'beforeend', + ``, + ); + } + const a = (t, o) => { + const [n, a] = (0, e.useContext)(r), + u = n[t]; + return ( + (0, e.useEffect)(() => { + void 0 === u && + (async function (t, r) { + const o = await fetch(`${t}/package.json`), + n = await o.json(), + i = n?.modular?.type; + if (!i || ('esm-view' !== i && 'app' !== i)) + throw new Error( + `Can't load package ${ + n.name + } because type is missing or not supported: "${ + i || JSON.stringify(i) + }"`, + ); + if ('app' === i || (r && r(n))) + return () => + e.default.createElement('iframe', { + title: n.name, + src: `${t}/index.html`, + }); + if ( + (n.styleImports?.forEach(s), + n.style && s(`${t}/${n.style}`), + n.module) + ) { + const { default: e } = await import(`${t}${n.module}`); + return e; + } + })(t, o).then((e) => { + e && a((r) => ({ ...r, [t]: e })); + }); + }, [u, t, a, o]), + void 0 === u || u === i ? null : u + ); + }, + u = ({ baseUrl: t, loadWithIframeFallback: r }) => { + const o = a(t, r); + return ( + (o && e.default.createElement(o, null)) || + e.default.createElement('div', null, 'Loading') + ); + }, + f = ({ children: t }) => { + const o = (0, e.useState)({}); + return e.default.createElement(r.Provider, { value: o }, t); + }; + function h() { + const [t] = (0, e.useState)([ + 'http://localhost:8484/esm-view-card', + 'http://localhost:8484/esm-view-list', + ]); + return e.default.createElement( + f, + null, + t.map((t, r) => + e.default.createElement( + 'section', + { key: r }, + e.default.createElement(u, { baseUrl: t }), + ), + ), + ); + } +})(); +var i = n.Z; +export { i as default }; +//# sourceMappingURL=main.d2345139.js.map diff --git a/__fixtures__/remote-view-fake-cdn/v106/react-dom@17.0.2/es2022/react-dom.js b/__fixtures__/remote-view-fake-cdn/v106/react-dom@17.0.2/es2022/react-dom.js new file mode 100644 index 000000000..6a341d999 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/v106/react-dom@17.0.2/es2022/react-dom.js @@ -0,0 +1,7694 @@ +/* esm.sh - esbuild bundle(react-dom@17.0.2) es2022 production */ +import __2$ from '/v106/scheduler@0.20.2/es2022/scheduler.js'; +const __1$ = Object.assign; +import __0$ from '/stable/react@17.0.2/es2022/react.js'; +var Ns = Object.create; +var Oi = Object.defineProperty; +var Ps = Object.getOwnPropertyDescriptor; +var Ts = Object.getOwnPropertyNames; +var Ls = Object.getPrototypeOf, + zs = Object.prototype.hasOwnProperty; +var Or = ((e) => + typeof require < 'u' + ? require + : typeof Proxy < 'u' + ? new Proxy(e, { get: (n, t) => (typeof require < 'u' ? require : n)[t] }) + : e)(function (e) { + if (typeof require < 'u') return require.apply(this, arguments); + throw new Error('Dynamic require of "' + e + '" is not supported'); +}); +var Mi = (e, n) => () => (n || e((n = { exports: {} }).exports, n), n.exports); +var Os = (e, n, t, r) => { + if ((n && typeof n == 'object') || typeof n == 'function') + for (let l of Ts(n)) + !zs.call(e, l) && + l !== t && + Oi(e, l, { + get: () => n[l], + enumerable: !(r = Ps(n, l)) || r.enumerable, + }); + return e; +}; +var Ms = (e, n, t) => ( + (t = e != null ? Ns(Ls(e)) : {}), + Os( + n || !e || !e.__esModule + ? Oi(t, 'default', { value: e, enumerable: !0 }) + : t, + e, + ) +); +var ws = Mi((ie) => { + 'use strict'; + var yr = __0$, + M = __1$, + U = __2$; + function v(e) { + for ( + var n = 'https://reactjs.org/docs/error-decoder.html?invariant=' + e, + t = 1; + t < arguments.length; + t++ + ) + n += '&args[]=' + encodeURIComponent(arguments[t]); + return ( + 'Minified React error #' + + e + + '; visit ' + + n + + ' for the full message or use the non-minified dev environment for full errors and additional helpful warnings.' + ); + } + if (!yr) throw Error(v(227)); + var Yo = new Set(), + ot = {}; + function Je(e, n) { + kn(e, n), kn(e + 'Capture', n); + } + function kn(e, n) { + for (ot[e] = n, e = 0; e < n.length; e++) Yo.add(n[e]); + } + var we = !( + typeof window > 'u' || + typeof window.document > 'u' || + typeof window.document.createElement > 'u' + ), + Rs = + /^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/, + Ri = Object.prototype.hasOwnProperty, + Di = {}, + Ii = {}; + function Ds(e) { + return Ri.call(Ii, e) + ? !0 + : Ri.call(Di, e) + ? !1 + : Rs.test(e) + ? (Ii[e] = !0) + : ((Di[e] = !0), !1); + } + function Is(e, n, t, r) { + if (t !== null && t.type === 0) return !1; + switch (typeof n) { + case 'function': + case 'symbol': + return !0; + case 'boolean': + return r + ? !1 + : t !== null + ? !t.acceptsBooleans + : ((e = e.toLowerCase().slice(0, 5)), e !== 'data-' && e !== 'aria-'); + default: + return !1; + } + } + function Fs(e, n, t, r) { + if (n === null || typeof n > 'u' || Is(e, n, t, r)) return !0; + if (r) return !1; + if (t !== null) + switch (t.type) { + case 3: + return !n; + case 4: + return n === !1; + case 5: + return isNaN(n); + case 6: + return isNaN(n) || 1 > n; + } + return !1; + } + function X(e, n, t, r, l, i, o) { + (this.acceptsBooleans = n === 2 || n === 3 || n === 4), + (this.attributeName = r), + (this.attributeNamespace = l), + (this.mustUseProperty = t), + (this.propertyName = e), + (this.type = n), + (this.sanitizeURL = i), + (this.removeEmptyString = o); + } + var H = {}; + 'children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style' + .split(' ') + .forEach(function (e) { + H[e] = new X(e, 0, !1, e, null, !1, !1); + }); + [ + ['acceptCharset', 'accept-charset'], + ['className', 'class'], + ['htmlFor', 'for'], + ['httpEquiv', 'http-equiv'], + ].forEach(function (e) { + var n = e[0]; + H[n] = new X(n, 1, !1, e[1], null, !1, !1); + }); + ['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (e) { + H[e] = new X(e, 2, !1, e.toLowerCase(), null, !1, !1); + }); + [ + 'autoReverse', + 'externalResourcesRequired', + 'focusable', + 'preserveAlpha', + ].forEach(function (e) { + H[e] = new X(e, 2, !1, e, null, !1, !1); + }); + 'allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope' + .split(' ') + .forEach(function (e) { + H[e] = new X(e, 3, !1, e.toLowerCase(), null, !1, !1); + }); + ['checked', 'multiple', 'muted', 'selected'].forEach(function (e) { + H[e] = new X(e, 3, !0, e, null, !1, !1); + }); + ['capture', 'download'].forEach(function (e) { + H[e] = new X(e, 4, !1, e, null, !1, !1); + }); + ['cols', 'rows', 'size', 'span'].forEach(function (e) { + H[e] = new X(e, 6, !1, e, null, !1, !1); + }); + ['rowSpan', 'start'].forEach(function (e) { + H[e] = new X(e, 5, !1, e.toLowerCase(), null, !1, !1); + }); + var Bl = /[\-:]([a-z])/g; + function Hl(e) { + return e[1].toUpperCase(); + } + 'accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height' + .split(' ') + .forEach(function (e) { + var n = e.replace(Bl, Hl); + H[n] = new X(n, 1, !1, e, null, !1, !1); + }); + 'xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type' + .split(' ') + .forEach(function (e) { + var n = e.replace(Bl, Hl); + H[n] = new X(n, 1, !1, e, 'http://www.w3.org/1999/xlink', !1, !1); + }); + ['xml:base', 'xml:lang', 'xml:space'].forEach(function (e) { + var n = e.replace(Bl, Hl); + H[n] = new X(n, 1, !1, e, 'http://www.w3.org/XML/1998/namespace', !1, !1); + }); + ['tabIndex', 'crossOrigin'].forEach(function (e) { + H[e] = new X(e, 1, !1, e.toLowerCase(), null, !1, !1); + }); + H.xlinkHref = new X( + 'xlinkHref', + 1, + !1, + 'xlink:href', + 'http://www.w3.org/1999/xlink', + !0, + !1, + ); + ['src', 'href', 'action', 'formAction'].forEach(function (e) { + H[e] = new X(e, 1, !1, e.toLowerCase(), null, !0, !0); + }); + function Wl(e, n, t, r) { + var l = H.hasOwnProperty(n) ? H[n] : null, + i = + l !== null + ? l.type === 0 + : r + ? !1 + : !( + !(2 < n.length) || + (n[0] !== 'o' && n[0] !== 'O') || + (n[1] !== 'n' && n[1] !== 'N') + ); + i || + (Fs(n, t, l, r) && (t = null), + r || l === null + ? Ds(n) && + (t === null ? e.removeAttribute(n) : e.setAttribute(n, '' + t)) + : l.mustUseProperty + ? (e[l.propertyName] = t === null ? (l.type === 3 ? !1 : '') : t) + : ((n = l.attributeName), + (r = l.attributeNamespace), + t === null + ? e.removeAttribute(n) + : ((l = l.type), + (t = l === 3 || (l === 4 && t === !0) ? '' : '' + t), + r ? e.setAttributeNS(r, n, t) : e.setAttribute(n, t)))); + } + var qe = yr.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, + An = 60103, + We = 60106, + ke = 60107, + Al = 60108, + Kn = 60114, + Ql = 60109, + $l = 60110, + gr = 60112, + Gn = 60113, + Kt = 60120, + wr = 60115, + Yl = 60116, + Xl = 60121, + Kl = 60128, + Xo = 60129, + Gl = 60130, + el = 60131; + typeof Symbol == 'function' && + Symbol.for && + ((F = Symbol.for), + (An = F('react.element')), + (We = F('react.portal')), + (ke = F('react.fragment')), + (Al = F('react.strict_mode')), + (Kn = F('react.profiler')), + (Ql = F('react.provider')), + ($l = F('react.context')), + (gr = F('react.forward_ref')), + (Gn = F('react.suspense')), + (Kt = F('react.suspense_list')), + (wr = F('react.memo')), + (Yl = F('react.lazy')), + (Xl = F('react.block')), + F('react.scope'), + (Kl = F('react.opaque.id')), + (Xo = F('react.debug_trace_mode')), + (Gl = F('react.offscreen')), + (el = F('react.legacy_hidden'))); + var F, + Fi = typeof Symbol == 'function' && Symbol.iterator; + function On(e) { + return e === null || typeof e != 'object' + ? null + : ((e = (Fi && e[Fi]) || e['@@iterator']), + typeof e == 'function' ? e : null); + } + var Mr; + function Qn(e) { + if (Mr === void 0) + try { + throw Error(); + } catch (t) { + var n = t.stack.trim().match(/\n( *(at )?)/); + Mr = (n && n[1]) || ''; + } + return ( + ` +` + + Mr + + e + ); + } + var Rr = !1; + function _t(e, n) { + if (!e || Rr) return ''; + Rr = !0; + var t = Error.prepareStackTrace; + Error.prepareStackTrace = void 0; + try { + if (n) + if ( + ((n = function () { + throw Error(); + }), + Object.defineProperty(n.prototype, 'props', { + set: function () { + throw Error(); + }, + }), + typeof Reflect == 'object' && Reflect.construct) + ) { + try { + Reflect.construct(n, []); + } catch (s) { + var r = s; + } + Reflect.construct(e, [], n); + } else { + try { + n.call(); + } catch (s) { + r = s; + } + e.call(n.prototype); + } + else { + try { + throw Error(); + } catch (s) { + r = s; + } + e(); + } + } catch (s) { + if (s && r && typeof s.stack == 'string') { + for ( + var l = s.stack.split(` +`), + i = r.stack.split(` +`), + o = l.length - 1, + u = i.length - 1; + 1 <= o && 0 <= u && l[o] !== i[u]; + + ) + u--; + for (; 1 <= o && 0 <= u; o--, u--) + if (l[o] !== i[u]) { + if (o !== 1 || u !== 1) + do + if ((o--, u--, 0 > u || l[o] !== i[u])) + return ( + ` +` + l[o].replace(' at new ', ' at ') + ); + while (1 <= o && 0 <= u); + break; + } + } + } finally { + (Rr = !1), (Error.prepareStackTrace = t); + } + return (e = e ? e.displayName || e.name : '') ? Qn(e) : ''; + } + function js(e) { + switch (e.tag) { + case 5: + return Qn(e.type); + case 16: + return Qn('Lazy'); + case 13: + return Qn('Suspense'); + case 19: + return Qn('SuspenseList'); + case 0: + case 2: + case 15: + return (e = _t(e.type, !1)), e; + case 11: + return (e = _t(e.type.render, !1)), e; + case 22: + return (e = _t(e.type._render, !1)), e; + case 1: + return (e = _t(e.type, !0)), e; + default: + return ''; + } + } + function dn(e) { + if (e == null) return null; + if (typeof e == 'function') return e.displayName || e.name || null; + if (typeof e == 'string') return e; + switch (e) { + case ke: + return 'Fragment'; + case We: + return 'Portal'; + case Kn: + return 'Profiler'; + case Al: + return 'StrictMode'; + case Gn: + return 'Suspense'; + case Kt: + return 'SuspenseList'; + } + if (typeof e == 'object') + switch (e.$$typeof) { + case $l: + return (e.displayName || 'Context') + '.Consumer'; + case Ql: + return (e._context.displayName || 'Context') + '.Provider'; + case gr: + var n = e.render; + return ( + (n = n.displayName || n.name || ''), + e.displayName || (n !== '' ? 'ForwardRef(' + n + ')' : 'ForwardRef') + ); + case wr: + return dn(e.type); + case Xl: + return dn(e._render); + case Yl: + (n = e._payload), (e = e._init); + try { + return dn(e(n)); + } catch {} + } + return null; + } + function De(e) { + switch (typeof e) { + case 'boolean': + case 'number': + case 'object': + case 'string': + case 'undefined': + return e; + default: + return ''; + } + } + function Ko(e) { + var n = e.type; + return ( + (e = e.nodeName) && + e.toLowerCase() === 'input' && + (n === 'checkbox' || n === 'radio') + ); + } + function Us(e) { + var n = Ko(e) ? 'checked' : 'value', + t = Object.getOwnPropertyDescriptor(e.constructor.prototype, n), + r = '' + e[n]; + if ( + !e.hasOwnProperty(n) && + typeof t < 'u' && + typeof t.get == 'function' && + typeof t.set == 'function' + ) { + var l = t.get, + i = t.set; + return ( + Object.defineProperty(e, n, { + configurable: !0, + get: function () { + return l.call(this); + }, + set: function (o) { + (r = '' + o), i.call(this, o); + }, + }), + Object.defineProperty(e, n, { enumerable: t.enumerable }), + { + getValue: function () { + return r; + }, + setValue: function (o) { + r = '' + o; + }, + stopTracking: function () { + (e._valueTracker = null), delete e[n]; + }, + } + ); + } + } + function Nt(e) { + e._valueTracker || (e._valueTracker = Us(e)); + } + function Go(e) { + if (!e) return !1; + var n = e._valueTracker; + if (!n) return !0; + var t = n.getValue(), + r = ''; + return ( + e && (r = Ko(e) ? (e.checked ? 'true' : 'false') : e.value), + (e = r), + e !== t ? (n.setValue(e), !0) : !1 + ); + } + function Gt(e) { + if ( + ((e = e || (typeof document < 'u' ? document : void 0)), typeof e > 'u') + ) + return null; + try { + return e.activeElement || e.body; + } catch { + return e.body; + } + } + function nl(e, n) { + var t = n.checked; + return M({}, n, { + defaultChecked: void 0, + defaultValue: void 0, + value: void 0, + checked: t ?? e._wrapperState.initialChecked, + }); + } + function ji(e, n) { + var t = n.defaultValue == null ? '' : n.defaultValue, + r = n.checked != null ? n.checked : n.defaultChecked; + (t = De(n.value != null ? n.value : t)), + (e._wrapperState = { + initialChecked: r, + initialValue: t, + controlled: + n.type === 'checkbox' || n.type === 'radio' + ? n.checked != null + : n.value != null, + }); + } + function Zo(e, n) { + (n = n.checked), n != null && Wl(e, 'checked', n, !1); + } + function tl(e, n) { + Zo(e, n); + var t = De(n.value), + r = n.type; + if (t != null) + r === 'number' + ? ((t === 0 && e.value === '') || e.value != t) && (e.value = '' + t) + : e.value !== '' + t && (e.value = '' + t); + else if (r === 'submit' || r === 'reset') { + e.removeAttribute('value'); + return; + } + n.hasOwnProperty('value') + ? rl(e, n.type, t) + : n.hasOwnProperty('defaultValue') && rl(e, n.type, De(n.defaultValue)), + n.checked == null && + n.defaultChecked != null && + (e.defaultChecked = !!n.defaultChecked); + } + function Ui(e, n, t) { + if (n.hasOwnProperty('value') || n.hasOwnProperty('defaultValue')) { + var r = n.type; + if ( + !( + (r !== 'submit' && r !== 'reset') || + (n.value !== void 0 && n.value !== null) + ) + ) + return; + (n = '' + e._wrapperState.initialValue), + t || n === e.value || (e.value = n), + (e.defaultValue = n); + } + (t = e.name), + t !== '' && (e.name = ''), + (e.defaultChecked = !!e._wrapperState.initialChecked), + t !== '' && (e.name = t); + } + function rl(e, n, t) { + (n !== 'number' || Gt(e.ownerDocument) !== e) && + (t == null + ? (e.defaultValue = '' + e._wrapperState.initialValue) + : e.defaultValue !== '' + t && (e.defaultValue = '' + t)); + } + function Vs(e) { + var n = ''; + return ( + yr.Children.forEach(e, function (t) { + t != null && (n += t); + }), + n + ); + } + function ll(e, n) { + return ( + (e = M({ children: void 0 }, n)), + (n = Vs(n.children)) && (e.children = n), + e + ); + } + function pn(e, n, t, r) { + if (((e = e.options), n)) { + n = {}; + for (var l = 0; l < t.length; l++) n['$' + t[l]] = !0; + for (t = 0; t < e.length; t++) + (l = n.hasOwnProperty('$' + e[t].value)), + e[t].selected !== l && (e[t].selected = l), + l && r && (e[t].defaultSelected = !0); + } else { + for (t = '' + De(t), n = null, l = 0; l < e.length; l++) { + if (e[l].value === t) { + (e[l].selected = !0), r && (e[l].defaultSelected = !0); + return; + } + n !== null || e[l].disabled || (n = e[l]); + } + n !== null && (n.selected = !0); + } + } + function il(e, n) { + if (n.dangerouslySetInnerHTML != null) throw Error(v(91)); + return M({}, n, { + value: void 0, + defaultValue: void 0, + children: '' + e._wrapperState.initialValue, + }); + } + function Vi(e, n) { + var t = n.value; + if (t == null) { + if (((t = n.children), (n = n.defaultValue), t != null)) { + if (n != null) throw Error(v(92)); + if (Array.isArray(t)) { + if (!(1 >= t.length)) throw Error(v(93)); + t = t[0]; + } + n = t; + } + n == null && (n = ''), (t = n); + } + e._wrapperState = { initialValue: De(t) }; + } + function Jo(e, n) { + var t = De(n.value), + r = De(n.defaultValue); + t != null && + ((t = '' + t), + t !== e.value && (e.value = t), + n.defaultValue == null && e.defaultValue !== t && (e.defaultValue = t)), + r != null && (e.defaultValue = '' + r); + } + function Bi(e) { + var n = e.textContent; + n === e._wrapperState.initialValue && + n !== '' && + n !== null && + (e.value = n); + } + var ol = { + html: 'http://www.w3.org/1999/xhtml', + mathml: 'http://www.w3.org/1998/Math/MathML', + svg: 'http://www.w3.org/2000/svg', + }; + function qo(e) { + switch (e) { + case 'svg': + return 'http://www.w3.org/2000/svg'; + case 'math': + return 'http://www.w3.org/1998/Math/MathML'; + default: + return 'http://www.w3.org/1999/xhtml'; + } + } + function ul(e, n) { + return e == null || e === 'http://www.w3.org/1999/xhtml' + ? qo(n) + : e === 'http://www.w3.org/2000/svg' && n === 'foreignObject' + ? 'http://www.w3.org/1999/xhtml' + : e; + } + var Pt, + bo = (function (e) { + return typeof MSApp < 'u' && MSApp.execUnsafeLocalFunction + ? function (n, t, r, l) { + MSApp.execUnsafeLocalFunction(function () { + return e(n, t, r, l); + }); + } + : e; + })(function (e, n) { + if (e.namespaceURI !== ol.svg || 'innerHTML' in e) e.innerHTML = n; + else { + for ( + Pt = Pt || document.createElement('div'), + Pt.innerHTML = '' + n.valueOf().toString() + '', + n = Pt.firstChild; + e.firstChild; + + ) + e.removeChild(e.firstChild); + for (; n.firstChild; ) e.appendChild(n.firstChild); + } + }); + function ut(e, n) { + if (n) { + var t = e.firstChild; + if (t && t === e.lastChild && t.nodeType === 3) { + t.nodeValue = n; + return; + } + } + e.textContent = n; + } + var Zn = { + animationIterationCount: !0, + borderImageOutset: !0, + borderImageSlice: !0, + borderImageWidth: !0, + boxFlex: !0, + boxFlexGroup: !0, + boxOrdinalGroup: !0, + columnCount: !0, + columns: !0, + flex: !0, + flexGrow: !0, + flexPositive: !0, + flexShrink: !0, + flexNegative: !0, + flexOrder: !0, + gridArea: !0, + gridRow: !0, + gridRowEnd: !0, + gridRowSpan: !0, + gridRowStart: !0, + gridColumn: !0, + gridColumnEnd: !0, + gridColumnSpan: !0, + gridColumnStart: !0, + fontWeight: !0, + lineClamp: !0, + lineHeight: !0, + opacity: !0, + order: !0, + orphans: !0, + tabSize: !0, + widows: !0, + zIndex: !0, + zoom: !0, + fillOpacity: !0, + floodOpacity: !0, + stopOpacity: !0, + strokeDasharray: !0, + strokeDashoffset: !0, + strokeMiterlimit: !0, + strokeOpacity: !0, + strokeWidth: !0, + }, + Bs = ['Webkit', 'ms', 'Moz', 'O']; + Object.keys(Zn).forEach(function (e) { + Bs.forEach(function (n) { + (n = n + e.charAt(0).toUpperCase() + e.substring(1)), (Zn[n] = Zn[e]); + }); + }); + function eu(e, n, t) { + return n == null || typeof n == 'boolean' || n === '' + ? '' + : t || typeof n != 'number' || n === 0 || (Zn.hasOwnProperty(e) && Zn[e]) + ? ('' + n).trim() + : n + 'px'; + } + function nu(e, n) { + e = e.style; + for (var t in n) + if (n.hasOwnProperty(t)) { + var r = t.indexOf('--') === 0, + l = eu(t, n[t], r); + t === 'float' && (t = 'cssFloat'), r ? e.setProperty(t, l) : (e[t] = l); + } + } + var Hs = M( + { menuitem: !0 }, + { + area: !0, + base: !0, + br: !0, + col: !0, + embed: !0, + hr: !0, + img: !0, + input: !0, + keygen: !0, + link: !0, + meta: !0, + param: !0, + source: !0, + track: !0, + wbr: !0, + }, + ); + function sl(e, n) { + if (n) { + if (Hs[e] && (n.children != null || n.dangerouslySetInnerHTML != null)) + throw Error(v(137, e)); + if (n.dangerouslySetInnerHTML != null) { + if (n.children != null) throw Error(v(60)); + if ( + !( + typeof n.dangerouslySetInnerHTML == 'object' && + '__html' in n.dangerouslySetInnerHTML + ) + ) + throw Error(v(61)); + } + if (n.style != null && typeof n.style != 'object') throw Error(v(62)); + } + } + function al(e, n) { + if (e.indexOf('-') === -1) return typeof n.is == 'string'; + switch (e) { + case 'annotation-xml': + case 'color-profile': + case 'font-face': + case 'font-face-src': + case 'font-face-uri': + case 'font-face-format': + case 'font-face-name': + case 'missing-glyph': + return !1; + default: + return !0; + } + } + function Zl(e) { + return ( + (e = e.target || e.srcElement || window), + e.correspondingUseElement && (e = e.correspondingUseElement), + e.nodeType === 3 ? e.parentNode : e + ); + } + var fl = null, + mn = null, + hn = null; + function Hi(e) { + if ((e = Et(e))) { + if (typeof fl != 'function') throw Error(v(280)); + var n = e.stateNode; + n && ((n = _r(n)), fl(e.stateNode, e.type, n)); + } + } + function tu(e) { + mn ? (hn ? hn.push(e) : (hn = [e])) : (mn = e); + } + function ru() { + if (mn) { + var e = mn, + n = hn; + if (((hn = mn = null), Hi(e), n)) for (e = 0; e < n.length; e++) Hi(n[e]); + } + } + function Jl(e, n) { + return e(n); + } + function lu(e, n, t, r, l) { + return e(n, t, r, l); + } + function ql() {} + var iu = Jl, + Ae = !1, + Dr = !1; + function bl() { + (mn !== null || hn !== null) && (ql(), ru()); + } + function Ws(e, n, t) { + if (Dr) return e(n, t); + Dr = !0; + try { + return iu(e, n, t); + } finally { + (Dr = !1), bl(); + } + } + function st(e, n) { + var t = e.stateNode; + if (t === null) return null; + var r = _r(t); + if (r === null) return null; + t = r[n]; + e: switch (n) { + case 'onClick': + case 'onClickCapture': + case 'onDoubleClick': + case 'onDoubleClickCapture': + case 'onMouseDown': + case 'onMouseDownCapture': + case 'onMouseMove': + case 'onMouseMoveCapture': + case 'onMouseUp': + case 'onMouseUpCapture': + case 'onMouseEnter': + (r = !r.disabled) || + ((e = e.type), + (r = !( + e === 'button' || + e === 'input' || + e === 'select' || + e === 'textarea' + ))), + (e = !r); + break e; + default: + e = !1; + } + if (e) return null; + if (t && typeof t != 'function') throw Error(v(231, n, typeof t)); + return t; + } + var cl = !1; + if (we) + try { + (nn = {}), + Object.defineProperty(nn, 'passive', { + get: function () { + cl = !0; + }, + }), + window.addEventListener('test', nn, nn), + window.removeEventListener('test', nn, nn); + } catch { + cl = !1; + } + var nn; + function As(e, n, t, r, l, i, o, u, s) { + var d = Array.prototype.slice.call(arguments, 3); + try { + n.apply(t, d); + } catch (y) { + this.onError(y); + } + } + var Jn = !1, + Zt = null, + Jt = !1, + dl = null, + Qs = { + onError: function (e) { + (Jn = !0), (Zt = e); + }, + }; + function $s(e, n, t, r, l, i, o, u, s) { + (Jn = !1), (Zt = null), As.apply(Qs, arguments); + } + function Ys(e, n, t, r, l, i, o, u, s) { + if (($s.apply(this, arguments), Jn)) { + if (Jn) { + var d = Zt; + (Jn = !1), (Zt = null); + } else throw Error(v(198)); + Jt || ((Jt = !0), (dl = d)); + } + } + function be(e) { + var n = e, + t = e; + if (e.alternate) for (; n.return; ) n = n.return; + else { + e = n; + do (n = e), n.flags & 1026 && (t = n.return), (e = n.return); + while (e); + } + return n.tag === 3 ? t : null; + } + function ou(e) { + if (e.tag === 13) { + var n = e.memoizedState; + if ( + (n === null && ((e = e.alternate), e !== null && (n = e.memoizedState)), + n !== null) + ) + return n.dehydrated; + } + return null; + } + function Wi(e) { + if (be(e) !== e) throw Error(v(188)); + } + function Xs(e) { + var n = e.alternate; + if (!n) { + if (((n = be(e)), n === null)) throw Error(v(188)); + return n !== e ? null : e; + } + for (var t = e, r = n; ; ) { + var l = t.return; + if (l === null) break; + var i = l.alternate; + if (i === null) { + if (((r = l.return), r !== null)) { + t = r; + continue; + } + break; + } + if (l.child === i.child) { + for (i = l.child; i; ) { + if (i === t) return Wi(l), e; + if (i === r) return Wi(l), n; + i = i.sibling; + } + throw Error(v(188)); + } + if (t.return !== r.return) (t = l), (r = i); + else { + for (var o = !1, u = l.child; u; ) { + if (u === t) { + (o = !0), (t = l), (r = i); + break; + } + if (u === r) { + (o = !0), (r = l), (t = i); + break; + } + u = u.sibling; + } + if (!o) { + for (u = i.child; u; ) { + if (u === t) { + (o = !0), (t = i), (r = l); + break; + } + if (u === r) { + (o = !0), (r = i), (t = l); + break; + } + u = u.sibling; + } + if (!o) throw Error(v(189)); + } + } + if (t.alternate !== r) throw Error(v(190)); + } + if (t.tag !== 3) throw Error(v(188)); + return t.stateNode.current === t ? e : n; + } + function uu(e) { + if (((e = Xs(e)), !e)) return null; + for (var n = e; ; ) { + if (n.tag === 5 || n.tag === 6) return n; + if (n.child) (n.child.return = n), (n = n.child); + else { + if (n === e) break; + for (; !n.sibling; ) { + if (!n.return || n.return === e) return null; + n = n.return; + } + (n.sibling.return = n.return), (n = n.sibling); + } + } + return null; + } + function Ai(e, n) { + for (var t = e.alternate; n !== null; ) { + if (n === e || n === t) return !0; + n = n.return; + } + return !1; + } + var su, + ei, + au, + fu, + pl = !1, + se = [], + Ne = null, + Pe = null, + Te = null, + at = new Map(), + ft = new Map(), + Mn = [], + Qi = + 'mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit'.split( + ' ', + ); + function ml(e, n, t, r, l) { + return { + blockedOn: e, + domEventName: n, + eventSystemFlags: t | 16, + nativeEvent: l, + targetContainers: [r], + }; + } + function $i(e, n) { + switch (e) { + case 'focusin': + case 'focusout': + Ne = null; + break; + case 'dragenter': + case 'dragleave': + Pe = null; + break; + case 'mouseover': + case 'mouseout': + Te = null; + break; + case 'pointerover': + case 'pointerout': + at.delete(n.pointerId); + break; + case 'gotpointercapture': + case 'lostpointercapture': + ft.delete(n.pointerId); + } + } + function Rn(e, n, t, r, l, i) { + return e === null || e.nativeEvent !== i + ? ((e = ml(n, t, r, l, i)), + n !== null && ((n = Et(n)), n !== null && ei(n)), + e) + : ((e.eventSystemFlags |= r), + (n = e.targetContainers), + l !== null && n.indexOf(l) === -1 && n.push(l), + e); + } + function Ks(e, n, t, r, l) { + switch (n) { + case 'focusin': + return (Ne = Rn(Ne, e, n, t, r, l)), !0; + case 'dragenter': + return (Pe = Rn(Pe, e, n, t, r, l)), !0; + case 'mouseover': + return (Te = Rn(Te, e, n, t, r, l)), !0; + case 'pointerover': + var i = l.pointerId; + return at.set(i, Rn(at.get(i) || null, e, n, t, r, l)), !0; + case 'gotpointercapture': + return ( + (i = l.pointerId), ft.set(i, Rn(ft.get(i) || null, e, n, t, r, l)), !0 + ); + } + return !1; + } + function Gs(e) { + var n = Qe(e.target); + if (n !== null) { + var t = be(n); + if (t !== null) { + if (((n = t.tag), n === 13)) { + if (((n = ou(t)), n !== null)) { + (e.blockedOn = n), + fu(e.lanePriority, function () { + U.unstable_runWithPriority(e.priority, function () { + au(t); + }); + }); + return; + } + } else if (n === 3 && t.stateNode.hydrate) { + e.blockedOn = t.tag === 3 ? t.stateNode.containerInfo : null; + return; + } + } + } + e.blockedOn = null; + } + function Ut(e) { + if (e.blockedOn !== null) return !1; + for (var n = e.targetContainers; 0 < n.length; ) { + var t = li(e.domEventName, e.eventSystemFlags, n[0], e.nativeEvent); + if (t !== null) + return (n = Et(t)), n !== null && ei(n), (e.blockedOn = t), !1; + n.shift(); + } + return !0; + } + function Yi(e, n, t) { + Ut(e) && t.delete(n); + } + function Zs() { + for (pl = !1; 0 < se.length; ) { + var e = se[0]; + if (e.blockedOn !== null) { + (e = Et(e.blockedOn)), e !== null && su(e); + break; + } + for (var n = e.targetContainers; 0 < n.length; ) { + var t = li(e.domEventName, e.eventSystemFlags, n[0], e.nativeEvent); + if (t !== null) { + e.blockedOn = t; + break; + } + n.shift(); + } + e.blockedOn === null && se.shift(); + } + Ne !== null && Ut(Ne) && (Ne = null), + Pe !== null && Ut(Pe) && (Pe = null), + Te !== null && Ut(Te) && (Te = null), + at.forEach(Yi), + ft.forEach(Yi); + } + function Dn(e, n) { + e.blockedOn === n && + ((e.blockedOn = null), + pl || + ((pl = !0), + U.unstable_scheduleCallback(U.unstable_NormalPriority, Zs))); + } + function cu(e) { + function n(l) { + return Dn(l, e); + } + if (0 < se.length) { + Dn(se[0], e); + for (var t = 1; t < se.length; t++) { + var r = se[t]; + r.blockedOn === e && (r.blockedOn = null); + } + } + for ( + Ne !== null && Dn(Ne, e), + Pe !== null && Dn(Pe, e), + Te !== null && Dn(Te, e), + at.forEach(n), + ft.forEach(n), + t = 0; + t < Mn.length; + t++ + ) + (r = Mn[t]), r.blockedOn === e && (r.blockedOn = null); + for (; 0 < Mn.length && ((t = Mn[0]), t.blockedOn === null); ) + Gs(t), t.blockedOn === null && Mn.shift(); + } + function Tt(e, n) { + var t = {}; + return ( + (t[e.toLowerCase()] = n.toLowerCase()), + (t['Webkit' + e] = 'webkit' + n), + (t['Moz' + e] = 'moz' + n), + t + ); + } + var on = { + animationend: Tt('Animation', 'AnimationEnd'), + animationiteration: Tt('Animation', 'AnimationIteration'), + animationstart: Tt('Animation', 'AnimationStart'), + transitionend: Tt('Transition', 'TransitionEnd'), + }, + Ir = {}, + du = {}; + we && + ((du = document.createElement('div').style), + 'AnimationEvent' in window || + (delete on.animationend.animation, + delete on.animationiteration.animation, + delete on.animationstart.animation), + 'TransitionEvent' in window || delete on.transitionend.transition); + function Sr(e) { + if (Ir[e]) return Ir[e]; + if (!on[e]) return e; + var n = on[e], + t; + for (t in n) if (n.hasOwnProperty(t) && t in du) return (Ir[e] = n[t]); + return e; + } + var pu = Sr('animationend'), + mu = Sr('animationiteration'), + hu = Sr('animationstart'), + vu = Sr('transitionend'), + yu = new Map(), + ni = new Map(), + Js = [ + 'abort', + 'abort', + pu, + 'animationEnd', + mu, + 'animationIteration', + hu, + 'animationStart', + 'canplay', + 'canPlay', + 'canplaythrough', + 'canPlayThrough', + 'durationchange', + 'durationChange', + 'emptied', + 'emptied', + 'encrypted', + 'encrypted', + 'ended', + 'ended', + 'error', + 'error', + 'gotpointercapture', + 'gotPointerCapture', + 'load', + 'load', + 'loadeddata', + 'loadedData', + 'loadedmetadata', + 'loadedMetadata', + 'loadstart', + 'loadStart', + 'lostpointercapture', + 'lostPointerCapture', + 'playing', + 'playing', + 'progress', + 'progress', + 'seeking', + 'seeking', + 'stalled', + 'stalled', + 'suspend', + 'suspend', + 'timeupdate', + 'timeUpdate', + vu, + 'transitionEnd', + 'waiting', + 'waiting', + ]; + function ti(e, n) { + for (var t = 0; t < e.length; t += 2) { + var r = e[t], + l = e[t + 1]; + (l = 'on' + (l[0].toUpperCase() + l.slice(1))), + ni.set(r, n), + yu.set(r, l), + Je(l, [r]); + } + } + var qs = U.unstable_now; + qs(); + var L = 8; + function rn(e) { + if (1 & e) return (L = 15), 1; + if (2 & e) return (L = 14), 2; + if (4 & e) return (L = 13), 4; + var n = 24 & e; + return n !== 0 + ? ((L = 12), n) + : e & 32 + ? ((L = 11), 32) + : ((n = 192 & e), + n !== 0 + ? ((L = 10), n) + : e & 256 + ? ((L = 9), 256) + : ((n = 3584 & e), + n !== 0 + ? ((L = 8), n) + : e & 4096 + ? ((L = 7), 4096) + : ((n = 4186112 & e), + n !== 0 + ? ((L = 6), n) + : ((n = 62914560 & e), + n !== 0 + ? ((L = 5), n) + : e & 67108864 + ? ((L = 4), 67108864) + : e & 134217728 + ? ((L = 3), 134217728) + : ((n = 805306368 & e), + n !== 0 + ? ((L = 2), n) + : 1073741824 & e + ? ((L = 1), 1073741824) + : ((L = 8), e)))))); + } + function bs(e) { + switch (e) { + case 99: + return 15; + case 98: + return 10; + case 97: + case 96: + return 8; + case 95: + return 2; + default: + return 0; + } + } + function ea(e) { + switch (e) { + case 15: + case 14: + return 99; + case 13: + case 12: + case 11: + case 10: + return 98; + case 9: + case 8: + case 7: + case 6: + case 4: + case 5: + return 97; + case 3: + case 2: + case 1: + return 95; + case 0: + return 90; + default: + throw Error(v(358, e)); + } + } + function ct(e, n) { + var t = e.pendingLanes; + if (t === 0) return (L = 0); + var r = 0, + l = 0, + i = e.expiredLanes, + o = e.suspendedLanes, + u = e.pingedLanes; + if (i !== 0) (r = i), (l = L = 15); + else if (((i = t & 134217727), i !== 0)) { + var s = i & ~o; + s !== 0 + ? ((r = rn(s)), (l = L)) + : ((u &= i), u !== 0 && ((r = rn(u)), (l = L))); + } else + (i = t & ~o), + i !== 0 ? ((r = rn(i)), (l = L)) : u !== 0 && ((r = rn(u)), (l = L)); + if (r === 0) return 0; + if ( + ((r = 31 - Ie(r)), + (r = t & (((0 > r ? 0 : 1 << r) << 1) - 1)), + n !== 0 && n !== r && !(n & o)) + ) { + if ((rn(n), l <= L)) return n; + L = l; + } + if (((n = e.entangledLanes), n !== 0)) + for (e = e.entanglements, n &= r; 0 < n; ) + (t = 31 - Ie(n)), (l = 1 << t), (r |= e[t]), (n &= ~l); + return r; + } + function gu(e) { + return ( + (e = e.pendingLanes & -1073741825), + e !== 0 ? e : e & 1073741824 ? 1073741824 : 0 + ); + } + function qt(e, n) { + switch (e) { + case 15: + return 1; + case 14: + return 2; + case 12: + return (e = ln(24 & ~n)), e === 0 ? qt(10, n) : e; + case 10: + return (e = ln(192 & ~n)), e === 0 ? qt(8, n) : e; + case 8: + return ( + (e = ln(3584 & ~n)), + e === 0 && ((e = ln(4186112 & ~n)), e === 0 && (e = 512)), + e + ); + case 2: + return (n = ln(805306368 & ~n)), n === 0 && (n = 268435456), n; + } + throw Error(v(358, e)); + } + function ln(e) { + return e & -e; + } + function Fr(e) { + for (var n = [], t = 0; 31 > t; t++) n.push(e); + return n; + } + function Er(e, n, t) { + e.pendingLanes |= n; + var r = n - 1; + (e.suspendedLanes &= r), + (e.pingedLanes &= r), + (e = e.eventTimes), + (n = 31 - Ie(n)), + (e[n] = t); + } + var Ie = Math.clz32 ? Math.clz32 : ra, + na = Math.log, + ta = Math.LN2; + function ra(e) { + return e === 0 ? 32 : (31 - ((na(e) / ta) | 0)) | 0; + } + var la = U.unstable_UserBlockingPriority, + ia = U.unstable_runWithPriority, + Vt = !0; + function oa(e, n, t, r) { + Ae || ql(); + var l = ri, + i = Ae; + Ae = !0; + try { + lu(l, e, n, t, r); + } finally { + (Ae = i) || bl(); + } + } + function ua(e, n, t, r) { + ia(la, ri.bind(null, e, n, t, r)); + } + function ri(e, n, t, r) { + if (Vt) { + var l; + if ((l = (n & 4) === 0) && 0 < se.length && -1 < Qi.indexOf(e)) + (e = ml(null, e, n, t, r)), se.push(e); + else { + var i = li(e, n, t, r); + if (i === null) l && $i(e, r); + else { + if (l) { + if (-1 < Qi.indexOf(e)) { + (e = ml(i, e, n, t, r)), se.push(e); + return; + } + if (Ks(i, e, n, t, r)) return; + $i(e, r); + } + Ou(e, n, r, null, t); + } + } + } + } + function li(e, n, t, r) { + var l = Zl(r); + if (((l = Qe(l)), l !== null)) { + var i = be(l); + if (i === null) l = null; + else { + var o = i.tag; + if (o === 13) { + if (((l = ou(i)), l !== null)) return l; + l = null; + } else if (o === 3) { + if (i.stateNode.hydrate) + return i.tag === 3 ? i.stateNode.containerInfo : null; + l = null; + } else i !== l && (l = null); + } + } + return Ou(e, n, r, l, t), null; + } + var xe = null, + ii = null, + Bt = null; + function wu() { + if (Bt) return Bt; + var e, + n = ii, + t = n.length, + r, + l = 'value' in xe ? xe.value : xe.textContent, + i = l.length; + for (e = 0; e < t && n[e] === l[e]; e++); + var o = t - e; + for (r = 1; r <= o && n[t - r] === l[i - r]; r++); + return (Bt = l.slice(e, 1 < r ? 1 - r : void 0)); + } + function Ht(e) { + var n = e.keyCode; + return ( + 'charCode' in e + ? ((e = e.charCode), e === 0 && n === 13 && (e = 13)) + : (e = n), + e === 10 && (e = 13), + 32 <= e || e === 13 ? e : 0 + ); + } + function Lt() { + return !0; + } + function Xi() { + return !1; + } + function b(e) { + function n(t, r, l, i, o) { + (this._reactName = t), + (this._targetInst = l), + (this.type = r), + (this.nativeEvent = i), + (this.target = o), + (this.currentTarget = null); + for (var u in e) + e.hasOwnProperty(u) && ((t = e[u]), (this[u] = t ? t(i) : i[u])); + return ( + (this.isDefaultPrevented = ( + i.defaultPrevented != null ? i.defaultPrevented : i.returnValue === !1 + ) + ? Lt + : Xi), + (this.isPropagationStopped = Xi), + this + ); + } + return ( + M(n.prototype, { + preventDefault: function () { + this.defaultPrevented = !0; + var t = this.nativeEvent; + t && + (t.preventDefault + ? t.preventDefault() + : typeof t.returnValue != 'unknown' && (t.returnValue = !1), + (this.isDefaultPrevented = Lt)); + }, + stopPropagation: function () { + var t = this.nativeEvent; + t && + (t.stopPropagation + ? t.stopPropagation() + : typeof t.cancelBubble != 'unknown' && (t.cancelBubble = !0), + (this.isPropagationStopped = Lt)); + }, + persist: function () {}, + isPersistent: Lt, + }), + n + ); + } + var Nn = { + eventPhase: 0, + bubbles: 0, + cancelable: 0, + timeStamp: function (e) { + return e.timeStamp || Date.now(); + }, + defaultPrevented: 0, + isTrusted: 0, + }, + oi = b(Nn), + St = M({}, Nn, { view: 0, detail: 0 }), + sa = b(St), + jr, + Ur, + In, + kr = M({}, St, { + screenX: 0, + screenY: 0, + clientX: 0, + clientY: 0, + pageX: 0, + pageY: 0, + ctrlKey: 0, + shiftKey: 0, + altKey: 0, + metaKey: 0, + getModifierState: ui, + button: 0, + buttons: 0, + relatedTarget: function (e) { + return e.relatedTarget === void 0 + ? e.fromElement === e.srcElement + ? e.toElement + : e.fromElement + : e.relatedTarget; + }, + movementX: function (e) { + return 'movementX' in e + ? e.movementX + : (e !== In && + (In && e.type === 'mousemove' + ? ((jr = e.screenX - In.screenX), (Ur = e.screenY - In.screenY)) + : (Ur = jr = 0), + (In = e)), + jr); + }, + movementY: function (e) { + return 'movementY' in e ? e.movementY : Ur; + }, + }), + Ki = b(kr), + aa = M({}, kr, { dataTransfer: 0 }), + fa = b(aa), + ca = M({}, St, { relatedTarget: 0 }), + Vr = b(ca), + da = M({}, Nn, { animationName: 0, elapsedTime: 0, pseudoElement: 0 }), + pa = b(da), + ma = M({}, Nn, { + clipboardData: function (e) { + return 'clipboardData' in e ? e.clipboardData : window.clipboardData; + }, + }), + ha = b(ma), + va = M({}, Nn, { data: 0 }), + Gi = b(va), + ya = { + Esc: 'Escape', + Spacebar: ' ', + Left: 'ArrowLeft', + Up: 'ArrowUp', + Right: 'ArrowRight', + Down: 'ArrowDown', + Del: 'Delete', + Win: 'OS', + Menu: 'ContextMenu', + Apps: 'ContextMenu', + Scroll: 'ScrollLock', + MozPrintableKey: 'Unidentified', + }, + ga = { + 8: 'Backspace', + 9: 'Tab', + 12: 'Clear', + 13: 'Enter', + 16: 'Shift', + 17: 'Control', + 18: 'Alt', + 19: 'Pause', + 20: 'CapsLock', + 27: 'Escape', + 32: ' ', + 33: 'PageUp', + 34: 'PageDown', + 35: 'End', + 36: 'Home', + 37: 'ArrowLeft', + 38: 'ArrowUp', + 39: 'ArrowRight', + 40: 'ArrowDown', + 45: 'Insert', + 46: 'Delete', + 112: 'F1', + 113: 'F2', + 114: 'F3', + 115: 'F4', + 116: 'F5', + 117: 'F6', + 118: 'F7', + 119: 'F8', + 120: 'F9', + 121: 'F10', + 122: 'F11', + 123: 'F12', + 144: 'NumLock', + 145: 'ScrollLock', + 224: 'Meta', + }, + wa = { + Alt: 'altKey', + Control: 'ctrlKey', + Meta: 'metaKey', + Shift: 'shiftKey', + }; + function Sa(e) { + var n = this.nativeEvent; + return n.getModifierState + ? n.getModifierState(e) + : (e = wa[e]) + ? !!n[e] + : !1; + } + function ui() { + return Sa; + } + var Ea = M({}, St, { + key: function (e) { + if (e.key) { + var n = ya[e.key] || e.key; + if (n !== 'Unidentified') return n; + } + return e.type === 'keypress' + ? ((e = Ht(e)), e === 13 ? 'Enter' : String.fromCharCode(e)) + : e.type === 'keydown' || e.type === 'keyup' + ? ga[e.keyCode] || 'Unidentified' + : ''; + }, + code: 0, + location: 0, + ctrlKey: 0, + shiftKey: 0, + altKey: 0, + metaKey: 0, + repeat: 0, + locale: 0, + getModifierState: ui, + charCode: function (e) { + return e.type === 'keypress' ? Ht(e) : 0; + }, + keyCode: function (e) { + return e.type === 'keydown' || e.type === 'keyup' ? e.keyCode : 0; + }, + which: function (e) { + return e.type === 'keypress' + ? Ht(e) + : e.type === 'keydown' || e.type === 'keyup' + ? e.keyCode + : 0; + }, + }), + ka = b(Ea), + xa = M({}, kr, { + pointerId: 0, + width: 0, + height: 0, + pressure: 0, + tangentialPressure: 0, + tiltX: 0, + tiltY: 0, + twist: 0, + pointerType: 0, + isPrimary: 0, + }), + Zi = b(xa), + Ca = M({}, St, { + touches: 0, + targetTouches: 0, + changedTouches: 0, + altKey: 0, + metaKey: 0, + ctrlKey: 0, + shiftKey: 0, + getModifierState: ui, + }), + _a = b(Ca), + Na = M({}, Nn, { propertyName: 0, elapsedTime: 0, pseudoElement: 0 }), + Pa = b(Na), + Ta = M({}, kr, { + deltaX: function (e) { + return 'deltaX' in e + ? e.deltaX + : 'wheelDeltaX' in e + ? -e.wheelDeltaX + : 0; + }, + deltaY: function (e) { + return 'deltaY' in e + ? e.deltaY + : 'wheelDeltaY' in e + ? -e.wheelDeltaY + : 'wheelDelta' in e + ? -e.wheelDelta + : 0; + }, + deltaZ: 0, + deltaMode: 0, + }), + La = b(Ta), + za = [9, 13, 27, 32], + si = we && 'CompositionEvent' in window, + qn = null; + we && 'documentMode' in document && (qn = document.documentMode); + var Oa = we && 'TextEvent' in window && !qn, + Su = we && (!si || (qn && 8 < qn && 11 >= qn)), + Ji = String.fromCharCode(32), + qi = !1; + function Eu(e, n) { + switch (e) { + case 'keyup': + return za.indexOf(n.keyCode) !== -1; + case 'keydown': + return n.keyCode !== 229; + case 'keypress': + case 'mousedown': + case 'focusout': + return !0; + default: + return !1; + } + } + function ku(e) { + return (e = e.detail), typeof e == 'object' && 'data' in e ? e.data : null; + } + var un = !1; + function Ma(e, n) { + switch (e) { + case 'compositionend': + return ku(n); + case 'keypress': + return n.which !== 32 ? null : ((qi = !0), Ji); + case 'textInput': + return (e = n.data), e === Ji && qi ? null : e; + default: + return null; + } + } + function Ra(e, n) { + if (un) + return e === 'compositionend' || (!si && Eu(e, n)) + ? ((e = wu()), (Bt = ii = xe = null), (un = !1), e) + : null; + switch (e) { + case 'paste': + return null; + case 'keypress': + if (!(n.ctrlKey || n.altKey || n.metaKey) || (n.ctrlKey && n.altKey)) { + if (n.char && 1 < n.char.length) return n.char; + if (n.which) return String.fromCharCode(n.which); + } + return null; + case 'compositionend': + return Su && n.locale !== 'ko' ? null : n.data; + default: + return null; + } + } + var Da = { + color: !0, + date: !0, + datetime: !0, + 'datetime-local': !0, + email: !0, + month: !0, + number: !0, + password: !0, + range: !0, + search: !0, + tel: !0, + text: !0, + time: !0, + url: !0, + week: !0, + }; + function bi(e) { + var n = e && e.nodeName && e.nodeName.toLowerCase(); + return n === 'input' ? !!Da[e.type] : n === 'textarea'; + } + function xu(e, n, t, r) { + tu(r), + (n = bt(n, 'onChange')), + 0 < n.length && + ((t = new oi('onChange', 'change', null, t, r)), + e.push({ event: t, listeners: n })); + } + var bn = null, + dt = null; + function Ia(e) { + Tu(e, 0); + } + function xr(e) { + var n = an(e); + if (Go(n)) return e; + } + function Fa(e, n) { + if (e === 'change') return n; + } + var Cu = !1; + we && + (we + ? ((Ot = 'oninput' in document), + Ot || + ((Br = document.createElement('div')), + Br.setAttribute('oninput', 'return;'), + (Ot = typeof Br.oninput == 'function')), + (zt = Ot)) + : (zt = !1), + (Cu = zt && (!document.documentMode || 9 < document.documentMode))); + var zt, Ot, Br; + function eo() { + bn && (bn.detachEvent('onpropertychange', _u), (dt = bn = null)); + } + function _u(e) { + if (e.propertyName === 'value' && xr(dt)) { + var n = []; + if ((xu(n, dt, e, Zl(e)), (e = Ia), Ae)) e(n); + else { + Ae = !0; + try { + Jl(e, n); + } finally { + (Ae = !1), bl(); + } + } + } + } + function ja(e, n, t) { + e === 'focusin' + ? (eo(), (bn = n), (dt = t), bn.attachEvent('onpropertychange', _u)) + : e === 'focusout' && eo(); + } + function Ua(e) { + if (e === 'selectionchange' || e === 'keyup' || e === 'keydown') + return xr(dt); + } + function Va(e, n) { + if (e === 'click') return xr(n); + } + function Ba(e, n) { + if (e === 'input' || e === 'change') return xr(n); + } + function Ha(e, n) { + return (e === n && (e !== 0 || 1 / e === 1 / n)) || (e !== e && n !== n); + } + var ee = typeof Object.is == 'function' ? Object.is : Ha, + Wa = Object.prototype.hasOwnProperty; + function pt(e, n) { + if (ee(e, n)) return !0; + if ( + typeof e != 'object' || + e === null || + typeof n != 'object' || + n === null + ) + return !1; + var t = Object.keys(e), + r = Object.keys(n); + if (t.length !== r.length) return !1; + for (r = 0; r < t.length; r++) + if (!Wa.call(n, t[r]) || !ee(e[t[r]], n[t[r]])) return !1; + return !0; + } + function no(e) { + for (; e && e.firstChild; ) e = e.firstChild; + return e; + } + function to(e, n) { + var t = no(e); + e = 0; + for (var r; t; ) { + if (t.nodeType === 3) { + if (((r = e + t.textContent.length), e <= n && r >= n)) + return { node: t, offset: n - e }; + e = r; + } + e: { + for (; t; ) { + if (t.nextSibling) { + t = t.nextSibling; + break e; + } + t = t.parentNode; + } + t = void 0; + } + t = no(t); + } + } + function Nu(e, n) { + return e && n + ? e === n + ? !0 + : e && e.nodeType === 3 + ? !1 + : n && n.nodeType === 3 + ? Nu(e, n.parentNode) + : 'contains' in e + ? e.contains(n) + : e.compareDocumentPosition + ? !!(e.compareDocumentPosition(n) & 16) + : !1 + : !1; + } + function ro() { + for (var e = window, n = Gt(); n instanceof e.HTMLIFrameElement; ) { + try { + var t = typeof n.contentWindow.location.href == 'string'; + } catch { + t = !1; + } + if (t) e = n.contentWindow; + else break; + n = Gt(e.document); + } + return n; + } + function hl(e) { + var n = e && e.nodeName && e.nodeName.toLowerCase(); + return ( + n && + ((n === 'input' && + (e.type === 'text' || + e.type === 'search' || + e.type === 'tel' || + e.type === 'url' || + e.type === 'password')) || + n === 'textarea' || + e.contentEditable === 'true') + ); + } + var Aa = we && 'documentMode' in document && 11 >= document.documentMode, + sn = null, + vl = null, + et = null, + yl = !1; + function lo(e, n, t) { + var r = + t.window === t ? t.document : t.nodeType === 9 ? t : t.ownerDocument; + yl || + sn == null || + sn !== Gt(r) || + ((r = sn), + 'selectionStart' in r && hl(r) + ? (r = { start: r.selectionStart, end: r.selectionEnd }) + : ((r = ( + (r.ownerDocument && r.ownerDocument.defaultView) || + window + ).getSelection()), + (r = { + anchorNode: r.anchorNode, + anchorOffset: r.anchorOffset, + focusNode: r.focusNode, + focusOffset: r.focusOffset, + })), + (et && pt(et, r)) || + ((et = r), + (r = bt(vl, 'onSelect')), + 0 < r.length && + ((n = new oi('onSelect', 'select', null, n, t)), + e.push({ event: n, listeners: r }), + (n.target = sn)))); + } + ti( + 'cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange'.split( + ' ', + ), + 0, + ); + ti( + 'drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel'.split( + ' ', + ), + 1, + ); + ti(Js, 2); + for ( + Hr = + 'change selectionchange textInput compositionstart compositionend compositionupdate'.split( + ' ', + ), + Mt = 0; + Mt < Hr.length; + Mt++ + ) + ni.set(Hr[Mt], 0); + var Hr, Mt; + kn('onMouseEnter', ['mouseout', 'mouseover']); + kn('onMouseLeave', ['mouseout', 'mouseover']); + kn('onPointerEnter', ['pointerout', 'pointerover']); + kn('onPointerLeave', ['pointerout', 'pointerover']); + Je( + 'onChange', + 'change click focusin focusout input keydown keyup selectionchange'.split( + ' ', + ), + ); + Je( + 'onSelect', + 'focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange'.split( + ' ', + ), + ); + Je('onBeforeInput', ['compositionend', 'keypress', 'textInput', 'paste']); + Je( + 'onCompositionEnd', + 'compositionend focusout keydown keypress keyup mousedown'.split(' '), + ); + Je( + 'onCompositionStart', + 'compositionstart focusout keydown keypress keyup mousedown'.split(' '), + ); + Je( + 'onCompositionUpdate', + 'compositionupdate focusout keydown keypress keyup mousedown'.split(' '), + ); + var $n = + 'abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting'.split( + ' ', + ), + Pu = new Set( + 'cancel close invalid load scroll toggle'.split(' ').concat($n), + ); + function io(e, n, t) { + var r = e.type || 'unknown-event'; + (e.currentTarget = t), Ys(r, n, void 0, e), (e.currentTarget = null); + } + function Tu(e, n) { + n = (n & 4) !== 0; + for (var t = 0; t < e.length; t++) { + var r = e[t], + l = r.event; + r = r.listeners; + e: { + var i = void 0; + if (n) + for (var o = r.length - 1; 0 <= o; o--) { + var u = r[o], + s = u.instance, + d = u.currentTarget; + if (((u = u.listener), s !== i && l.isPropagationStopped())) + break e; + io(l, u, d), (i = s); + } + else + for (o = 0; o < r.length; o++) { + if ( + ((u = r[o]), + (s = u.instance), + (d = u.currentTarget), + (u = u.listener), + s !== i && l.isPropagationStopped()) + ) + break e; + io(l, u, d), (i = s); + } + } + } + if (Jt) throw ((e = dl), (Jt = !1), (dl = null), e); + } + function z(e, n) { + var t = Ru(n), + r = e + '__bubble'; + t.has(r) || (zu(n, e, 2, !1), t.add(r)); + } + var oo = '_reactListening' + Math.random().toString(36).slice(2); + function Lu(e) { + e[oo] || + ((e[oo] = !0), + Yo.forEach(function (n) { + Pu.has(n) || uo(n, !1, e, null), uo(n, !0, e, null); + })); + } + function uo(e, n, t, r) { + var l = 4 < arguments.length && arguments[4] !== void 0 ? arguments[4] : 0, + i = t; + if ( + (e === 'selectionchange' && t.nodeType !== 9 && (i = t.ownerDocument), + r !== null && !n && Pu.has(e)) + ) { + if (e !== 'scroll') return; + (l |= 2), (i = r); + } + var o = Ru(i), + u = e + '__' + (n ? 'capture' : 'bubble'); + o.has(u) || (n && (l |= 4), zu(i, e, l, n), o.add(u)); + } + function zu(e, n, t, r) { + var l = ni.get(n); + switch (l === void 0 ? 2 : l) { + case 0: + l = oa; + break; + case 1: + l = ua; + break; + default: + l = ri; + } + (t = l.bind(null, n, t, e)), + (l = void 0), + !cl || + (n !== 'touchstart' && n !== 'touchmove' && n !== 'wheel') || + (l = !0), + r + ? l !== void 0 + ? e.addEventListener(n, t, { capture: !0, passive: l }) + : e.addEventListener(n, t, !0) + : l !== void 0 + ? e.addEventListener(n, t, { passive: l }) + : e.addEventListener(n, t, !1); + } + function Ou(e, n, t, r, l) { + var i = r; + if (!(n & 1) && !(n & 2) && r !== null) + e: for (;;) { + if (r === null) return; + var o = r.tag; + if (o === 3 || o === 4) { + var u = r.stateNode.containerInfo; + if (u === l || (u.nodeType === 8 && u.parentNode === l)) break; + if (o === 4) + for (o = r.return; o !== null; ) { + var s = o.tag; + if ( + (s === 3 || s === 4) && + ((s = o.stateNode.containerInfo), + s === l || (s.nodeType === 8 && s.parentNode === l)) + ) + return; + o = o.return; + } + for (; u !== null; ) { + if (((o = Qe(u)), o === null)) return; + if (((s = o.tag), s === 5 || s === 6)) { + r = i = o; + continue e; + } + u = u.parentNode; + } + } + r = r.return; + } + Ws(function () { + var d = i, + y = Zl(t), + C = []; + e: { + var h = yu.get(e); + if (h !== void 0) { + var S = oi, + k = e; + switch (e) { + case 'keypress': + if (Ht(t) === 0) break e; + case 'keydown': + case 'keyup': + S = ka; + break; + case 'focusin': + (k = 'focus'), (S = Vr); + break; + case 'focusout': + (k = 'blur'), (S = Vr); + break; + case 'beforeblur': + case 'afterblur': + S = Vr; + break; + case 'click': + if (t.button === 2) break e; + case 'auxclick': + case 'dblclick': + case 'mousedown': + case 'mousemove': + case 'mouseup': + case 'mouseout': + case 'mouseover': + case 'contextmenu': + S = Ki; + break; + case 'drag': + case 'dragend': + case 'dragenter': + case 'dragexit': + case 'dragleave': + case 'dragover': + case 'dragstart': + case 'drop': + S = fa; + break; + case 'touchcancel': + case 'touchend': + case 'touchmove': + case 'touchstart': + S = _a; + break; + case pu: + case mu: + case hu: + S = pa; + break; + case vu: + S = Pa; + break; + case 'scroll': + S = sa; + break; + case 'wheel': + S = La; + break; + case 'copy': + case 'cut': + case 'paste': + S = ha; + break; + case 'gotpointercapture': + case 'lostpointercapture': + case 'pointercancel': + case 'pointerdown': + case 'pointermove': + case 'pointerout': + case 'pointerover': + case 'pointerup': + S = Zi; + } + var E = (n & 4) !== 0, + c = !E && e === 'scroll', + a = E ? (h !== null ? h + 'Capture' : null) : h; + E = []; + for (var f = d, p; f !== null; ) { + p = f; + var m = p.stateNode; + if ( + (p.tag === 5 && + m !== null && + ((p = m), + a !== null && + ((m = st(f, a)), m != null && E.push(mt(f, m, p)))), + c) + ) + break; + f = f.return; + } + 0 < E.length && + ((h = new S(h, k, null, t, y)), C.push({ event: h, listeners: E })); + } + } + if (!(n & 7)) { + e: { + if ( + ((h = e === 'mouseover' || e === 'pointerover'), + (S = e === 'mouseout' || e === 'pointerout'), + h && + !(n & 16) && + (k = t.relatedTarget || t.fromElement) && + (Qe(k) || k[Pn])) + ) + break e; + if ( + (S || h) && + ((h = + y.window === y + ? y + : (h = y.ownerDocument) + ? h.defaultView || h.parentWindow + : window), + S + ? ((k = t.relatedTarget || t.toElement), + (S = d), + (k = k ? Qe(k) : null), + k !== null && + ((c = be(k)), k !== c || (k.tag !== 5 && k.tag !== 6)) && + (k = null)) + : ((S = null), (k = d)), + S !== k) + ) { + if ( + ((E = Ki), + (m = 'onMouseLeave'), + (a = 'onMouseEnter'), + (f = 'mouse'), + (e === 'pointerout' || e === 'pointerover') && + ((E = Zi), + (m = 'onPointerLeave'), + (a = 'onPointerEnter'), + (f = 'pointer')), + (c = S == null ? h : an(S)), + (p = k == null ? h : an(k)), + (h = new E(m, f + 'leave', S, t, y)), + (h.target = c), + (h.relatedTarget = p), + (m = null), + Qe(y) === d && + ((E = new E(a, f + 'enter', k, t, y)), + (E.target = p), + (E.relatedTarget = c), + (m = E)), + (c = m), + S && k) + ) + n: { + for (E = S, a = k, f = 0, p = E; p; p = tn(p)) f++; + for (p = 0, m = a; m; m = tn(m)) p++; + for (; 0 < f - p; ) (E = tn(E)), f--; + for (; 0 < p - f; ) (a = tn(a)), p--; + for (; f--; ) { + if (E === a || (a !== null && E === a.alternate)) break n; + (E = tn(E)), (a = tn(a)); + } + E = null; + } + else E = null; + S !== null && so(C, h, S, E, !1), + k !== null && c !== null && so(C, c, k, E, !0); + } + } + e: { + if ( + ((h = d ? an(d) : window), + (S = h.nodeName && h.nodeName.toLowerCase()), + S === 'select' || (S === 'input' && h.type === 'file')) + ) + var _ = Fa; + else if (bi(h)) + if (Cu) _ = Ba; + else { + _ = Ua; + var w = ja; + } + else + (S = h.nodeName) && + S.toLowerCase() === 'input' && + (h.type === 'checkbox' || h.type === 'radio') && + (_ = Va); + if (_ && (_ = _(e, d))) { + xu(C, _, t, y); + break e; + } + w && w(e, h, d), + e === 'focusout' && + (w = h._wrapperState) && + w.controlled && + h.type === 'number' && + rl(h, 'number', h.value); + } + switch (((w = d ? an(d) : window), e)) { + case 'focusin': + (bi(w) || w.contentEditable === 'true') && + ((sn = w), (vl = d), (et = null)); + break; + case 'focusout': + et = vl = sn = null; + break; + case 'mousedown': + yl = !0; + break; + case 'contextmenu': + case 'mouseup': + case 'dragend': + (yl = !1), lo(C, t, y); + break; + case 'selectionchange': + if (Aa) break; + case 'keydown': + case 'keyup': + lo(C, t, y); + } + var N; + if (si) + e: { + switch (e) { + case 'compositionstart': + var T = 'onCompositionStart'; + break e; + case 'compositionend': + T = 'onCompositionEnd'; + break e; + case 'compositionupdate': + T = 'onCompositionUpdate'; + break e; + } + T = void 0; + } + else + un + ? Eu(e, t) && (T = 'onCompositionEnd') + : e === 'keydown' && + t.keyCode === 229 && + (T = 'onCompositionStart'); + T && + (Su && + t.locale !== 'ko' && + (un || T !== 'onCompositionStart' + ? T === 'onCompositionEnd' && un && (N = wu()) + : ((xe = y), + (ii = 'value' in xe ? xe.value : xe.textContent), + (un = !0))), + (w = bt(d, T)), + 0 < w.length && + ((T = new Gi(T, e, null, t, y)), + C.push({ event: T, listeners: w }), + N ? (T.data = N) : ((N = ku(t)), N !== null && (T.data = N)))), + (N = Oa ? Ma(e, t) : Ra(e, t)) && + ((d = bt(d, 'onBeforeInput')), + 0 < d.length && + ((y = new Gi('onBeforeInput', 'beforeinput', null, t, y)), + C.push({ event: y, listeners: d }), + (y.data = N))); + } + Tu(C, n); + }); + } + function mt(e, n, t) { + return { instance: e, listener: n, currentTarget: t }; + } + function bt(e, n) { + for (var t = n + 'Capture', r = []; e !== null; ) { + var l = e, + i = l.stateNode; + l.tag === 5 && + i !== null && + ((l = i), + (i = st(e, t)), + i != null && r.unshift(mt(e, i, l)), + (i = st(e, n)), + i != null && r.push(mt(e, i, l))), + (e = e.return); + } + return r; + } + function tn(e) { + if (e === null) return null; + do e = e.return; + while (e && e.tag !== 5); + return e || null; + } + function so(e, n, t, r, l) { + for (var i = n._reactName, o = []; t !== null && t !== r; ) { + var u = t, + s = u.alternate, + d = u.stateNode; + if (s !== null && s === r) break; + u.tag === 5 && + d !== null && + ((u = d), + l + ? ((s = st(t, i)), s != null && o.unshift(mt(t, s, u))) + : l || ((s = st(t, i)), s != null && o.push(mt(t, s, u)))), + (t = t.return); + } + o.length !== 0 && e.push({ event: n, listeners: o }); + } + function er() {} + var Wr = null, + Ar = null; + function Mu(e, n) { + switch (e) { + case 'button': + case 'input': + case 'select': + case 'textarea': + return !!n.autoFocus; + } + return !1; + } + function gl(e, n) { + return ( + e === 'textarea' || + e === 'option' || + e === 'noscript' || + typeof n.children == 'string' || + typeof n.children == 'number' || + (typeof n.dangerouslySetInnerHTML == 'object' && + n.dangerouslySetInnerHTML !== null && + n.dangerouslySetInnerHTML.__html != null) + ); + } + var ao = typeof setTimeout == 'function' ? setTimeout : void 0, + Qa = typeof clearTimeout == 'function' ? clearTimeout : void 0; + function ai(e) { + e.nodeType === 1 + ? (e.textContent = '') + : e.nodeType === 9 && ((e = e.body), e != null && (e.textContent = '')); + } + function vn(e) { + for (; e != null; e = e.nextSibling) { + var n = e.nodeType; + if (n === 1 || n === 3) break; + } + return e; + } + function fo(e) { + e = e.previousSibling; + for (var n = 0; e; ) { + if (e.nodeType === 8) { + var t = e.data; + if (t === '$' || t === '$!' || t === '$?') { + if (n === 0) return e; + n--; + } else t === '/$' && n++; + } + e = e.previousSibling; + } + return null; + } + var Qr = 0; + function $a(e) { + return { $$typeof: Kl, toString: e, valueOf: e }; + } + var Cr = Math.random().toString(36).slice(2), + Ce = '__reactFiber$' + Cr, + nr = '__reactProps$' + Cr, + Pn = '__reactContainer$' + Cr, + co = '__reactEvents$' + Cr; + function Qe(e) { + var n = e[Ce]; + if (n) return n; + for (var t = e.parentNode; t; ) { + if ((n = t[Pn] || t[Ce])) { + if ( + ((t = n.alternate), + n.child !== null || (t !== null && t.child !== null)) + ) + for (e = fo(e); e !== null; ) { + if ((t = e[Ce])) return t; + e = fo(e); + } + return n; + } + (e = t), (t = e.parentNode); + } + return null; + } + function Et(e) { + return ( + (e = e[Ce] || e[Pn]), + !e || (e.tag !== 5 && e.tag !== 6 && e.tag !== 13 && e.tag !== 3) + ? null + : e + ); + } + function an(e) { + if (e.tag === 5 || e.tag === 6) return e.stateNode; + throw Error(v(33)); + } + function _r(e) { + return e[nr] || null; + } + function Ru(e) { + var n = e[co]; + return n === void 0 && (n = e[co] = new Set()), n; + } + var wl = [], + fn = -1; + function Ve(e) { + return { current: e }; + } + function O(e) { + 0 > fn || ((e.current = wl[fn]), (wl[fn] = null), fn--); + } + function D(e, n) { + fn++, (wl[fn] = e.current), (e.current = n); + } + var Fe = {}, + $ = Ve(Fe), + Z = Ve(!1), + Ke = Fe; + function xn(e, n) { + var t = e.type.contextTypes; + if (!t) return Fe; + var r = e.stateNode; + if (r && r.__reactInternalMemoizedUnmaskedChildContext === n) + return r.__reactInternalMemoizedMaskedChildContext; + var l = {}, + i; + for (i in t) l[i] = n[i]; + return ( + r && + ((e = e.stateNode), + (e.__reactInternalMemoizedUnmaskedChildContext = n), + (e.__reactInternalMemoizedMaskedChildContext = l)), + l + ); + } + function J(e) { + return (e = e.childContextTypes), e != null; + } + function tr() { + O(Z), O($); + } + function po(e, n, t) { + if ($.current !== Fe) throw Error(v(168)); + D($, n), D(Z, t); + } + function Du(e, n, t) { + var r = e.stateNode; + if (((e = n.childContextTypes), typeof r.getChildContext != 'function')) + return t; + r = r.getChildContext(); + for (var l in r) if (!(l in e)) throw Error(v(108, dn(n) || 'Unknown', l)); + return M({}, t, r); + } + function Wt(e) { + return ( + (e = + ((e = e.stateNode) && e.__reactInternalMemoizedMergedChildContext) || + Fe), + (Ke = $.current), + D($, e), + D(Z, Z.current), + !0 + ); + } + function mo(e, n, t) { + var r = e.stateNode; + if (!r) throw Error(v(169)); + t + ? ((e = Du(e, n, Ke)), + (r.__reactInternalMemoizedMergedChildContext = e), + O(Z), + O($), + D($, e)) + : O(Z), + D(Z, t); + } + var fi = null, + Xe = null, + Ya = U.unstable_runWithPriority, + ci = U.unstable_scheduleCallback, + Sl = U.unstable_cancelCallback, + Xa = U.unstable_shouldYield, + ho = U.unstable_requestPaint, + El = U.unstable_now, + Ka = U.unstable_getCurrentPriorityLevel, + Nr = U.unstable_ImmediatePriority, + Iu = U.unstable_UserBlockingPriority, + Fu = U.unstable_NormalPriority, + ju = U.unstable_LowPriority, + Uu = U.unstable_IdlePriority, + $r = {}, + Ga = ho !== void 0 ? ho : function () {}, + me = null, + At = null, + Yr = !1, + vo = El(), + A = + 1e4 > vo + ? El + : function () { + return El() - vo; + }; + function Cn() { + switch (Ka()) { + case Nr: + return 99; + case Iu: + return 98; + case Fu: + return 97; + case ju: + return 96; + case Uu: + return 95; + default: + throw Error(v(332)); + } + } + function Vu(e) { + switch (e) { + case 99: + return Nr; + case 98: + return Iu; + case 97: + return Fu; + case 96: + return ju; + case 95: + return Uu; + default: + throw Error(v(332)); + } + } + function Ge(e, n) { + return (e = Vu(e)), Ya(e, n); + } + function ht(e, n, t) { + return (e = Vu(e)), ci(e, n, t); + } + function pe() { + if (At !== null) { + var e = At; + (At = null), Sl(e); + } + Bu(); + } + function Bu() { + if (!Yr && me !== null) { + Yr = !0; + var e = 0; + try { + var n = me; + Ge(99, function () { + for (; e < n.length; e++) { + var t = n[e]; + do t = t(!0); + while (t !== null); + } + }), + (me = null); + } catch (t) { + throw (me !== null && (me = me.slice(e + 1)), ci(Nr, pe), t); + } finally { + Yr = !1; + } + } + } + var Za = qe.ReactCurrentBatchConfig; + function oe(e, n) { + if (e && e.defaultProps) { + (n = M({}, n)), (e = e.defaultProps); + for (var t in e) n[t] === void 0 && (n[t] = e[t]); + return n; + } + return n; + } + var rr = Ve(null), + lr = null, + cn = null, + ir = null; + function di() { + ir = cn = lr = null; + } + function pi(e) { + var n = rr.current; + O(rr), (e.type._context._currentValue = n); + } + function Hu(e, n) { + for (; e !== null; ) { + var t = e.alternate; + if ((e.childLanes & n) === n) { + if (t === null || (t.childLanes & n) === n) break; + t.childLanes |= n; + } else (e.childLanes |= n), t !== null && (t.childLanes |= n); + e = e.return; + } + } + function yn(e, n) { + (lr = e), + (ir = cn = null), + (e = e.dependencies), + e !== null && + e.firstContext !== null && + (e.lanes & n && (ue = !0), (e.firstContext = null)); + } + function re(e, n) { + if (ir !== e && n !== !1 && n !== 0) + if ( + ((typeof n != 'number' || n === 1073741823) && + ((ir = e), (n = 1073741823)), + (n = { context: e, observedBits: n, next: null }), + cn === null) + ) { + if (lr === null) throw Error(v(308)); + (cn = n), + (lr.dependencies = { lanes: 0, firstContext: n, responders: null }); + } else cn = cn.next = n; + return e._currentValue; + } + var Ee = !1; + function mi(e) { + e.updateQueue = { + baseState: e.memoizedState, + firstBaseUpdate: null, + lastBaseUpdate: null, + shared: { pending: null }, + effects: null, + }; + } + function Wu(e, n) { + (e = e.updateQueue), + n.updateQueue === e && + (n.updateQueue = { + baseState: e.baseState, + firstBaseUpdate: e.firstBaseUpdate, + lastBaseUpdate: e.lastBaseUpdate, + shared: e.shared, + effects: e.effects, + }); + } + function Le(e, n) { + return { + eventTime: e, + lane: n, + tag: 0, + payload: null, + callback: null, + next: null, + }; + } + function ze(e, n) { + if (((e = e.updateQueue), e !== null)) { + e = e.shared; + var t = e.pending; + t === null ? (n.next = n) : ((n.next = t.next), (t.next = n)), + (e.pending = n); + } + } + function yo(e, n) { + var t = e.updateQueue, + r = e.alternate; + if (r !== null && ((r = r.updateQueue), t === r)) { + var l = null, + i = null; + if (((t = t.firstBaseUpdate), t !== null)) { + do { + var o = { + eventTime: t.eventTime, + lane: t.lane, + tag: t.tag, + payload: t.payload, + callback: t.callback, + next: null, + }; + i === null ? (l = i = o) : (i = i.next = o), (t = t.next); + } while (t !== null); + i === null ? (l = i = n) : (i = i.next = n); + } else l = i = n; + (t = { + baseState: r.baseState, + firstBaseUpdate: l, + lastBaseUpdate: i, + shared: r.shared, + effects: r.effects, + }), + (e.updateQueue = t); + return; + } + (e = t.lastBaseUpdate), + e === null ? (t.firstBaseUpdate = n) : (e.next = n), + (t.lastBaseUpdate = n); + } + function vt(e, n, t, r) { + var l = e.updateQueue; + Ee = !1; + var i = l.firstBaseUpdate, + o = l.lastBaseUpdate, + u = l.shared.pending; + if (u !== null) { + l.shared.pending = null; + var s = u, + d = s.next; + (s.next = null), o === null ? (i = d) : (o.next = d), (o = s); + var y = e.alternate; + if (y !== null) { + y = y.updateQueue; + var C = y.lastBaseUpdate; + C !== o && + (C === null ? (y.firstBaseUpdate = d) : (C.next = d), + (y.lastBaseUpdate = s)); + } + } + if (i !== null) { + (C = l.baseState), (o = 0), (y = d = s = null); + do { + u = i.lane; + var h = i.eventTime; + if ((r & u) === u) { + y !== null && + (y = y.next = + { + eventTime: h, + lane: 0, + tag: i.tag, + payload: i.payload, + callback: i.callback, + next: null, + }); + e: { + var S = e, + k = i; + switch (((u = n), (h = t), k.tag)) { + case 1: + if (((S = k.payload), typeof S == 'function')) { + C = S.call(h, C, u); + break e; + } + C = S; + break e; + case 3: + S.flags = (S.flags & -4097) | 64; + case 0: + if ( + ((S = k.payload), + (u = typeof S == 'function' ? S.call(h, C, u) : S), + u == null) + ) + break e; + C = M({}, C, u); + break e; + case 2: + Ee = !0; + } + } + i.callback !== null && + ((e.flags |= 32), + (u = l.effects), + u === null ? (l.effects = [i]) : u.push(i)); + } else + (h = { + eventTime: h, + lane: u, + tag: i.tag, + payload: i.payload, + callback: i.callback, + next: null, + }), + y === null ? ((d = y = h), (s = C)) : (y = y.next = h), + (o |= u); + if (((i = i.next), i === null)) { + if (((u = l.shared.pending), u === null)) break; + (i = u.next), + (u.next = null), + (l.lastBaseUpdate = u), + (l.shared.pending = null); + } + } while (1); + y === null && (s = C), + (l.baseState = s), + (l.firstBaseUpdate = d), + (l.lastBaseUpdate = y), + (xt |= o), + (e.lanes = o), + (e.memoizedState = C); + } + } + function go(e, n, t) { + if (((e = n.effects), (n.effects = null), e !== null)) + for (n = 0; n < e.length; n++) { + var r = e[n], + l = r.callback; + if (l !== null) { + if (((r.callback = null), (r = t), typeof l != 'function')) + throw Error(v(191, l)); + l.call(r); + } + } + } + var Au = new yr.Component().refs; + function or(e, n, t, r) { + (n = e.memoizedState), + (t = t(r, n)), + (t = t == null ? n : M({}, n, t)), + (e.memoizedState = t), + e.lanes === 0 && (e.updateQueue.baseState = t); + } + var Pr = { + isMounted: function (e) { + return (e = e._reactInternals) ? be(e) === e : !1; + }, + enqueueSetState: function (e, n, t) { + e = e._reactInternals; + var r = q(), + l = Oe(e), + i = Le(r, l); + (i.payload = n), t != null && (i.callback = t), ze(e, i), Me(e, l, r); + }, + enqueueReplaceState: function (e, n, t) { + e = e._reactInternals; + var r = q(), + l = Oe(e), + i = Le(r, l); + (i.tag = 1), + (i.payload = n), + t != null && (i.callback = t), + ze(e, i), + Me(e, l, r); + }, + enqueueForceUpdate: function (e, n) { + e = e._reactInternals; + var t = q(), + r = Oe(e), + l = Le(t, r); + (l.tag = 2), n != null && (l.callback = n), ze(e, l), Me(e, r, t); + }, + }; + function wo(e, n, t, r, l, i, o) { + return ( + (e = e.stateNode), + typeof e.shouldComponentUpdate == 'function' + ? e.shouldComponentUpdate(r, i, o) + : n.prototype && n.prototype.isPureReactComponent + ? !pt(t, r) || !pt(l, i) + : !0 + ); + } + function Qu(e, n, t) { + var r = !1, + l = Fe, + i = n.contextType; + return ( + typeof i == 'object' && i !== null + ? (i = re(i)) + : ((l = J(n) ? Ke : $.current), + (r = n.contextTypes), + (i = (r = r != null) ? xn(e, l) : Fe)), + (n = new n(t, i)), + (e.memoizedState = + n.state !== null && n.state !== void 0 ? n.state : null), + (n.updater = Pr), + (e.stateNode = n), + (n._reactInternals = e), + r && + ((e = e.stateNode), + (e.__reactInternalMemoizedUnmaskedChildContext = l), + (e.__reactInternalMemoizedMaskedChildContext = i)), + n + ); + } + function So(e, n, t, r) { + (e = n.state), + typeof n.componentWillReceiveProps == 'function' && + n.componentWillReceiveProps(t, r), + typeof n.UNSAFE_componentWillReceiveProps == 'function' && + n.UNSAFE_componentWillReceiveProps(t, r), + n.state !== e && Pr.enqueueReplaceState(n, n.state, null); + } + function kl(e, n, t, r) { + var l = e.stateNode; + (l.props = t), (l.state = e.memoizedState), (l.refs = Au), mi(e); + var i = n.contextType; + typeof i == 'object' && i !== null + ? (l.context = re(i)) + : ((i = J(n) ? Ke : $.current), (l.context = xn(e, i))), + vt(e, t, l, r), + (l.state = e.memoizedState), + (i = n.getDerivedStateFromProps), + typeof i == 'function' && (or(e, n, i, t), (l.state = e.memoizedState)), + typeof n.getDerivedStateFromProps == 'function' || + typeof l.getSnapshotBeforeUpdate == 'function' || + (typeof l.UNSAFE_componentWillMount != 'function' && + typeof l.componentWillMount != 'function') || + ((n = l.state), + typeof l.componentWillMount == 'function' && l.componentWillMount(), + typeof l.UNSAFE_componentWillMount == 'function' && + l.UNSAFE_componentWillMount(), + n !== l.state && Pr.enqueueReplaceState(l, l.state, null), + vt(e, t, l, r), + (l.state = e.memoizedState)), + typeof l.componentDidMount == 'function' && (e.flags |= 4); + } + var Rt = Array.isArray; + function Fn(e, n, t) { + if ( + ((e = t.ref), + e !== null && typeof e != 'function' && typeof e != 'object') + ) { + if (t._owner) { + if (((t = t._owner), t)) { + if (t.tag !== 1) throw Error(v(309)); + var r = t.stateNode; + } + if (!r) throw Error(v(147, e)); + var l = '' + e; + return n !== null && + n.ref !== null && + typeof n.ref == 'function' && + n.ref._stringRef === l + ? n.ref + : ((n = function (i) { + var o = r.refs; + o === Au && (o = r.refs = {}), + i === null ? delete o[l] : (o[l] = i); + }), + (n._stringRef = l), + n); + } + if (typeof e != 'string') throw Error(v(284)); + if (!t._owner) throw Error(v(290, e)); + } + return e; + } + function Dt(e, n) { + if (e.type !== 'textarea') + throw Error( + v( + 31, + Object.prototype.toString.call(n) === '[object Object]' + ? 'object with keys {' + Object.keys(n).join(', ') + '}' + : n, + ), + ); + } + function $u(e) { + function n(c, a) { + if (e) { + var f = c.lastEffect; + f !== null + ? ((f.nextEffect = a), (c.lastEffect = a)) + : (c.firstEffect = c.lastEffect = a), + (a.nextEffect = null), + (a.flags = 8); + } + } + function t(c, a) { + if (!e) return null; + for (; a !== null; ) n(c, a), (a = a.sibling); + return null; + } + function r(c, a) { + for (c = new Map(); a !== null; ) + a.key !== null ? c.set(a.key, a) : c.set(a.index, a), (a = a.sibling); + return c; + } + function l(c, a) { + return (c = Ue(c, a)), (c.index = 0), (c.sibling = null), c; + } + function i(c, a, f) { + return ( + (c.index = f), + e + ? ((f = c.alternate), + f !== null + ? ((f = f.index), f < a ? ((c.flags = 2), a) : f) + : ((c.flags = 2), a)) + : a + ); + } + function o(c) { + return e && c.alternate === null && (c.flags = 2), c; + } + function u(c, a, f, p) { + return a === null || a.tag !== 6 + ? ((a = Jr(f, c.mode, p)), (a.return = c), a) + : ((a = l(a, f)), (a.return = c), a); + } + function s(c, a, f, p) { + return a !== null && a.elementType === f.type + ? ((p = l(a, f.props)), (p.ref = Fn(c, a, f)), (p.return = c), p) + : ((p = Xt(f.type, f.key, f.props, null, c.mode, p)), + (p.ref = Fn(c, a, f)), + (p.return = c), + p); + } + function d(c, a, f, p) { + return a === null || + a.tag !== 4 || + a.stateNode.containerInfo !== f.containerInfo || + a.stateNode.implementation !== f.implementation + ? ((a = qr(f, c.mode, p)), (a.return = c), a) + : ((a = l(a, f.children || [])), (a.return = c), a); + } + function y(c, a, f, p, m) { + return a === null || a.tag !== 7 + ? ((a = En(f, c.mode, p, m)), (a.return = c), a) + : ((a = l(a, f)), (a.return = c), a); + } + function C(c, a, f) { + if (typeof a == 'string' || typeof a == 'number') + return (a = Jr('' + a, c.mode, f)), (a.return = c), a; + if (typeof a == 'object' && a !== null) { + switch (a.$$typeof) { + case An: + return ( + (f = Xt(a.type, a.key, a.props, null, c.mode, f)), + (f.ref = Fn(c, null, a)), + (f.return = c), + f + ); + case We: + return (a = qr(a, c.mode, f)), (a.return = c), a; + } + if (Rt(a) || On(a)) + return (a = En(a, c.mode, f, null)), (a.return = c), a; + Dt(c, a); + } + return null; + } + function h(c, a, f, p) { + var m = a !== null ? a.key : null; + if (typeof f == 'string' || typeof f == 'number') + return m !== null ? null : u(c, a, '' + f, p); + if (typeof f == 'object' && f !== null) { + switch (f.$$typeof) { + case An: + return f.key === m + ? f.type === ke + ? y(c, a, f.props.children, p, m) + : s(c, a, f, p) + : null; + case We: + return f.key === m ? d(c, a, f, p) : null; + } + if (Rt(f) || On(f)) return m !== null ? null : y(c, a, f, p, null); + Dt(c, f); + } + return null; + } + function S(c, a, f, p, m) { + if (typeof p == 'string' || typeof p == 'number') + return (c = c.get(f) || null), u(a, c, '' + p, m); + if (typeof p == 'object' && p !== null) { + switch (p.$$typeof) { + case An: + return ( + (c = c.get(p.key === null ? f : p.key) || null), + p.type === ke + ? y(a, c, p.props.children, m, p.key) + : s(a, c, p, m) + ); + case We: + return ( + (c = c.get(p.key === null ? f : p.key) || null), d(a, c, p, m) + ); + } + if (Rt(p) || On(p)) return (c = c.get(f) || null), y(a, c, p, m, null); + Dt(a, p); + } + return null; + } + function k(c, a, f, p) { + for ( + var m = null, _ = null, w = a, N = (a = 0), T = null; + w !== null && N < f.length; + N++ + ) { + w.index > N ? ((T = w), (w = null)) : (T = w.sibling); + var P = h(c, w, f[N], p); + if (P === null) { + w === null && (w = T); + break; + } + e && w && P.alternate === null && n(c, w), + (a = i(P, a, N)), + _ === null ? (m = P) : (_.sibling = P), + (_ = P), + (w = T); + } + if (N === f.length) return t(c, w), m; + if (w === null) { + for (; N < f.length; N++) + (w = C(c, f[N], p)), + w !== null && + ((a = i(w, a, N)), + _ === null ? (m = w) : (_.sibling = w), + (_ = w)); + return m; + } + for (w = r(c, w); N < f.length; N++) + (T = S(w, c, N, f[N], p)), + T !== null && + (e && T.alternate !== null && w.delete(T.key === null ? N : T.key), + (a = i(T, a, N)), + _ === null ? (m = T) : (_.sibling = T), + (_ = T)); + return ( + e && + w.forEach(function (Se) { + return n(c, Se); + }), + m + ); + } + function E(c, a, f, p) { + var m = On(f); + if (typeof m != 'function') throw Error(v(150)); + if (((f = m.call(f)), f == null)) throw Error(v(151)); + for ( + var _ = (m = null), w = a, N = (a = 0), T = null, P = f.next(); + w !== null && !P.done; + N++, P = f.next() + ) { + w.index > N ? ((T = w), (w = null)) : (T = w.sibling); + var Se = h(c, w, P.value, p); + if (Se === null) { + w === null && (w = T); + break; + } + e && w && Se.alternate === null && n(c, w), + (a = i(Se, a, N)), + _ === null ? (m = Se) : (_.sibling = Se), + (_ = Se), + (w = T); + } + if (P.done) return t(c, w), m; + if (w === null) { + for (; !P.done; N++, P = f.next()) + (P = C(c, P.value, p)), + P !== null && + ((a = i(P, a, N)), + _ === null ? (m = P) : (_.sibling = P), + (_ = P)); + return m; + } + for (w = r(c, w); !P.done; N++, P = f.next()) + (P = S(w, c, N, P.value, p)), + P !== null && + (e && P.alternate !== null && w.delete(P.key === null ? N : P.key), + (a = i(P, a, N)), + _ === null ? (m = P) : (_.sibling = P), + (_ = P)); + return ( + e && + w.forEach(function (_s) { + return n(c, _s); + }), + m + ); + } + return function (c, a, f, p) { + var m = + typeof f == 'object' && f !== null && f.type === ke && f.key === null; + m && (f = f.props.children); + var _ = typeof f == 'object' && f !== null; + if (_) + switch (f.$$typeof) { + case An: + e: { + for (_ = f.key, m = a; m !== null; ) { + if (m.key === _) { + switch (m.tag) { + case 7: + if (f.type === ke) { + t(c, m.sibling), + (a = l(m, f.props.children)), + (a.return = c), + (c = a); + break e; + } + break; + default: + if (m.elementType === f.type) { + t(c, m.sibling), + (a = l(m, f.props)), + (a.ref = Fn(c, m, f)), + (a.return = c), + (c = a); + break e; + } + } + t(c, m); + break; + } else n(c, m); + m = m.sibling; + } + f.type === ke + ? ((a = En(f.props.children, c.mode, p, f.key)), + (a.return = c), + (c = a)) + : ((p = Xt(f.type, f.key, f.props, null, c.mode, p)), + (p.ref = Fn(c, a, f)), + (p.return = c), + (c = p)); + } + return o(c); + case We: + e: { + for (m = f.key; a !== null; ) { + if (a.key === m) + if ( + a.tag === 4 && + a.stateNode.containerInfo === f.containerInfo && + a.stateNode.implementation === f.implementation + ) { + t(c, a.sibling), + (a = l(a, f.children || [])), + (a.return = c), + (c = a); + break e; + } else { + t(c, a); + break; + } + else n(c, a); + a = a.sibling; + } + (a = qr(f, c.mode, p)), (a.return = c), (c = a); + } + return o(c); + } + if (typeof f == 'string' || typeof f == 'number') + return ( + (f = '' + f), + a !== null && a.tag === 6 + ? (t(c, a.sibling), (a = l(a, f)), (a.return = c), (c = a)) + : (t(c, a), (a = Jr(f, c.mode, p)), (a.return = c), (c = a)), + o(c) + ); + if (Rt(f)) return k(c, a, f, p); + if (On(f)) return E(c, a, f, p); + if ((_ && Dt(c, f), typeof f > 'u' && !m)) + switch (c.tag) { + case 1: + case 22: + case 0: + case 11: + case 15: + throw Error(v(152, dn(c.type) || 'Component')); + } + return t(c, a); + }; + } + var ur = $u(!0), + Yu = $u(!1), + kt = {}, + ce = Ve(kt), + yt = Ve(kt), + gt = Ve(kt); + function $e(e) { + if (e === kt) throw Error(v(174)); + return e; + } + function xl(e, n) { + switch ((D(gt, n), D(yt, e), D(ce, kt), (e = n.nodeType), e)) { + case 9: + case 11: + n = (n = n.documentElement) ? n.namespaceURI : ul(null, ''); + break; + default: + (e = e === 8 ? n.parentNode : n), + (n = e.namespaceURI || null), + (e = e.tagName), + (n = ul(n, e)); + } + O(ce), D(ce, n); + } + function _n() { + O(ce), O(yt), O(gt); + } + function Eo(e) { + $e(gt.current); + var n = $e(ce.current), + t = ul(n, e.type); + n !== t && (D(yt, e), D(ce, t)); + } + function hi(e) { + yt.current === e && (O(ce), O(yt)); + } + var R = Ve(0); + function sr(e) { + for (var n = e; n !== null; ) { + if (n.tag === 13) { + var t = n.memoizedState; + if ( + t !== null && + ((t = t.dehydrated), t === null || t.data === '$?' || t.data === '$!') + ) + return n; + } else if (n.tag === 19 && n.memoizedProps.revealOrder !== void 0) { + if (n.flags & 64) return n; + } else if (n.child !== null) { + (n.child.return = n), (n = n.child); + continue; + } + if (n === e) break; + for (; n.sibling === null; ) { + if (n.return === null || n.return === e) return null; + n = n.return; + } + (n.sibling.return = n.return), (n = n.sibling); + } + return null; + } + var ve = null, + _e = null, + de = !1; + function Xu(e, n) { + var t = ne(5, null, null, 0); + (t.elementType = 'DELETED'), + (t.type = 'DELETED'), + (t.stateNode = n), + (t.return = e), + (t.flags = 8), + e.lastEffect !== null + ? ((e.lastEffect.nextEffect = t), (e.lastEffect = t)) + : (e.firstEffect = e.lastEffect = t); + } + function ko(e, n) { + switch (e.tag) { + case 5: + var t = e.type; + return ( + (n = + n.nodeType !== 1 || t.toLowerCase() !== n.nodeName.toLowerCase() + ? null + : n), + n !== null ? ((e.stateNode = n), !0) : !1 + ); + case 6: + return ( + (n = e.pendingProps === '' || n.nodeType !== 3 ? null : n), + n !== null ? ((e.stateNode = n), !0) : !1 + ); + case 13: + return !1; + default: + return !1; + } + } + function Cl(e) { + if (de) { + var n = _e; + if (n) { + var t = n; + if (!ko(e, n)) { + if (((n = vn(t.nextSibling)), !n || !ko(e, n))) { + (e.flags = (e.flags & -1025) | 2), (de = !1), (ve = e); + return; + } + Xu(ve, t); + } + (ve = e), (_e = vn(n.firstChild)); + } else (e.flags = (e.flags & -1025) | 2), (de = !1), (ve = e); + } + } + function xo(e) { + for ( + e = e.return; + e !== null && e.tag !== 5 && e.tag !== 3 && e.tag !== 13; + + ) + e = e.return; + ve = e; + } + function It(e) { + if (e !== ve) return !1; + if (!de) return xo(e), (de = !0), !1; + var n = e.type; + if ( + e.tag !== 5 || + (n !== 'head' && n !== 'body' && !gl(n, e.memoizedProps)) + ) + for (n = _e; n; ) Xu(e, n), (n = vn(n.nextSibling)); + if ((xo(e), e.tag === 13)) { + if (((e = e.memoizedState), (e = e !== null ? e.dehydrated : null), !e)) + throw Error(v(317)); + e: { + for (e = e.nextSibling, n = 0; e; ) { + if (e.nodeType === 8) { + var t = e.data; + if (t === '/$') { + if (n === 0) { + _e = vn(e.nextSibling); + break e; + } + n--; + } else (t !== '$' && t !== '$!' && t !== '$?') || n++; + } + e = e.nextSibling; + } + _e = null; + } + } else _e = ve ? vn(e.stateNode.nextSibling) : null; + return !0; + } + function Xr() { + (_e = ve = null), (de = !1); + } + var gn = []; + function vi() { + for (var e = 0; e < gn.length; e++) + gn[e]._workInProgressVersionPrimary = null; + gn.length = 0; + } + var nt = qe.ReactCurrentDispatcher, + te = qe.ReactCurrentBatchConfig, + wt = 0, + I = null, + W = null, + V = null, + ar = !1, + tt = !1; + function K() { + throw Error(v(321)); + } + function yi(e, n) { + if (n === null) return !1; + for (var t = 0; t < n.length && t < e.length; t++) + if (!ee(e[t], n[t])) return !1; + return !0; + } + function gi(e, n, t, r, l, i) { + if ( + ((wt = i), + (I = n), + (n.memoizedState = null), + (n.updateQueue = null), + (n.lanes = 0), + (nt.current = e === null || e.memoizedState === null ? qa : ba), + (e = t(r, l)), + tt) + ) { + i = 0; + do { + if (((tt = !1), !(25 > i))) throw Error(v(301)); + (i += 1), + (V = W = null), + (n.updateQueue = null), + (nt.current = ef), + (e = t(r, l)); + } while (tt); + } + if ( + ((nt.current = pr), + (n = W !== null && W.next !== null), + (wt = 0), + (V = W = I = null), + (ar = !1), + n) + ) + throw Error(v(300)); + return e; + } + function Ye() { + var e = { + memoizedState: null, + baseState: null, + baseQueue: null, + queue: null, + next: null, + }; + return V === null ? (I.memoizedState = V = e) : (V = V.next = e), V; + } + function en() { + if (W === null) { + var e = I.alternate; + e = e !== null ? e.memoizedState : null; + } else e = W.next; + var n = V === null ? I.memoizedState : V.next; + if (n !== null) (V = n), (W = e); + else { + if (e === null) throw Error(v(310)); + (W = e), + (e = { + memoizedState: W.memoizedState, + baseState: W.baseState, + baseQueue: W.baseQueue, + queue: W.queue, + next: null, + }), + V === null ? (I.memoizedState = V = e) : (V = V.next = e); + } + return V; + } + function ae(e, n) { + return typeof n == 'function' ? n(e) : n; + } + function jn(e) { + var n = en(), + t = n.queue; + if (t === null) throw Error(v(311)); + t.lastRenderedReducer = e; + var r = W, + l = r.baseQueue, + i = t.pending; + if (i !== null) { + if (l !== null) { + var o = l.next; + (l.next = i.next), (i.next = o); + } + (r.baseQueue = l = i), (t.pending = null); + } + if (l !== null) { + (l = l.next), (r = r.baseState); + var u = (o = i = null), + s = l; + do { + var d = s.lane; + if ((wt & d) === d) + u !== null && + (u = u.next = + { + lane: 0, + action: s.action, + eagerReducer: s.eagerReducer, + eagerState: s.eagerState, + next: null, + }), + (r = s.eagerReducer === e ? s.eagerState : e(r, s.action)); + else { + var y = { + lane: d, + action: s.action, + eagerReducer: s.eagerReducer, + eagerState: s.eagerState, + next: null, + }; + u === null ? ((o = u = y), (i = r)) : (u = u.next = y), + (I.lanes |= d), + (xt |= d); + } + s = s.next; + } while (s !== null && s !== l); + u === null ? (i = r) : (u.next = o), + ee(r, n.memoizedState) || (ue = !0), + (n.memoizedState = r), + (n.baseState = i), + (n.baseQueue = u), + (t.lastRenderedState = r); + } + return [n.memoizedState, t.dispatch]; + } + function Un(e) { + var n = en(), + t = n.queue; + if (t === null) throw Error(v(311)); + t.lastRenderedReducer = e; + var r = t.dispatch, + l = t.pending, + i = n.memoizedState; + if (l !== null) { + t.pending = null; + var o = (l = l.next); + do (i = e(i, o.action)), (o = o.next); + while (o !== l); + ee(i, n.memoizedState) || (ue = !0), + (n.memoizedState = i), + n.baseQueue === null && (n.baseState = i), + (t.lastRenderedState = i); + } + return [i, r]; + } + function Co(e, n, t) { + var r = n._getVersion; + r = r(n._source); + var l = n._workInProgressVersionPrimary; + if ( + (l !== null + ? (e = l === r) + : ((e = e.mutableReadLanes), + (e = (wt & e) === e) && + ((n._workInProgressVersionPrimary = r), gn.push(n))), + e) + ) + return t(n._source); + throw (gn.push(n), Error(v(350))); + } + function Ku(e, n, t, r) { + var l = Y; + if (l === null) throw Error(v(349)); + var i = n._getVersion, + o = i(n._source), + u = nt.current, + s = u.useState(function () { + return Co(l, n, t); + }), + d = s[1], + y = s[0]; + s = V; + var C = e.memoizedState, + h = C.refs, + S = h.getSnapshot, + k = C.source; + C = C.subscribe; + var E = I; + return ( + (e.memoizedState = { refs: h, source: n, subscribe: r }), + u.useEffect( + function () { + (h.getSnapshot = t), (h.setSnapshot = d); + var c = i(n._source); + if (!ee(o, c)) { + (c = t(n._source)), + ee(y, c) || + (d(c), (c = Oe(E)), (l.mutableReadLanes |= c & l.pendingLanes)), + (c = l.mutableReadLanes), + (l.entangledLanes |= c); + for (var a = l.entanglements, f = c; 0 < f; ) { + var p = 31 - Ie(f), + m = 1 << p; + (a[p] |= c), (f &= ~m); + } + } + }, + [t, n, r], + ), + u.useEffect( + function () { + return r(n._source, function () { + var c = h.getSnapshot, + a = h.setSnapshot; + try { + a(c(n._source)); + var f = Oe(E); + l.mutableReadLanes |= f & l.pendingLanes; + } catch (p) { + a(function () { + throw p; + }); + } + }); + }, + [n, r], + ), + (ee(S, t) && ee(k, n) && ee(C, r)) || + ((e = { + pending: null, + dispatch: null, + lastRenderedReducer: ae, + lastRenderedState: y, + }), + (e.dispatch = d = Ei.bind(null, I, e)), + (s.queue = e), + (s.baseQueue = null), + (y = Co(l, n, t)), + (s.memoizedState = s.baseState = y)), + y + ); + } + function Gu(e, n, t) { + var r = en(); + return Ku(r, e, n, t); + } + function Vn(e) { + var n = Ye(); + return ( + typeof e == 'function' && (e = e()), + (n.memoizedState = n.baseState = e), + (e = n.queue = + { + pending: null, + dispatch: null, + lastRenderedReducer: ae, + lastRenderedState: e, + }), + (e = e.dispatch = Ei.bind(null, I, e)), + [n.memoizedState, e] + ); + } + function fr(e, n, t, r) { + return ( + (e = { tag: e, create: n, destroy: t, deps: r, next: null }), + (n = I.updateQueue), + n === null + ? ((n = { lastEffect: null }), + (I.updateQueue = n), + (n.lastEffect = e.next = e)) + : ((t = n.lastEffect), + t === null + ? (n.lastEffect = e.next = e) + : ((r = t.next), (t.next = e), (e.next = r), (n.lastEffect = e))), + e + ); + } + function _o(e) { + var n = Ye(); + return (e = { current: e }), (n.memoizedState = e); + } + function cr() { + return en().memoizedState; + } + function _l(e, n, t, r) { + var l = Ye(); + (I.flags |= e), + (l.memoizedState = fr(1 | n, t, void 0, r === void 0 ? null : r)); + } + function wi(e, n, t, r) { + var l = en(); + r = r === void 0 ? null : r; + var i = void 0; + if (W !== null) { + var o = W.memoizedState; + if (((i = o.destroy), r !== null && yi(r, o.deps))) { + fr(n, t, i, r); + return; + } + } + (I.flags |= e), (l.memoizedState = fr(1 | n, t, i, r)); + } + function No(e, n) { + return _l(516, 4, e, n); + } + function dr(e, n) { + return wi(516, 4, e, n); + } + function Zu(e, n) { + return wi(4, 2, e, n); + } + function Ju(e, n) { + if (typeof n == 'function') + return ( + (e = e()), + n(e), + function () { + n(null); + } + ); + if (n != null) + return ( + (e = e()), + (n.current = e), + function () { + n.current = null; + } + ); + } + function qu(e, n, t) { + return ( + (t = t != null ? t.concat([e]) : null), wi(4, 2, Ju.bind(null, n, e), t) + ); + } + function Si() {} + function bu(e, n) { + var t = en(); + n = n === void 0 ? null : n; + var r = t.memoizedState; + return r !== null && n !== null && yi(n, r[1]) + ? r[0] + : ((t.memoizedState = [e, n]), e); + } + function es(e, n) { + var t = en(); + n = n === void 0 ? null : n; + var r = t.memoizedState; + return r !== null && n !== null && yi(n, r[1]) + ? r[0] + : ((e = e()), (t.memoizedState = [e, n]), e); + } + function Ja(e, n) { + var t = Cn(); + Ge(98 > t ? 98 : t, function () { + e(!0); + }), + Ge(97 < t ? 97 : t, function () { + var r = te.transition; + te.transition = 1; + try { + e(!1), n(); + } finally { + te.transition = r; + } + }); + } + function Ei(e, n, t) { + var r = q(), + l = Oe(e), + i = { + lane: l, + action: t, + eagerReducer: null, + eagerState: null, + next: null, + }, + o = n.pending; + if ( + (o === null ? (i.next = i) : ((i.next = o.next), (o.next = i)), + (n.pending = i), + (o = e.alternate), + e === I || (o !== null && o === I)) + ) + tt = ar = !0; + else { + if ( + e.lanes === 0 && + (o === null || o.lanes === 0) && + ((o = n.lastRenderedReducer), o !== null) + ) + try { + var u = n.lastRenderedState, + s = o(u, t); + if (((i.eagerReducer = o), (i.eagerState = s), ee(s, u))) return; + } catch { + } finally { + } + Me(e, l, r); + } + } + var pr = { + readContext: re, + useCallback: K, + useContext: K, + useEffect: K, + useImperativeHandle: K, + useLayoutEffect: K, + useMemo: K, + useReducer: K, + useRef: K, + useState: K, + useDebugValue: K, + useDeferredValue: K, + useTransition: K, + useMutableSource: K, + useOpaqueIdentifier: K, + unstable_isNewReconciler: !1, + }, + qa = { + readContext: re, + useCallback: function (e, n) { + return (Ye().memoizedState = [e, n === void 0 ? null : n]), e; + }, + useContext: re, + useEffect: No, + useImperativeHandle: function (e, n, t) { + return ( + (t = t != null ? t.concat([e]) : null), + _l(4, 2, Ju.bind(null, n, e), t) + ); + }, + useLayoutEffect: function (e, n) { + return _l(4, 2, e, n); + }, + useMemo: function (e, n) { + var t = Ye(); + return ( + (n = n === void 0 ? null : n), + (e = e()), + (t.memoizedState = [e, n]), + e + ); + }, + useReducer: function (e, n, t) { + var r = Ye(); + return ( + (n = t !== void 0 ? t(n) : n), + (r.memoizedState = r.baseState = n), + (e = r.queue = + { + pending: null, + dispatch: null, + lastRenderedReducer: e, + lastRenderedState: n, + }), + (e = e.dispatch = Ei.bind(null, I, e)), + [r.memoizedState, e] + ); + }, + useRef: _o, + useState: Vn, + useDebugValue: Si, + useDeferredValue: function (e) { + var n = Vn(e), + t = n[0], + r = n[1]; + return ( + No( + function () { + var l = te.transition; + te.transition = 1; + try { + r(e); + } finally { + te.transition = l; + } + }, + [e], + ), + t + ); + }, + useTransition: function () { + var e = Vn(!1), + n = e[0]; + return (e = Ja.bind(null, e[1])), _o(e), [e, n]; + }, + useMutableSource: function (e, n, t) { + var r = Ye(); + return ( + (r.memoizedState = { + refs: { getSnapshot: n, setSnapshot: null }, + source: e, + subscribe: t, + }), + Ku(r, e, n, t) + ); + }, + useOpaqueIdentifier: function () { + if (de) { + var e = !1, + n = $a(function () { + throw ( + (e || ((e = !0), t('r:' + (Qr++).toString(36))), Error(v(355))) + ); + }), + t = Vn(n)[1]; + return ( + !(I.mode & 2) && + ((I.flags |= 516), + fr( + 5, + function () { + t('r:' + (Qr++).toString(36)); + }, + void 0, + null, + )), + n + ); + } + return (n = 'r:' + (Qr++).toString(36)), Vn(n), n; + }, + unstable_isNewReconciler: !1, + }, + ba = { + readContext: re, + useCallback: bu, + useContext: re, + useEffect: dr, + useImperativeHandle: qu, + useLayoutEffect: Zu, + useMemo: es, + useReducer: jn, + useRef: cr, + useState: function () { + return jn(ae); + }, + useDebugValue: Si, + useDeferredValue: function (e) { + var n = jn(ae), + t = n[0], + r = n[1]; + return ( + dr( + function () { + var l = te.transition; + te.transition = 1; + try { + r(e); + } finally { + te.transition = l; + } + }, + [e], + ), + t + ); + }, + useTransition: function () { + var e = jn(ae)[0]; + return [cr().current, e]; + }, + useMutableSource: Gu, + useOpaqueIdentifier: function () { + return jn(ae)[0]; + }, + unstable_isNewReconciler: !1, + }, + ef = { + readContext: re, + useCallback: bu, + useContext: re, + useEffect: dr, + useImperativeHandle: qu, + useLayoutEffect: Zu, + useMemo: es, + useReducer: Un, + useRef: cr, + useState: function () { + return Un(ae); + }, + useDebugValue: Si, + useDeferredValue: function (e) { + var n = Un(ae), + t = n[0], + r = n[1]; + return ( + dr( + function () { + var l = te.transition; + te.transition = 1; + try { + r(e); + } finally { + te.transition = l; + } + }, + [e], + ), + t + ); + }, + useTransition: function () { + var e = Un(ae)[0]; + return [cr().current, e]; + }, + useMutableSource: Gu, + useOpaqueIdentifier: function () { + return Un(ae)[0]; + }, + unstable_isNewReconciler: !1, + }, + nf = qe.ReactCurrentOwner, + ue = !1; + function G(e, n, t, r) { + n.child = e === null ? Yu(n, null, t, r) : ur(n, e.child, t, r); + } + function Po(e, n, t, r, l) { + t = t.render; + var i = n.ref; + return ( + yn(n, l), + (r = gi(e, n, t, r, i, l)), + e !== null && !ue + ? ((n.updateQueue = e.updateQueue), + (n.flags &= -517), + (e.lanes &= ~l), + ye(e, n, l)) + : ((n.flags |= 1), G(e, n, r, l), n.child) + ); + } + function To(e, n, t, r, l, i) { + if (e === null) { + var o = t.type; + return typeof o == 'function' && + !Pi(o) && + o.defaultProps === void 0 && + t.compare === null && + t.defaultProps === void 0 + ? ((n.tag = 15), (n.type = o), ns(e, n, o, r, l, i)) + : ((e = Xt(t.type, null, r, n, n.mode, i)), + (e.ref = n.ref), + (e.return = n), + (n.child = e)); + } + return ( + (o = e.child), + !(l & i) && + ((l = o.memoizedProps), + (t = t.compare), + (t = t !== null ? t : pt), + t(l, r) && e.ref === n.ref) + ? ye(e, n, i) + : ((n.flags |= 1), + (e = Ue(o, r)), + (e.ref = n.ref), + (e.return = n), + (n.child = e)) + ); + } + function ns(e, n, t, r, l, i) { + if (e !== null && pt(e.memoizedProps, r) && e.ref === n.ref) + if (((ue = !1), (i & l) !== 0)) e.flags & 16384 && (ue = !0); + else return (n.lanes = e.lanes), ye(e, n, i); + return Nl(e, n, t, r, i); + } + function Kr(e, n, t) { + var r = n.pendingProps, + l = r.children, + i = e !== null ? e.memoizedState : null; + if (r.mode === 'hidden' || r.mode === 'unstable-defer-without-hiding') + if (!(n.mode & 4)) (n.memoizedState = { baseLanes: 0 }), jt(n, t); + else if (t & 1073741824) + (n.memoizedState = { baseLanes: 0 }), + jt(n, i !== null ? i.baseLanes : t); + else + return ( + (e = i !== null ? i.baseLanes | t : t), + (n.lanes = n.childLanes = 1073741824), + (n.memoizedState = { baseLanes: e }), + jt(n, e), + null + ); + else + i !== null ? ((r = i.baseLanes | t), (n.memoizedState = null)) : (r = t), + jt(n, r); + return G(e, n, l, t), n.child; + } + function ts(e, n) { + var t = n.ref; + ((e === null && t !== null) || (e !== null && e.ref !== t)) && + (n.flags |= 128); + } + function Nl(e, n, t, r, l) { + var i = J(t) ? Ke : $.current; + return ( + (i = xn(n, i)), + yn(n, l), + (t = gi(e, n, t, r, i, l)), + e !== null && !ue + ? ((n.updateQueue = e.updateQueue), + (n.flags &= -517), + (e.lanes &= ~l), + ye(e, n, l)) + : ((n.flags |= 1), G(e, n, t, l), n.child) + ); + } + function Lo(e, n, t, r, l) { + if (J(t)) { + var i = !0; + Wt(n); + } else i = !1; + if ((yn(n, l), n.stateNode === null)) + e !== null && + ((e.alternate = null), (n.alternate = null), (n.flags |= 2)), + Qu(n, t, r), + kl(n, t, r, l), + (r = !0); + else if (e === null) { + var o = n.stateNode, + u = n.memoizedProps; + o.props = u; + var s = o.context, + d = t.contextType; + typeof d == 'object' && d !== null + ? (d = re(d)) + : ((d = J(t) ? Ke : $.current), (d = xn(n, d))); + var y = t.getDerivedStateFromProps, + C = + typeof y == 'function' || + typeof o.getSnapshotBeforeUpdate == 'function'; + C || + (typeof o.UNSAFE_componentWillReceiveProps != 'function' && + typeof o.componentWillReceiveProps != 'function') || + ((u !== r || s !== d) && So(n, o, r, d)), + (Ee = !1); + var h = n.memoizedState; + (o.state = h), + vt(n, r, o, l), + (s = n.memoizedState), + u !== r || h !== s || Z.current || Ee + ? (typeof y == 'function' && (or(n, t, y, r), (s = n.memoizedState)), + (u = Ee || wo(n, t, u, r, h, s, d)) + ? (C || + (typeof o.UNSAFE_componentWillMount != 'function' && + typeof o.componentWillMount != 'function') || + (typeof o.componentWillMount == 'function' && + o.componentWillMount(), + typeof o.UNSAFE_componentWillMount == 'function' && + o.UNSAFE_componentWillMount()), + typeof o.componentDidMount == 'function' && (n.flags |= 4)) + : (typeof o.componentDidMount == 'function' && (n.flags |= 4), + (n.memoizedProps = r), + (n.memoizedState = s)), + (o.props = r), + (o.state = s), + (o.context = d), + (r = u)) + : (typeof o.componentDidMount == 'function' && (n.flags |= 4), + (r = !1)); + } else { + (o = n.stateNode), + Wu(e, n), + (u = n.memoizedProps), + (d = n.type === n.elementType ? u : oe(n.type, u)), + (o.props = d), + (C = n.pendingProps), + (h = o.context), + (s = t.contextType), + typeof s == 'object' && s !== null + ? (s = re(s)) + : ((s = J(t) ? Ke : $.current), (s = xn(n, s))); + var S = t.getDerivedStateFromProps; + (y = + typeof S == 'function' || + typeof o.getSnapshotBeforeUpdate == 'function') || + (typeof o.UNSAFE_componentWillReceiveProps != 'function' && + typeof o.componentWillReceiveProps != 'function') || + ((u !== C || h !== s) && So(n, o, r, s)), + (Ee = !1), + (h = n.memoizedState), + (o.state = h), + vt(n, r, o, l); + var k = n.memoizedState; + u !== C || h !== k || Z.current || Ee + ? (typeof S == 'function' && (or(n, t, S, r), (k = n.memoizedState)), + (d = Ee || wo(n, t, d, r, h, k, s)) + ? (y || + (typeof o.UNSAFE_componentWillUpdate != 'function' && + typeof o.componentWillUpdate != 'function') || + (typeof o.componentWillUpdate == 'function' && + o.componentWillUpdate(r, k, s), + typeof o.UNSAFE_componentWillUpdate == 'function' && + o.UNSAFE_componentWillUpdate(r, k, s)), + typeof o.componentDidUpdate == 'function' && (n.flags |= 4), + typeof o.getSnapshotBeforeUpdate == 'function' && + (n.flags |= 256)) + : (typeof o.componentDidUpdate != 'function' || + (u === e.memoizedProps && h === e.memoizedState) || + (n.flags |= 4), + typeof o.getSnapshotBeforeUpdate != 'function' || + (u === e.memoizedProps && h === e.memoizedState) || + (n.flags |= 256), + (n.memoizedProps = r), + (n.memoizedState = k)), + (o.props = r), + (o.state = k), + (o.context = s), + (r = d)) + : (typeof o.componentDidUpdate != 'function' || + (u === e.memoizedProps && h === e.memoizedState) || + (n.flags |= 4), + typeof o.getSnapshotBeforeUpdate != 'function' || + (u === e.memoizedProps && h === e.memoizedState) || + (n.flags |= 256), + (r = !1)); + } + return Pl(e, n, t, r, i, l); + } + function Pl(e, n, t, r, l, i) { + ts(e, n); + var o = (n.flags & 64) !== 0; + if (!r && !o) return l && mo(n, t, !1), ye(e, n, i); + (r = n.stateNode), (nf.current = n); + var u = + o && typeof t.getDerivedStateFromError != 'function' ? null : r.render(); + return ( + (n.flags |= 1), + e !== null && o + ? ((n.child = ur(n, e.child, null, i)), (n.child = ur(n, null, u, i))) + : G(e, n, u, i), + (n.memoizedState = r.state), + l && mo(n, t, !0), + n.child + ); + } + function zo(e) { + var n = e.stateNode; + n.pendingContext + ? po(e, n.pendingContext, n.pendingContext !== n.context) + : n.context && po(e, n.context, !1), + xl(e, n.containerInfo); + } + var Ft = { dehydrated: null, retryLane: 0 }; + function Oo(e, n, t) { + var r = n.pendingProps, + l = R.current, + i = !1, + o; + return ( + (o = (n.flags & 64) !== 0) || + (o = e !== null && e.memoizedState === null ? !1 : (l & 2) !== 0), + o + ? ((i = !0), (n.flags &= -65)) + : (e !== null && e.memoizedState === null) || + r.fallback === void 0 || + r.unstable_avoidThisFallback === !0 || + (l |= 1), + D(R, l & 1), + e === null + ? (r.fallback !== void 0 && Cl(n), + (e = r.children), + (l = r.fallback), + i + ? ((e = Mo(n, e, l, t)), + (n.child.memoizedState = { baseLanes: t }), + (n.memoizedState = Ft), + e) + : typeof r.unstable_expectedLoadTime == 'number' + ? ((e = Mo(n, e, l, t)), + (n.child.memoizedState = { baseLanes: t }), + (n.memoizedState = Ft), + (n.lanes = 33554432), + e) + : ((t = Ti({ mode: 'visible', children: e }, n.mode, t, null)), + (t.return = n), + (n.child = t))) + : e.memoizedState !== null + ? i + ? ((r = Do(e, n, r.children, r.fallback, t)), + (i = n.child), + (l = e.child.memoizedState), + (i.memoizedState = + l === null ? { baseLanes: t } : { baseLanes: l.baseLanes | t }), + (i.childLanes = e.childLanes & ~t), + (n.memoizedState = Ft), + r) + : ((t = Ro(e, n, r.children, t)), (n.memoizedState = null), t) + : i + ? ((r = Do(e, n, r.children, r.fallback, t)), + (i = n.child), + (l = e.child.memoizedState), + (i.memoizedState = + l === null ? { baseLanes: t } : { baseLanes: l.baseLanes | t }), + (i.childLanes = e.childLanes & ~t), + (n.memoizedState = Ft), + r) + : ((t = Ro(e, n, r.children, t)), (n.memoizedState = null), t) + ); + } + function Mo(e, n, t, r) { + var l = e.mode, + i = e.child; + return ( + (n = { mode: 'hidden', children: n }), + !(l & 2) && i !== null + ? ((i.childLanes = 0), (i.pendingProps = n)) + : (i = Ti(n, l, 0, null)), + (t = En(t, l, r, null)), + (i.return = e), + (t.return = e), + (i.sibling = t), + (e.child = i), + t + ); + } + function Ro(e, n, t, r) { + var l = e.child; + return ( + (e = l.sibling), + (t = Ue(l, { mode: 'visible', children: t })), + !(n.mode & 2) && (t.lanes = r), + (t.return = n), + (t.sibling = null), + e !== null && + ((e.nextEffect = null), + (e.flags = 8), + (n.firstEffect = n.lastEffect = e)), + (n.child = t) + ); + } + function Do(e, n, t, r, l) { + var i = n.mode, + o = e.child; + e = o.sibling; + var u = { mode: 'hidden', children: t }; + return ( + !(i & 2) && n.child !== o + ? ((t = n.child), + (t.childLanes = 0), + (t.pendingProps = u), + (o = t.lastEffect), + o !== null + ? ((n.firstEffect = t.firstEffect), + (n.lastEffect = o), + (o.nextEffect = null)) + : (n.firstEffect = n.lastEffect = null)) + : (t = Ue(o, u)), + e !== null ? (r = Ue(e, r)) : ((r = En(r, i, l, null)), (r.flags |= 2)), + (r.return = n), + (t.return = n), + (t.sibling = r), + (n.child = t), + r + ); + } + function Io(e, n) { + e.lanes |= n; + var t = e.alternate; + t !== null && (t.lanes |= n), Hu(e.return, n); + } + function Gr(e, n, t, r, l, i) { + var o = e.memoizedState; + o === null + ? (e.memoizedState = { + isBackwards: n, + rendering: null, + renderingStartTime: 0, + last: r, + tail: t, + tailMode: l, + lastEffect: i, + }) + : ((o.isBackwards = n), + (o.rendering = null), + (o.renderingStartTime = 0), + (o.last = r), + (o.tail = t), + (o.tailMode = l), + (o.lastEffect = i)); + } + function Fo(e, n, t) { + var r = n.pendingProps, + l = r.revealOrder, + i = r.tail; + if ((G(e, n, r.children, t), (r = R.current), r & 2)) + (r = (r & 1) | 2), (n.flags |= 64); + else { + if (e !== null && e.flags & 64) + e: for (e = n.child; e !== null; ) { + if (e.tag === 13) e.memoizedState !== null && Io(e, t); + else if (e.tag === 19) Io(e, t); + else if (e.child !== null) { + (e.child.return = e), (e = e.child); + continue; + } + if (e === n) break e; + for (; e.sibling === null; ) { + if (e.return === null || e.return === n) break e; + e = e.return; + } + (e.sibling.return = e.return), (e = e.sibling); + } + r &= 1; + } + if ((D(R, r), !(n.mode & 2))) n.memoizedState = null; + else + switch (l) { + case 'forwards': + for (t = n.child, l = null; t !== null; ) + (e = t.alternate), + e !== null && sr(e) === null && (l = t), + (t = t.sibling); + (t = l), + t === null + ? ((l = n.child), (n.child = null)) + : ((l = t.sibling), (t.sibling = null)), + Gr(n, !1, l, t, i, n.lastEffect); + break; + case 'backwards': + for (t = null, l = n.child, n.child = null; l !== null; ) { + if (((e = l.alternate), e !== null && sr(e) === null)) { + n.child = l; + break; + } + (e = l.sibling), (l.sibling = t), (t = l), (l = e); + } + Gr(n, !0, t, null, i, n.lastEffect); + break; + case 'together': + Gr(n, !1, null, null, void 0, n.lastEffect); + break; + default: + n.memoizedState = null; + } + return n.child; + } + function ye(e, n, t) { + if ( + (e !== null && (n.dependencies = e.dependencies), + (xt |= n.lanes), + t & n.childLanes) + ) { + if (e !== null && n.child !== e.child) throw Error(v(153)); + if (n.child !== null) { + for ( + e = n.child, t = Ue(e, e.pendingProps), n.child = t, t.return = n; + e.sibling !== null; + + ) + (e = e.sibling), + (t = t.sibling = Ue(e, e.pendingProps)), + (t.return = n); + t.sibling = null; + } + return n.child; + } + return null; + } + var rs, Tl, ls, is; + rs = function (e, n) { + for (var t = n.child; t !== null; ) { + if (t.tag === 5 || t.tag === 6) e.appendChild(t.stateNode); + else if (t.tag !== 4 && t.child !== null) { + (t.child.return = t), (t = t.child); + continue; + } + if (t === n) break; + for (; t.sibling === null; ) { + if (t.return === null || t.return === n) return; + t = t.return; + } + (t.sibling.return = t.return), (t = t.sibling); + } + }; + Tl = function () {}; + ls = function (e, n, t, r) { + var l = e.memoizedProps; + if (l !== r) { + (e = n.stateNode), $e(ce.current); + var i = null; + switch (t) { + case 'input': + (l = nl(e, l)), (r = nl(e, r)), (i = []); + break; + case 'option': + (l = ll(e, l)), (r = ll(e, r)), (i = []); + break; + case 'select': + (l = M({}, l, { value: void 0 })), + (r = M({}, r, { value: void 0 })), + (i = []); + break; + case 'textarea': + (l = il(e, l)), (r = il(e, r)), (i = []); + break; + default: + typeof l.onClick != 'function' && + typeof r.onClick == 'function' && + (e.onclick = er); + } + sl(t, r); + var o; + t = null; + for (d in l) + if (!r.hasOwnProperty(d) && l.hasOwnProperty(d) && l[d] != null) + if (d === 'style') { + var u = l[d]; + for (o in u) u.hasOwnProperty(o) && (t || (t = {}), (t[o] = '')); + } else + d !== 'dangerouslySetInnerHTML' && + d !== 'children' && + d !== 'suppressContentEditableWarning' && + d !== 'suppressHydrationWarning' && + d !== 'autoFocus' && + (ot.hasOwnProperty(d) + ? i || (i = []) + : (i = i || []).push(d, null)); + for (d in r) { + var s = r[d]; + if ( + ((u = l?.[d]), + r.hasOwnProperty(d) && s !== u && (s != null || u != null)) + ) + if (d === 'style') + if (u) { + for (o in u) + !u.hasOwnProperty(o) || + (s && s.hasOwnProperty(o)) || + (t || (t = {}), (t[o] = '')); + for (o in s) + s.hasOwnProperty(o) && + u[o] !== s[o] && + (t || (t = {}), (t[o] = s[o])); + } else t || (i || (i = []), i.push(d, t)), (t = s); + else + d === 'dangerouslySetInnerHTML' + ? ((s = s ? s.__html : void 0), + (u = u ? u.__html : void 0), + s != null && u !== s && (i = i || []).push(d, s)) + : d === 'children' + ? (typeof s != 'string' && typeof s != 'number') || + (i = i || []).push(d, '' + s) + : d !== 'suppressContentEditableWarning' && + d !== 'suppressHydrationWarning' && + (ot.hasOwnProperty(d) + ? (s != null && d === 'onScroll' && z('scroll', e), + i || u === s || (i = [])) + : typeof s == 'object' && s !== null && s.$$typeof === Kl + ? s.toString() + : (i = i || []).push(d, s)); + } + t && (i = i || []).push('style', t); + var d = i; + (n.updateQueue = d) && (n.flags |= 4); + } + }; + is = function (e, n, t, r) { + t !== r && (n.flags |= 4); + }; + function Bn(e, n) { + if (!de) + switch (e.tailMode) { + case 'hidden': + n = e.tail; + for (var t = null; n !== null; ) + n.alternate !== null && (t = n), (n = n.sibling); + t === null ? (e.tail = null) : (t.sibling = null); + break; + case 'collapsed': + t = e.tail; + for (var r = null; t !== null; ) + t.alternate !== null && (r = t), (t = t.sibling); + r === null + ? n || e.tail === null + ? (e.tail = null) + : (e.tail.sibling = null) + : (r.sibling = null); + } + } + function tf(e, n, t) { + var r = n.pendingProps; + switch (n.tag) { + case 2: + case 16: + case 15: + case 0: + case 11: + case 7: + case 8: + case 12: + case 9: + case 14: + return null; + case 1: + return J(n.type) && tr(), null; + case 3: + return ( + _n(), + O(Z), + O($), + vi(), + (r = n.stateNode), + r.pendingContext && + ((r.context = r.pendingContext), (r.pendingContext = null)), + (e === null || e.child === null) && + (It(n) ? (n.flags |= 4) : r.hydrate || (n.flags |= 256)), + Tl(n), + null + ); + case 5: + hi(n); + var l = $e(gt.current); + if (((t = n.type), e !== null && n.stateNode != null)) + ls(e, n, t, r, l), e.ref !== n.ref && (n.flags |= 128); + else { + if (!r) { + if (n.stateNode === null) throw Error(v(166)); + return null; + } + if (((e = $e(ce.current)), It(n))) { + (r = n.stateNode), (t = n.type); + var i = n.memoizedProps; + switch (((r[Ce] = n), (r[nr] = i), t)) { + case 'dialog': + z('cancel', r), z('close', r); + break; + case 'iframe': + case 'object': + case 'embed': + z('load', r); + break; + case 'video': + case 'audio': + for (e = 0; e < $n.length; e++) z($n[e], r); + break; + case 'source': + z('error', r); + break; + case 'img': + case 'image': + case 'link': + z('error', r), z('load', r); + break; + case 'details': + z('toggle', r); + break; + case 'input': + ji(r, i), z('invalid', r); + break; + case 'select': + (r._wrapperState = { wasMultiple: !!i.multiple }), + z('invalid', r); + break; + case 'textarea': + Vi(r, i), z('invalid', r); + } + sl(t, i), (e = null); + for (var o in i) + i.hasOwnProperty(o) && + ((l = i[o]), + o === 'children' + ? typeof l == 'string' + ? r.textContent !== l && (e = ['children', l]) + : typeof l == 'number' && + r.textContent !== '' + l && + (e = ['children', '' + l]) + : ot.hasOwnProperty(o) && + l != null && + o === 'onScroll' && + z('scroll', r)); + switch (t) { + case 'input': + Nt(r), Ui(r, i, !0); + break; + case 'textarea': + Nt(r), Bi(r); + break; + case 'select': + case 'option': + break; + default: + typeof i.onClick == 'function' && (r.onclick = er); + } + (r = e), (n.updateQueue = r), r !== null && (n.flags |= 4); + } else { + switch ( + ((o = l.nodeType === 9 ? l : l.ownerDocument), + e === ol.html && (e = qo(t)), + e === ol.html + ? t === 'script' + ? ((e = o.createElement('div')), + (e.innerHTML = ''), + (e = e.removeChild(e.firstChild))) + : typeof r.is == 'string' + ? (e = o.createElement(t, { is: r.is })) + : ((e = o.createElement(t)), + t === 'select' && + ((o = e), + r.multiple + ? (o.multiple = !0) + : r.size && (o.size = r.size))) + : (e = o.createElementNS(e, t)), + (e[Ce] = n), + (e[nr] = r), + rs(e, n, !1, !1), + (n.stateNode = e), + (o = al(t, r)), + t) + ) { + case 'dialog': + z('cancel', e), z('close', e), (l = r); + break; + case 'iframe': + case 'object': + case 'embed': + z('load', e), (l = r); + break; + case 'video': + case 'audio': + for (l = 0; l < $n.length; l++) z($n[l], e); + l = r; + break; + case 'source': + z('error', e), (l = r); + break; + case 'img': + case 'image': + case 'link': + z('error', e), z('load', e), (l = r); + break; + case 'details': + z('toggle', e), (l = r); + break; + case 'input': + ji(e, r), (l = nl(e, r)), z('invalid', e); + break; + case 'option': + l = ll(e, r); + break; + case 'select': + (e._wrapperState = { wasMultiple: !!r.multiple }), + (l = M({}, r, { value: void 0 })), + z('invalid', e); + break; + case 'textarea': + Vi(e, r), (l = il(e, r)), z('invalid', e); + break; + default: + l = r; + } + sl(t, l); + var u = l; + for (i in u) + if (u.hasOwnProperty(i)) { + var s = u[i]; + i === 'style' + ? nu(e, s) + : i === 'dangerouslySetInnerHTML' + ? ((s = s ? s.__html : void 0), s != null && bo(e, s)) + : i === 'children' + ? typeof s == 'string' + ? (t !== 'textarea' || s !== '') && ut(e, s) + : typeof s == 'number' && ut(e, '' + s) + : i !== 'suppressContentEditableWarning' && + i !== 'suppressHydrationWarning' && + i !== 'autoFocus' && + (ot.hasOwnProperty(i) + ? s != null && i === 'onScroll' && z('scroll', e) + : s != null && Wl(e, i, s, o)); + } + switch (t) { + case 'input': + Nt(e), Ui(e, r, !1); + break; + case 'textarea': + Nt(e), Bi(e); + break; + case 'option': + r.value != null && e.setAttribute('value', '' + De(r.value)); + break; + case 'select': + (e.multiple = !!r.multiple), + (i = r.value), + i != null + ? pn(e, !!r.multiple, i, !1) + : r.defaultValue != null && + pn(e, !!r.multiple, r.defaultValue, !0); + break; + default: + typeof l.onClick == 'function' && (e.onclick = er); + } + Mu(t, r) && (n.flags |= 4); + } + n.ref !== null && (n.flags |= 128); + } + return null; + case 6: + if (e && n.stateNode != null) is(e, n, e.memoizedProps, r); + else { + if (typeof r != 'string' && n.stateNode === null) throw Error(v(166)); + (t = $e(gt.current)), + $e(ce.current), + It(n) + ? ((r = n.stateNode), + (t = n.memoizedProps), + (r[Ce] = n), + r.nodeValue !== t && (n.flags |= 4)) + : ((r = (t.nodeType === 9 ? t : t.ownerDocument).createTextNode( + r, + )), + (r[Ce] = n), + (n.stateNode = r)); + } + return null; + case 13: + return ( + O(R), + (r = n.memoizedState), + n.flags & 64 + ? ((n.lanes = t), n) + : ((r = r !== null), + (t = !1), + e === null + ? n.memoizedProps.fallback !== void 0 && It(n) + : (t = e.memoizedState !== null), + r && + !t && + n.mode & 2 && + ((e === null && + n.memoizedProps.unstable_avoidThisFallback !== !0) || + R.current & 1 + ? B === 0 && (B = 3) + : ((B === 0 || B === 3) && (B = 4), + Y === null || + (!(xt & 134217727) && !(Ln & 134217727)) || + wn(Y, Q))), + (r || t) && (n.flags |= 4), + null) + ); + case 4: + return _n(), Tl(n), e === null && Lu(n.stateNode.containerInfo), null; + case 10: + return pi(n), null; + case 17: + return J(n.type) && tr(), null; + case 19: + if ((O(R), (r = n.memoizedState), r === null)) return null; + if (((i = (n.flags & 64) !== 0), (o = r.rendering), o === null)) + if (i) Bn(r, !1); + else { + if (B !== 0 || (e !== null && e.flags & 64)) + for (e = n.child; e !== null; ) { + if (((o = sr(e)), o !== null)) { + for ( + n.flags |= 64, + Bn(r, !1), + i = o.updateQueue, + i !== null && ((n.updateQueue = i), (n.flags |= 4)), + r.lastEffect === null && (n.firstEffect = null), + n.lastEffect = r.lastEffect, + r = t, + t = n.child; + t !== null; + + ) + (i = t), + (e = r), + (i.flags &= 2), + (i.nextEffect = null), + (i.firstEffect = null), + (i.lastEffect = null), + (o = i.alternate), + o === null + ? ((i.childLanes = 0), + (i.lanes = e), + (i.child = null), + (i.memoizedProps = null), + (i.memoizedState = null), + (i.updateQueue = null), + (i.dependencies = null), + (i.stateNode = null)) + : ((i.childLanes = o.childLanes), + (i.lanes = o.lanes), + (i.child = o.child), + (i.memoizedProps = o.memoizedProps), + (i.memoizedState = o.memoizedState), + (i.updateQueue = o.updateQueue), + (i.type = o.type), + (e = o.dependencies), + (i.dependencies = + e === null + ? null + : { + lanes: e.lanes, + firstContext: e.firstContext, + })), + (t = t.sibling); + return D(R, (R.current & 1) | 2), n.child; + } + e = e.sibling; + } + r.tail !== null && + A() > Dl && + ((n.flags |= 64), (i = !0), Bn(r, !1), (n.lanes = 33554432)); + } + else { + if (!i) + if (((e = sr(o)), e !== null)) { + if ( + ((n.flags |= 64), + (i = !0), + (t = e.updateQueue), + t !== null && ((n.updateQueue = t), (n.flags |= 4)), + Bn(r, !0), + r.tail === null && + r.tailMode === 'hidden' && + !o.alternate && + !de) + ) + return ( + (n = n.lastEffect = r.lastEffect), + n !== null && (n.nextEffect = null), + null + ); + } else + 2 * A() - r.renderingStartTime > Dl && + t !== 1073741824 && + ((n.flags |= 64), (i = !0), Bn(r, !1), (n.lanes = 33554432)); + r.isBackwards + ? ((o.sibling = n.child), (n.child = o)) + : ((t = r.last), + t !== null ? (t.sibling = o) : (n.child = o), + (r.last = o)); + } + return r.tail !== null + ? ((t = r.tail), + (r.rendering = t), + (r.tail = t.sibling), + (r.lastEffect = n.lastEffect), + (r.renderingStartTime = A()), + (t.sibling = null), + (n = R.current), + D(R, i ? (n & 1) | 2 : n & 1), + t) + : null; + case 23: + case 24: + return ( + Ni(), + e !== null && + (e.memoizedState !== null) != (n.memoizedState !== null) && + r.mode !== 'unstable-defer-without-hiding' && + (n.flags |= 4), + null + ); + } + throw Error(v(156, n.tag)); + } + function rf(e) { + switch (e.tag) { + case 1: + J(e.type) && tr(); + var n = e.flags; + return n & 4096 ? ((e.flags = (n & -4097) | 64), e) : null; + case 3: + if ((_n(), O(Z), O($), vi(), (n = e.flags), n & 64)) + throw Error(v(285)); + return (e.flags = (n & -4097) | 64), e; + case 5: + return hi(e), null; + case 13: + return ( + O(R), + (n = e.flags), + n & 4096 ? ((e.flags = (n & -4097) | 64), e) : null + ); + case 19: + return O(R), null; + case 4: + return _n(), null; + case 10: + return pi(e), null; + case 23: + case 24: + return Ni(), null; + default: + return null; + } + } + function ki(e, n) { + try { + var t = '', + r = n; + do (t += js(r)), (r = r.return); + while (r); + var l = t; + } catch (i) { + l = + ` +Error generating stack: ` + + i.message + + ` +` + + i.stack; + } + return { value: e, source: n, stack: l }; + } + function Ll(e, n) { + try { + console.error(n.value); + } catch (t) { + setTimeout(function () { + throw t; + }); + } + } + var lf = typeof WeakMap == 'function' ? WeakMap : Map; + function os(e, n, t) { + (t = Le(-1, t)), (t.tag = 3), (t.payload = { element: null }); + var r = n.value; + return ( + (t.callback = function () { + hr || ((hr = !0), (Il = r)), Ll(e, n); + }), + t + ); + } + function us(e, n, t) { + (t = Le(-1, t)), (t.tag = 3); + var r = e.type.getDerivedStateFromError; + if (typeof r == 'function') { + var l = n.value; + t.payload = function () { + return Ll(e, n), r(l); + }; + } + var i = e.stateNode; + return ( + i !== null && + typeof i.componentDidCatch == 'function' && + (t.callback = function () { + typeof r != 'function' && + (fe === null ? (fe = new Set([this])) : fe.add(this), Ll(e, n)); + var o = n.stack; + this.componentDidCatch(n.value, { + componentStack: o !== null ? o : '', + }); + }), + t + ); + } + var of = typeof WeakSet == 'function' ? WeakSet : Set; + function jo(e) { + var n = e.ref; + if (n !== null) + if (typeof n == 'function') + try { + n(null); + } catch (t) { + Re(e, t); + } + else n.current = null; + } + function uf(e, n) { + switch (n.tag) { + case 0: + case 11: + case 15: + case 22: + return; + case 1: + if (n.flags & 256 && e !== null) { + var t = e.memoizedProps, + r = e.memoizedState; + (e = n.stateNode), + (n = e.getSnapshotBeforeUpdate( + n.elementType === n.type ? t : oe(n.type, t), + r, + )), + (e.__reactInternalSnapshotBeforeUpdate = n); + } + return; + case 3: + n.flags & 256 && ai(n.stateNode.containerInfo); + return; + case 5: + case 6: + case 4: + case 17: + return; + } + throw Error(v(163)); + } + function sf(e, n, t) { + switch (t.tag) { + case 0: + case 11: + case 15: + case 22: + if ( + ((n = t.updateQueue), + (n = n !== null ? n.lastEffect : null), + n !== null) + ) { + e = n = n.next; + do { + if ((e.tag & 3) === 3) { + var r = e.create; + e.destroy = r(); + } + e = e.next; + } while (e !== n); + } + if ( + ((n = t.updateQueue), + (n = n !== null ? n.lastEffect : null), + n !== null) + ) { + e = n = n.next; + do { + var l = e; + (r = l.next), + (l = l.tag), + l & 4 && l & 1 && (vs(t, e), vf(t, e)), + (e = r); + } while (e !== n); + } + return; + case 1: + (e = t.stateNode), + t.flags & 4 && + (n === null + ? e.componentDidMount() + : ((r = + t.elementType === t.type + ? n.memoizedProps + : oe(t.type, n.memoizedProps)), + e.componentDidUpdate( + r, + n.memoizedState, + e.__reactInternalSnapshotBeforeUpdate, + ))), + (n = t.updateQueue), + n !== null && go(t, n, e); + return; + case 3: + if (((n = t.updateQueue), n !== null)) { + if (((e = null), t.child !== null)) + switch (t.child.tag) { + case 5: + e = t.child.stateNode; + break; + case 1: + e = t.child.stateNode; + } + go(t, n, e); + } + return; + case 5: + (e = t.stateNode), + n === null && t.flags & 4 && Mu(t.type, t.memoizedProps) && e.focus(); + return; + case 6: + return; + case 4: + return; + case 12: + return; + case 13: + t.memoizedState === null && + ((t = t.alternate), + t !== null && + ((t = t.memoizedState), + t !== null && ((t = t.dehydrated), t !== null && cu(t)))); + return; + case 19: + case 17: + case 20: + case 21: + case 23: + case 24: + return; + } + throw Error(v(163)); + } + function Uo(e, n) { + for (var t = e; ; ) { + if (t.tag === 5) { + var r = t.stateNode; + if (n) + (r = r.style), + typeof r.setProperty == 'function' + ? r.setProperty('display', 'none', 'important') + : (r.display = 'none'); + else { + r = t.stateNode; + var l = t.memoizedProps.style; + (l = l != null && l.hasOwnProperty('display') ? l.display : null), + (r.style.display = eu('display', l)); + } + } else if (t.tag === 6) t.stateNode.nodeValue = n ? '' : t.memoizedProps; + else if ( + ((t.tag !== 23 && t.tag !== 24) || + t.memoizedState === null || + t === e) && + t.child !== null + ) { + (t.child.return = t), (t = t.child); + continue; + } + if (t === e) break; + for (; t.sibling === null; ) { + if (t.return === null || t.return === e) return; + t = t.return; + } + (t.sibling.return = t.return), (t = t.sibling); + } + } + function Vo(e, n) { + if (Xe && typeof Xe.onCommitFiberUnmount == 'function') + try { + Xe.onCommitFiberUnmount(fi, n); + } catch {} + switch (n.tag) { + case 0: + case 11: + case 14: + case 15: + case 22: + if ( + ((e = n.updateQueue), e !== null && ((e = e.lastEffect), e !== null)) + ) { + var t = (e = e.next); + do { + var r = t, + l = r.destroy; + if (((r = r.tag), l !== void 0)) + if (r & 4) vs(n, t); + else { + r = n; + try { + l(); + } catch (i) { + Re(r, i); + } + } + t = t.next; + } while (t !== e); + } + break; + case 1: + if ( + (jo(n), + (e = n.stateNode), + typeof e.componentWillUnmount == 'function') + ) + try { + (e.props = n.memoizedProps), + (e.state = n.memoizedState), + e.componentWillUnmount(); + } catch (i) { + Re(n, i); + } + break; + case 5: + jo(n); + break; + case 4: + ss(e, n); + } + } + function Bo(e) { + (e.alternate = null), + (e.child = null), + (e.dependencies = null), + (e.firstEffect = null), + (e.lastEffect = null), + (e.memoizedProps = null), + (e.memoizedState = null), + (e.pendingProps = null), + (e.return = null), + (e.updateQueue = null); + } + function Ho(e) { + return e.tag === 5 || e.tag === 3 || e.tag === 4; + } + function Wo(e) { + e: { + for (var n = e.return; n !== null; ) { + if (Ho(n)) break e; + n = n.return; + } + throw Error(v(160)); + } + var t = n; + switch (((n = t.stateNode), t.tag)) { + case 5: + var r = !1; + break; + case 3: + (n = n.containerInfo), (r = !0); + break; + case 4: + (n = n.containerInfo), (r = !0); + break; + default: + throw Error(v(161)); + } + t.flags & 16 && (ut(n, ''), (t.flags &= -17)); + e: n: for (t = e; ; ) { + for (; t.sibling === null; ) { + if (t.return === null || Ho(t.return)) { + t = null; + break e; + } + t = t.return; + } + for ( + t.sibling.return = t.return, t = t.sibling; + t.tag !== 5 && t.tag !== 6 && t.tag !== 18; + + ) { + if (t.flags & 2 || t.child === null || t.tag === 4) continue n; + (t.child.return = t), (t = t.child); + } + if (!(t.flags & 2)) { + t = t.stateNode; + break e; + } + } + r ? zl(e, t, n) : Ol(e, t, n); + } + function zl(e, n, t) { + var r = e.tag, + l = r === 5 || r === 6; + if (l) + (e = l ? e.stateNode : e.stateNode.instance), + n + ? t.nodeType === 8 + ? t.parentNode.insertBefore(e, n) + : t.insertBefore(e, n) + : (t.nodeType === 8 + ? ((n = t.parentNode), n.insertBefore(e, t)) + : ((n = t), n.appendChild(e)), + (t = t._reactRootContainer), + t != null || n.onclick !== null || (n.onclick = er)); + else if (r !== 4 && ((e = e.child), e !== null)) + for (zl(e, n, t), e = e.sibling; e !== null; ) + zl(e, n, t), (e = e.sibling); + } + function Ol(e, n, t) { + var r = e.tag, + l = r === 5 || r === 6; + if (l) + (e = l ? e.stateNode : e.stateNode.instance), + n ? t.insertBefore(e, n) : t.appendChild(e); + else if (r !== 4 && ((e = e.child), e !== null)) + for (Ol(e, n, t), e = e.sibling; e !== null; ) + Ol(e, n, t), (e = e.sibling); + } + function ss(e, n) { + for (var t = n, r = !1, l, i; ; ) { + if (!r) { + r = t.return; + e: for (;;) { + if (r === null) throw Error(v(160)); + switch (((l = r.stateNode), r.tag)) { + case 5: + i = !1; + break e; + case 3: + (l = l.containerInfo), (i = !0); + break e; + case 4: + (l = l.containerInfo), (i = !0); + break e; + } + r = r.return; + } + r = !0; + } + if (t.tag === 5 || t.tag === 6) { + e: for (var o = e, u = t, s = u; ; ) + if ((Vo(o, s), s.child !== null && s.tag !== 4)) + (s.child.return = s), (s = s.child); + else { + if (s === u) break e; + for (; s.sibling === null; ) { + if (s.return === null || s.return === u) break e; + s = s.return; + } + (s.sibling.return = s.return), (s = s.sibling); + } + i + ? ((o = l), + (u = t.stateNode), + o.nodeType === 8 ? o.parentNode.removeChild(u) : o.removeChild(u)) + : l.removeChild(t.stateNode); + } else if (t.tag === 4) { + if (t.child !== null) { + (l = t.stateNode.containerInfo), + (i = !0), + (t.child.return = t), + (t = t.child); + continue; + } + } else if ((Vo(e, t), t.child !== null)) { + (t.child.return = t), (t = t.child); + continue; + } + if (t === n) break; + for (; t.sibling === null; ) { + if (t.return === null || t.return === n) return; + (t = t.return), t.tag === 4 && (r = !1); + } + (t.sibling.return = t.return), (t = t.sibling); + } + } + function Zr(e, n) { + switch (n.tag) { + case 0: + case 11: + case 14: + case 15: + case 22: + var t = n.updateQueue; + if (((t = t !== null ? t.lastEffect : null), t !== null)) { + var r = (t = t.next); + do + (r.tag & 3) === 3 && + ((e = r.destroy), (r.destroy = void 0), e !== void 0 && e()), + (r = r.next); + while (r !== t); + } + return; + case 1: + return; + case 5: + if (((t = n.stateNode), t != null)) { + r = n.memoizedProps; + var l = e !== null ? e.memoizedProps : r; + e = n.type; + var i = n.updateQueue; + if (((n.updateQueue = null), i !== null)) { + for ( + t[nr] = r, + e === 'input' && + r.type === 'radio' && + r.name != null && + Zo(t, r), + al(e, l), + n = al(e, r), + l = 0; + l < i.length; + l += 2 + ) { + var o = i[l], + u = i[l + 1]; + o === 'style' + ? nu(t, u) + : o === 'dangerouslySetInnerHTML' + ? bo(t, u) + : o === 'children' + ? ut(t, u) + : Wl(t, o, u, n); + } + switch (e) { + case 'input': + tl(t, r); + break; + case 'textarea': + Jo(t, r); + break; + case 'select': + (e = t._wrapperState.wasMultiple), + (t._wrapperState.wasMultiple = !!r.multiple), + (i = r.value), + i != null + ? pn(t, !!r.multiple, i, !1) + : e !== !!r.multiple && + (r.defaultValue != null + ? pn(t, !!r.multiple, r.defaultValue, !0) + : pn(t, !!r.multiple, r.multiple ? [] : '', !1)); + } + } + } + return; + case 6: + if (n.stateNode === null) throw Error(v(162)); + n.stateNode.nodeValue = n.memoizedProps; + return; + case 3: + (t = n.stateNode), t.hydrate && ((t.hydrate = !1), cu(t.containerInfo)); + return; + case 12: + return; + case 13: + n.memoizedState !== null && ((_i = A()), Uo(n.child, !0)), Ao(n); + return; + case 19: + Ao(n); + return; + case 17: + return; + case 23: + case 24: + Uo(n, n.memoizedState !== null); + return; + } + throw Error(v(163)); + } + function Ao(e) { + var n = e.updateQueue; + if (n !== null) { + e.updateQueue = null; + var t = e.stateNode; + t === null && (t = e.stateNode = new of()), + n.forEach(function (r) { + var l = wf.bind(null, e, r); + t.has(r) || (t.add(r), r.then(l, l)); + }); + } + } + function af(e, n) { + return e !== null && + ((e = e.memoizedState), e === null || e.dehydrated !== null) + ? ((n = n.memoizedState), n !== null && n.dehydrated === null) + : !1; + } + var ff = Math.ceil, + mr = qe.ReactCurrentDispatcher, + xi = qe.ReactCurrentOwner, + x = 0, + Y = null, + j = null, + Q = 0, + Ze = 0, + Ml = Ve(0), + B = 0, + Tr = null, + Tn = 0, + xt = 0, + Ln = 0, + Ci = 0, + Rl = null, + _i = 0, + Dl = 1 / 0; + function zn() { + Dl = A() + 500; + } + var g = null, + hr = !1, + Il = null, + fe = null, + je = !1, + rt = null, + Yn = 90, + Fl = [], + jl = [], + ge = null, + lt = 0, + Ul = null, + Qt = -1, + he = 0, + $t = 0, + it = null, + Yt = !1; + function q() { + return x & 48 ? A() : Qt !== -1 ? Qt : (Qt = A()); + } + function Oe(e) { + if (((e = e.mode), !(e & 2))) return 1; + if (!(e & 4)) return Cn() === 99 ? 1 : 2; + if ((he === 0 && (he = Tn), Za.transition !== 0)) { + $t !== 0 && ($t = Rl !== null ? Rl.pendingLanes : 0), (e = he); + var n = 4186112 & ~$t; + return ( + (n &= -n), + n === 0 && ((e = 4186112 & ~e), (n = e & -e), n === 0 && (n = 8192)), + n + ); + } + return ( + (e = Cn()), + x & 4 && e === 98 ? (e = qt(12, he)) : ((e = bs(e)), (e = qt(e, he))), + e + ); + } + function Me(e, n, t) { + if (50 < lt) throw ((lt = 0), (Ul = null), Error(v(185))); + if (((e = Lr(e, n)), e === null)) return null; + Er(e, n, t), e === Y && ((Ln |= n), B === 4 && wn(e, Q)); + var r = Cn(); + n === 1 + ? x & 8 && !(x & 48) + ? Vl(e) + : (le(e, t), x === 0 && (zn(), pe())) + : (!(x & 4) || + (r !== 98 && r !== 99) || + (ge === null ? (ge = new Set([e])) : ge.add(e)), + le(e, t)), + (Rl = e); + } + function Lr(e, n) { + e.lanes |= n; + var t = e.alternate; + for (t !== null && (t.lanes |= n), t = e, e = e.return; e !== null; ) + (e.childLanes |= n), + (t = e.alternate), + t !== null && (t.childLanes |= n), + (t = e), + (e = e.return); + return t.tag === 3 ? t.stateNode : null; + } + function le(e, n) { + for ( + var t = e.callbackNode, + r = e.suspendedLanes, + l = e.pingedLanes, + i = e.expirationTimes, + o = e.pendingLanes; + 0 < o; + + ) { + var u = 31 - Ie(o), + s = 1 << u, + d = i[u]; + if (d === -1) { + if (!(s & r) || s & l) { + (d = n), rn(s); + var y = L; + i[u] = 10 <= y ? d + 250 : 6 <= y ? d + 5e3 : -1; + } + } else d <= n && (e.expiredLanes |= s); + o &= ~s; + } + if (((r = ct(e, e === Y ? Q : 0)), (n = L), r === 0)) + t !== null && + (t !== $r && Sl(t), (e.callbackNode = null), (e.callbackPriority = 0)); + else { + if (t !== null) { + if (e.callbackPriority === n) return; + t !== $r && Sl(t); + } + n === 15 + ? ((t = Vl.bind(null, e)), + me === null ? ((me = [t]), (At = ci(Nr, Bu))) : me.push(t), + (t = $r)) + : n === 14 + ? (t = ht(99, Vl.bind(null, e))) + : ((t = ea(n)), (t = ht(t, as.bind(null, e)))), + (e.callbackPriority = n), + (e.callbackNode = t); + } + } + function as(e) { + if (((Qt = -1), ($t = he = 0), x & 48)) throw Error(v(327)); + var n = e.callbackNode; + if (Be() && e.callbackNode !== n) return null; + var t = ct(e, e === Y ? Q : 0); + if (t === 0) return null; + var r = t, + l = x; + x |= 16; + var i = ps(); + (Y !== e || Q !== r) && (zn(), Sn(e, r)); + do + try { + pf(); + break; + } catch (u) { + ds(e, u); + } + while (1); + if ( + (di(), + (mr.current = i), + (x = l), + j !== null ? (r = 0) : ((Y = null), (Q = 0), (r = B)), + Tn & Ln) + ) + Sn(e, 0); + else if (r !== 0) { + if ( + (r === 2 && + ((x |= 64), + e.hydrate && ((e.hydrate = !1), ai(e.containerInfo)), + (t = gu(e)), + t !== 0 && (r = Xn(e, t))), + r === 1) + ) + throw ((n = Tr), Sn(e, 0), wn(e, t), le(e, A()), n); + switch ( + ((e.finishedWork = e.current.alternate), (e.finishedLanes = t), r) + ) { + case 0: + case 1: + throw Error(v(345)); + case 2: + He(e); + break; + case 3: + if ( + (wn(e, t), (t & 62914560) === t && ((r = _i + 500 - A()), 10 < r)) + ) { + if (ct(e, 0) !== 0) break; + if (((l = e.suspendedLanes), (l & t) !== t)) { + q(), (e.pingedLanes |= e.suspendedLanes & l); + break; + } + e.timeoutHandle = ao(He.bind(null, e), r); + break; + } + He(e); + break; + case 4: + if ((wn(e, t), (t & 4186112) === t)) break; + for (r = e.eventTimes, l = -1; 0 < t; ) { + var o = 31 - Ie(t); + (i = 1 << o), (o = r[o]), o > l && (l = o), (t &= ~i); + } + if ( + ((t = l), + (t = A() - t), + (t = + (120 > t + ? 120 + : 480 > t + ? 480 + : 1080 > t + ? 1080 + : 1920 > t + ? 1920 + : 3e3 > t + ? 3e3 + : 4320 > t + ? 4320 + : 1960 * ff(t / 1960)) - t), + 10 < t) + ) { + e.timeoutHandle = ao(He.bind(null, e), t); + break; + } + He(e); + break; + case 5: + He(e); + break; + default: + throw Error(v(329)); + } + } + return le(e, A()), e.callbackNode === n ? as.bind(null, e) : null; + } + function wn(e, n) { + for ( + n &= ~Ci, + n &= ~Ln, + e.suspendedLanes |= n, + e.pingedLanes &= ~n, + e = e.expirationTimes; + 0 < n; + + ) { + var t = 31 - Ie(n), + r = 1 << t; + (e[t] = -1), (n &= ~r); + } + } + function Vl(e) { + if (x & 48) throw Error(v(327)); + if ((Be(), e === Y && e.expiredLanes & Q)) { + var n = Q, + t = Xn(e, n); + Tn & Ln && ((n = ct(e, n)), (t = Xn(e, n))); + } else (n = ct(e, 0)), (t = Xn(e, n)); + if ( + (e.tag !== 0 && + t === 2 && + ((x |= 64), + e.hydrate && ((e.hydrate = !1), ai(e.containerInfo)), + (n = gu(e)), + n !== 0 && (t = Xn(e, n))), + t === 1) + ) + throw ((t = Tr), Sn(e, 0), wn(e, n), le(e, A()), t); + return ( + (e.finishedWork = e.current.alternate), + (e.finishedLanes = n), + He(e), + le(e, A()), + null + ); + } + function cf() { + if (ge !== null) { + var e = ge; + (ge = null), + e.forEach(function (n) { + (n.expiredLanes |= 24 & n.pendingLanes), le(n, A()); + }); + } + pe(); + } + function fs(e, n) { + var t = x; + x |= 1; + try { + return e(n); + } finally { + (x = t), x === 0 && (zn(), pe()); + } + } + function cs(e, n) { + var t = x; + (x &= -2), (x |= 8); + try { + return e(n); + } finally { + (x = t), x === 0 && (zn(), pe()); + } + } + function jt(e, n) { + D(Ml, Ze), (Ze |= n), (Tn |= n); + } + function Ni() { + (Ze = Ml.current), O(Ml); + } + function Sn(e, n) { + (e.finishedWork = null), (e.finishedLanes = 0); + var t = e.timeoutHandle; + if ((t !== -1 && ((e.timeoutHandle = -1), Qa(t)), j !== null)) + for (t = j.return; t !== null; ) { + var r = t; + switch (r.tag) { + case 1: + (r = r.type.childContextTypes), r != null && tr(); + break; + case 3: + _n(), O(Z), O($), vi(); + break; + case 5: + hi(r); + break; + case 4: + _n(); + break; + case 13: + O(R); + break; + case 19: + O(R); + break; + case 10: + pi(r); + break; + case 23: + case 24: + Ni(); + } + t = t.return; + } + (Y = e), + (j = Ue(e.current, null)), + (Q = Ze = Tn = n), + (B = 0), + (Tr = null), + (Ci = Ln = xt = 0); + } + function ds(e, n) { + do { + var t = j; + try { + if ((di(), (nt.current = pr), ar)) { + for (var r = I.memoizedState; r !== null; ) { + var l = r.queue; + l !== null && (l.pending = null), (r = r.next); + } + ar = !1; + } + if ( + ((wt = 0), + (V = W = I = null), + (tt = !1), + (xi.current = null), + t === null || t.return === null) + ) { + (B = 1), (Tr = n), (j = null); + break; + } + e: { + var i = e, + o = t.return, + u = t, + s = n; + if ( + ((n = Q), + (u.flags |= 2048), + (u.firstEffect = u.lastEffect = null), + s !== null && typeof s == 'object' && typeof s.then == 'function') + ) { + var d = s; + if (!(u.mode & 2)) { + var y = u.alternate; + y + ? ((u.updateQueue = y.updateQueue), + (u.memoizedState = y.memoizedState), + (u.lanes = y.lanes)) + : ((u.updateQueue = null), (u.memoizedState = null)); + } + var C = (R.current & 1) !== 0, + h = o; + do { + var S; + if ((S = h.tag === 13)) { + var k = h.memoizedState; + if (k !== null) S = k.dehydrated !== null; + else { + var E = h.memoizedProps; + S = + E.fallback === void 0 + ? !1 + : E.unstable_avoidThisFallback !== !0 + ? !0 + : !C; + } + } + if (S) { + var c = h.updateQueue; + if (c === null) { + var a = new Set(); + a.add(d), (h.updateQueue = a); + } else c.add(d); + if (!(h.mode & 2)) { + if ( + ((h.flags |= 64), + (u.flags |= 16384), + (u.flags &= -2981), + u.tag === 1) + ) + if (u.alternate === null) u.tag = 17; + else { + var f = Le(-1, 1); + (f.tag = 2), ze(u, f); + } + u.lanes |= 1; + break e; + } + (s = void 0), (u = n); + var p = i.pingCache; + if ( + (p === null + ? ((p = i.pingCache = new lf()), + (s = new Set()), + p.set(d, s)) + : ((s = p.get(d)), + s === void 0 && ((s = new Set()), p.set(d, s))), + !s.has(u)) + ) { + s.add(u); + var m = gf.bind(null, i, d, u); + d.then(m, m); + } + (h.flags |= 4096), (h.lanes = n); + break e; + } + h = h.return; + } while (h !== null); + s = Error( + (dn(u.type) || 'A React component') + + ` suspended while rendering, but no fallback UI was specified. + +Add a component higher in the tree to provide a loading indicator or placeholder to display.`, + ); + } + B !== 5 && (B = 2), (s = ki(s, u)), (h = o); + do { + switch (h.tag) { + case 3: + (i = s), (h.flags |= 4096), (n &= -n), (h.lanes |= n); + var _ = os(h, i, n); + yo(h, _); + break e; + case 1: + i = s; + var w = h.type, + N = h.stateNode; + if ( + !(h.flags & 64) && + (typeof w.getDerivedStateFromError == 'function' || + (N !== null && + typeof N.componentDidCatch == 'function' && + (fe === null || !fe.has(N)))) + ) { + (h.flags |= 4096), (n &= -n), (h.lanes |= n); + var T = us(h, i, n); + yo(h, T); + break e; + } + } + h = h.return; + } while (h !== null); + } + hs(t); + } catch (P) { + (n = P), j === t && t !== null && (j = t = t.return); + continue; + } + break; + } while (1); + } + function ps() { + var e = mr.current; + return (mr.current = pr), e === null ? pr : e; + } + function Xn(e, n) { + var t = x; + x |= 16; + var r = ps(); + (Y === e && Q === n) || Sn(e, n); + do + try { + df(); + break; + } catch (l) { + ds(e, l); + } + while (1); + if ((di(), (x = t), (mr.current = r), j !== null)) throw Error(v(261)); + return (Y = null), (Q = 0), B; + } + function df() { + for (; j !== null; ) ms(j); + } + function pf() { + for (; j !== null && !Xa(); ) ms(j); + } + function ms(e) { + var n = ys(e.alternate, e, Ze); + (e.memoizedProps = e.pendingProps), + n === null ? hs(e) : (j = n), + (xi.current = null); + } + function hs(e) { + var n = e; + do { + var t = n.alternate; + if (((e = n.return), n.flags & 2048)) { + if (((t = rf(n)), t !== null)) { + (t.flags &= 2047), (j = t); + return; + } + e !== null && + ((e.firstEffect = e.lastEffect = null), (e.flags |= 2048)); + } else { + if (((t = tf(t, n, Ze)), t !== null)) { + j = t; + return; + } + if ( + ((t = n), + (t.tag !== 24 && t.tag !== 23) || + t.memoizedState === null || + Ze & 1073741824 || + !(t.mode & 4)) + ) { + for (var r = 0, l = t.child; l !== null; ) + (r |= l.lanes | l.childLanes), (l = l.sibling); + t.childLanes = r; + } + e !== null && + !(e.flags & 2048) && + (e.firstEffect === null && (e.firstEffect = n.firstEffect), + n.lastEffect !== null && + (e.lastEffect !== null && (e.lastEffect.nextEffect = n.firstEffect), + (e.lastEffect = n.lastEffect)), + 1 < n.flags && + (e.lastEffect !== null + ? (e.lastEffect.nextEffect = n) + : (e.firstEffect = n), + (e.lastEffect = n))); + } + if (((n = n.sibling), n !== null)) { + j = n; + return; + } + j = n = e; + } while (n !== null); + B === 0 && (B = 5); + } + function He(e) { + var n = Cn(); + return Ge(99, mf.bind(null, e, n)), null; + } + function mf(e, n) { + do Be(); + while (rt !== null); + if (x & 48) throw Error(v(327)); + var t = e.finishedWork; + if (t === null) return null; + if (((e.finishedWork = null), (e.finishedLanes = 0), t === e.current)) + throw Error(v(177)); + e.callbackNode = null; + var r = t.lanes | t.childLanes, + l = r, + i = e.pendingLanes & ~l; + (e.pendingLanes = l), + (e.suspendedLanes = 0), + (e.pingedLanes = 0), + (e.expiredLanes &= l), + (e.mutableReadLanes &= l), + (e.entangledLanes &= l), + (l = e.entanglements); + for (var o = e.eventTimes, u = e.expirationTimes; 0 < i; ) { + var s = 31 - Ie(i), + d = 1 << s; + (l[s] = 0), (o[s] = -1), (u[s] = -1), (i &= ~d); + } + if ( + (ge !== null && !(r & 24) && ge.has(e) && ge.delete(e), + e === Y && ((j = Y = null), (Q = 0)), + 1 < t.flags + ? t.lastEffect !== null + ? ((t.lastEffect.nextEffect = t), (r = t.firstEffect)) + : (r = t) + : (r = t.firstEffect), + r !== null) + ) { + if ( + ((l = x), (x |= 32), (xi.current = null), (Wr = Vt), (o = ro()), hl(o)) + ) { + if ('selectionStart' in o) + u = { start: o.selectionStart, end: o.selectionEnd }; + else + e: if ( + ((u = ((u = o.ownerDocument) && u.defaultView) || window), + (d = u.getSelection && u.getSelection()) && d.rangeCount !== 0) + ) { + (u = d.anchorNode), + (i = d.anchorOffset), + (s = d.focusNode), + (d = d.focusOffset); + try { + u.nodeType, s.nodeType; + } catch { + u = null; + break e; + } + var y = 0, + C = -1, + h = -1, + S = 0, + k = 0, + E = o, + c = null; + n: for (;;) { + for ( + var a; + E !== u || (i !== 0 && E.nodeType !== 3) || (C = y + i), + E !== s || (d !== 0 && E.nodeType !== 3) || (h = y + d), + E.nodeType === 3 && (y += E.nodeValue.length), + (a = E.firstChild) !== null; + + ) + (c = E), (E = a); + for (;;) { + if (E === o) break n; + if ( + (c === u && ++S === i && (C = y), + c === s && ++k === d && (h = y), + (a = E.nextSibling) !== null) + ) + break; + (E = c), (c = E.parentNode); + } + E = a; + } + u = C === -1 || h === -1 ? null : { start: C, end: h }; + } else u = null; + u = u || { start: 0, end: 0 }; + } else u = null; + (Ar = { focusedElem: o, selectionRange: u }), + (Vt = !1), + (it = null), + (Yt = !1), + (g = r); + do + try { + hf(); + } catch (P) { + if (g === null) throw Error(v(330)); + Re(g, P), (g = g.nextEffect); + } + while (g !== null); + (it = null), (g = r); + do + try { + for (o = e; g !== null; ) { + var f = g.flags; + if ((f & 16 && ut(g.stateNode, ''), f & 128)) { + var p = g.alternate; + if (p !== null) { + var m = p.ref; + m !== null && + (typeof m == 'function' ? m(null) : (m.current = null)); + } + } + switch (f & 1038) { + case 2: + Wo(g), (g.flags &= -3); + break; + case 6: + Wo(g), (g.flags &= -3), Zr(g.alternate, g); + break; + case 1024: + g.flags &= -1025; + break; + case 1028: + (g.flags &= -1025), Zr(g.alternate, g); + break; + case 4: + Zr(g.alternate, g); + break; + case 8: + (u = g), ss(o, u); + var _ = u.alternate; + Bo(u), _ !== null && Bo(_); + } + g = g.nextEffect; + } + } catch (P) { + if (g === null) throw Error(v(330)); + Re(g, P), (g = g.nextEffect); + } + while (g !== null); + if ( + ((m = Ar), + (p = ro()), + (f = m.focusedElem), + (o = m.selectionRange), + p !== f && + f && + f.ownerDocument && + Nu(f.ownerDocument.documentElement, f)) + ) { + for ( + o !== null && + hl(f) && + ((p = o.start), + (m = o.end), + m === void 0 && (m = p), + ('selectionStart' in f) + ? ((f.selectionStart = p), + (f.selectionEnd = Math.min(m, f.value.length))) + : ((m = + ((p = f.ownerDocument || document) && p.defaultView) || + window), + m.getSelection && + ((m = m.getSelection()), + (u = f.textContent.length), + (_ = Math.min(o.start, u)), + (o = o.end === void 0 ? _ : Math.min(o.end, u)), + !m.extend && _ > o && ((u = o), (o = _), (_ = u)), + (u = to(f, _)), + (i = to(f, o)), + u && + i && + (m.rangeCount !== 1 || + m.anchorNode !== u.node || + m.anchorOffset !== u.offset || + m.focusNode !== i.node || + m.focusOffset !== i.offset) && + ((p = p.createRange()), + p.setStart(u.node, u.offset), + m.removeAllRanges(), + _ > o + ? (m.addRange(p), m.extend(i.node, i.offset)) + : (p.setEnd(i.node, i.offset), m.addRange(p)))))), + p = [], + m = f; + (m = m.parentNode); + + ) + m.nodeType === 1 && + p.push({ element: m, left: m.scrollLeft, top: m.scrollTop }); + for ( + typeof f.focus == 'function' && f.focus(), f = 0; + f < p.length; + f++ + ) + (m = p[f]), + (m.element.scrollLeft = m.left), + (m.element.scrollTop = m.top); + } + (Vt = !!Wr), (Ar = Wr = null), (e.current = t), (g = r); + do + try { + for (f = e; g !== null; ) { + var w = g.flags; + if ((w & 36 && sf(f, g.alternate, g), w & 128)) { + p = void 0; + var N = g.ref; + if (N !== null) { + var T = g.stateNode; + switch (g.tag) { + case 5: + p = T; + break; + default: + p = T; + } + typeof N == 'function' ? N(p) : (N.current = p); + } + } + g = g.nextEffect; + } + } catch (P) { + if (g === null) throw Error(v(330)); + Re(g, P), (g = g.nextEffect); + } + while (g !== null); + (g = null), Ga(), (x = l); + } else e.current = t; + if (je) (je = !1), (rt = e), (Yn = n); + else + for (g = r; g !== null; ) + (n = g.nextEffect), + (g.nextEffect = null), + g.flags & 8 && ((w = g), (w.sibling = null), (w.stateNode = null)), + (g = n); + if ( + ((r = e.pendingLanes), + r === 0 && (fe = null), + r === 1 ? (e === Ul ? lt++ : ((lt = 0), (Ul = e))) : (lt = 0), + (t = t.stateNode), + Xe && typeof Xe.onCommitFiberRoot == 'function') + ) + try { + Xe.onCommitFiberRoot(fi, t, void 0, (t.current.flags & 64) === 64); + } catch {} + if ((le(e, A()), hr)) throw ((hr = !1), (e = Il), (Il = null), e); + return x & 8 || pe(), null; + } + function hf() { + for (; g !== null; ) { + var e = g.alternate; + Yt || + it === null || + (g.flags & 8 + ? Ai(g, it) && (Yt = !0) + : g.tag === 13 && af(e, g) && Ai(g, it) && (Yt = !0)); + var n = g.flags; + n & 256 && uf(e, g), + !(n & 512) || + je || + ((je = !0), + ht(97, function () { + return Be(), null; + })), + (g = g.nextEffect); + } + } + function Be() { + if (Yn !== 90) { + var e = 97 < Yn ? 97 : Yn; + return (Yn = 90), Ge(e, yf); + } + return !1; + } + function vf(e, n) { + Fl.push(n, e), + je || + ((je = !0), + ht(97, function () { + return Be(), null; + })); + } + function vs(e, n) { + jl.push(n, e), + je || + ((je = !0), + ht(97, function () { + return Be(), null; + })); + } + function yf() { + if (rt === null) return !1; + var e = rt; + if (((rt = null), x & 48)) throw Error(v(331)); + var n = x; + x |= 32; + var t = jl; + jl = []; + for (var r = 0; r < t.length; r += 2) { + var l = t[r], + i = t[r + 1], + o = l.destroy; + if (((l.destroy = void 0), typeof o == 'function')) + try { + o(); + } catch (s) { + if (i === null) throw Error(v(330)); + Re(i, s); + } + } + for (t = Fl, Fl = [], r = 0; r < t.length; r += 2) { + (l = t[r]), (i = t[r + 1]); + try { + var u = l.create; + l.destroy = u(); + } catch (s) { + if (i === null) throw Error(v(330)); + Re(i, s); + } + } + for (u = e.current.firstEffect; u !== null; ) + (e = u.nextEffect), + (u.nextEffect = null), + u.flags & 8 && ((u.sibling = null), (u.stateNode = null)), + (u = e); + return (x = n), pe(), !0; + } + function Qo(e, n, t) { + (n = ki(t, n)), + (n = os(e, n, 1)), + ze(e, n), + (n = q()), + (e = Lr(e, 1)), + e !== null && (Er(e, 1, n), le(e, n)); + } + function Re(e, n) { + if (e.tag === 3) Qo(e, e, n); + else + for (var t = e.return; t !== null; ) { + if (t.tag === 3) { + Qo(t, e, n); + break; + } else if (t.tag === 1) { + var r = t.stateNode; + if ( + typeof t.type.getDerivedStateFromError == 'function' || + (typeof r.componentDidCatch == 'function' && + (fe === null || !fe.has(r))) + ) { + e = ki(n, e); + var l = us(t, e, 1); + if ((ze(t, l), (l = q()), (t = Lr(t, 1)), t !== null)) + Er(t, 1, l), le(t, l); + else if ( + typeof r.componentDidCatch == 'function' && + (fe === null || !fe.has(r)) + ) + try { + r.componentDidCatch(n, e); + } catch {} + break; + } + } + t = t.return; + } + } + function gf(e, n, t) { + var r = e.pingCache; + r !== null && r.delete(n), + (n = q()), + (e.pingedLanes |= e.suspendedLanes & t), + Y === e && + (Q & t) === t && + (B === 4 || (B === 3 && (Q & 62914560) === Q && 500 > A() - _i) + ? Sn(e, 0) + : (Ci |= t)), + le(e, n); + } + function wf(e, n) { + var t = e.stateNode; + t !== null && t.delete(n), + (n = 0), + n === 0 && + ((n = e.mode), + n & 2 + ? n & 4 + ? (he === 0 && (he = Tn), + (n = ln(62914560 & ~he)), + n === 0 && (n = 4194304)) + : (n = Cn() === 99 ? 1 : 2) + : (n = 1)), + (t = q()), + (e = Lr(e, n)), + e !== null && (Er(e, n, t), le(e, t)); + } + var ys; + ys = function (e, n, t) { + var r = n.lanes; + if (e !== null) + if (e.memoizedProps !== n.pendingProps || Z.current) ue = !0; + else if (t & r) ue = !!(e.flags & 16384); + else { + switch (((ue = !1), n.tag)) { + case 3: + zo(n), Xr(); + break; + case 5: + Eo(n); + break; + case 1: + J(n.type) && Wt(n); + break; + case 4: + xl(n, n.stateNode.containerInfo); + break; + case 10: + r = n.memoizedProps.value; + var l = n.type._context; + D(rr, l._currentValue), (l._currentValue = r); + break; + case 13: + if (n.memoizedState !== null) + return t & n.child.childLanes + ? Oo(e, n, t) + : (D(R, R.current & 1), + (n = ye(e, n, t)), + n !== null ? n.sibling : null); + D(R, R.current & 1); + break; + case 19: + if (((r = (t & n.childLanes) !== 0), e.flags & 64)) { + if (r) return Fo(e, n, t); + n.flags |= 64; + } + if ( + ((l = n.memoizedState), + l !== null && + ((l.rendering = null), (l.tail = null), (l.lastEffect = null)), + D(R, R.current), + r) + ) + break; + return null; + case 23: + case 24: + return (n.lanes = 0), Kr(e, n, t); + } + return ye(e, n, t); + } + else ue = !1; + switch (((n.lanes = 0), n.tag)) { + case 2: + if ( + ((r = n.type), + e !== null && + ((e.alternate = null), (n.alternate = null), (n.flags |= 2)), + (e = n.pendingProps), + (l = xn(n, $.current)), + yn(n, t), + (l = gi(null, n, r, e, l, t)), + (n.flags |= 1), + typeof l == 'object' && + l !== null && + typeof l.render == 'function' && + l.$$typeof === void 0) + ) { + if ( + ((n.tag = 1), + (n.memoizedState = null), + (n.updateQueue = null), + J(r)) + ) { + var i = !0; + Wt(n); + } else i = !1; + (n.memoizedState = + l.state !== null && l.state !== void 0 ? l.state : null), + mi(n); + var o = r.getDerivedStateFromProps; + typeof o == 'function' && or(n, r, o, e), + (l.updater = Pr), + (n.stateNode = l), + (l._reactInternals = n), + kl(n, r, e, t), + (n = Pl(null, n, r, !0, i, t)); + } else (n.tag = 0), G(null, n, l, t), (n = n.child); + return n; + case 16: + l = n.elementType; + e: { + switch ( + (e !== null && + ((e.alternate = null), (n.alternate = null), (n.flags |= 2)), + (e = n.pendingProps), + (i = l._init), + (l = i(l._payload)), + (n.type = l), + (i = n.tag = Ef(l)), + (e = oe(l, e)), + i) + ) { + case 0: + n = Nl(null, n, l, e, t); + break e; + case 1: + n = Lo(null, n, l, e, t); + break e; + case 11: + n = Po(null, n, l, e, t); + break e; + case 14: + n = To(null, n, l, oe(l.type, e), r, t); + break e; + } + throw Error(v(306, l, '')); + } + return n; + case 0: + return ( + (r = n.type), + (l = n.pendingProps), + (l = n.elementType === r ? l : oe(r, l)), + Nl(e, n, r, l, t) + ); + case 1: + return ( + (r = n.type), + (l = n.pendingProps), + (l = n.elementType === r ? l : oe(r, l)), + Lo(e, n, r, l, t) + ); + case 3: + if ((zo(n), (r = n.updateQueue), e === null || r === null)) + throw Error(v(282)); + if ( + ((r = n.pendingProps), + (l = n.memoizedState), + (l = l !== null ? l.element : null), + Wu(e, n), + vt(n, r, null, t), + (r = n.memoizedState.element), + r === l) + ) + Xr(), (n = ye(e, n, t)); + else { + if ( + ((l = n.stateNode), + (i = l.hydrate) && + ((_e = vn(n.stateNode.containerInfo.firstChild)), + (ve = n), + (i = de = !0)), + i) + ) { + if (((e = l.mutableSourceEagerHydrationData), e != null)) + for (l = 0; l < e.length; l += 2) + (i = e[l]), + (i._workInProgressVersionPrimary = e[l + 1]), + gn.push(i); + for (t = Yu(n, null, r, t), n.child = t; t; ) + (t.flags = (t.flags & -3) | 1024), (t = t.sibling); + } else G(e, n, r, t), Xr(); + n = n.child; + } + return n; + case 5: + return ( + Eo(n), + e === null && Cl(n), + (r = n.type), + (l = n.pendingProps), + (i = e !== null ? e.memoizedProps : null), + (o = l.children), + gl(r, l) ? (o = null) : i !== null && gl(r, i) && (n.flags |= 16), + ts(e, n), + G(e, n, o, t), + n.child + ); + case 6: + return e === null && Cl(n), null; + case 13: + return Oo(e, n, t); + case 4: + return ( + xl(n, n.stateNode.containerInfo), + (r = n.pendingProps), + e === null ? (n.child = ur(n, null, r, t)) : G(e, n, r, t), + n.child + ); + case 11: + return ( + (r = n.type), + (l = n.pendingProps), + (l = n.elementType === r ? l : oe(r, l)), + Po(e, n, r, l, t) + ); + case 7: + return G(e, n, n.pendingProps, t), n.child; + case 8: + return G(e, n, n.pendingProps.children, t), n.child; + case 12: + return G(e, n, n.pendingProps.children, t), n.child; + case 10: + e: { + (r = n.type._context), + (l = n.pendingProps), + (o = n.memoizedProps), + (i = l.value); + var u = n.type._context; + if ((D(rr, u._currentValue), (u._currentValue = i), o !== null)) + if ( + ((u = o.value), + (i = ee(u, i) + ? 0 + : (typeof r._calculateChangedBits == 'function' + ? r._calculateChangedBits(u, i) + : 1073741823) | 0), + i === 0) + ) { + if (o.children === l.children && !Z.current) { + n = ye(e, n, t); + break e; + } + } else + for (u = n.child, u !== null && (u.return = n); u !== null; ) { + var s = u.dependencies; + if (s !== null) { + o = u.child; + for (var d = s.firstContext; d !== null; ) { + if (d.context === r && d.observedBits & i) { + u.tag === 1 && + ((d = Le(-1, t & -t)), (d.tag = 2), ze(u, d)), + (u.lanes |= t), + (d = u.alternate), + d !== null && (d.lanes |= t), + Hu(u.return, t), + (s.lanes |= t); + break; + } + d = d.next; + } + } else o = u.tag === 10 && u.type === n.type ? null : u.child; + if (o !== null) o.return = u; + else + for (o = u; o !== null; ) { + if (o === n) { + o = null; + break; + } + if (((u = o.sibling), u !== null)) { + (u.return = o.return), (o = u); + break; + } + o = o.return; + } + u = o; + } + G(e, n, l.children, t), (n = n.child); + } + return n; + case 9: + return ( + (l = n.type), + (i = n.pendingProps), + (r = i.children), + yn(n, t), + (l = re(l, i.unstable_observedBits)), + (r = r(l)), + (n.flags |= 1), + G(e, n, r, t), + n.child + ); + case 14: + return ( + (l = n.type), + (i = oe(l, n.pendingProps)), + (i = oe(l.type, i)), + To(e, n, l, i, r, t) + ); + case 15: + return ns(e, n, n.type, n.pendingProps, r, t); + case 17: + return ( + (r = n.type), + (l = n.pendingProps), + (l = n.elementType === r ? l : oe(r, l)), + e !== null && + ((e.alternate = null), (n.alternate = null), (n.flags |= 2)), + (n.tag = 1), + J(r) ? ((e = !0), Wt(n)) : (e = !1), + yn(n, t), + Qu(n, r, l), + kl(n, r, l, t), + Pl(null, n, r, !0, e, t) + ); + case 19: + return Fo(e, n, t); + case 23: + return Kr(e, n, t); + case 24: + return Kr(e, n, t); + } + throw Error(v(156, n.tag)); + }; + function Sf(e, n, t, r) { + (this.tag = e), + (this.key = t), + (this.sibling = + this.child = + this.return = + this.stateNode = + this.type = + this.elementType = + null), + (this.index = 0), + (this.ref = null), + (this.pendingProps = n), + (this.dependencies = + this.memoizedState = + this.updateQueue = + this.memoizedProps = + null), + (this.mode = r), + (this.flags = 0), + (this.lastEffect = this.firstEffect = this.nextEffect = null), + (this.childLanes = this.lanes = 0), + (this.alternate = null); + } + function ne(e, n, t, r) { + return new Sf(e, n, t, r); + } + function Pi(e) { + return (e = e.prototype), !(!e || !e.isReactComponent); + } + function Ef(e) { + if (typeof e == 'function') return Pi(e) ? 1 : 0; + if (e != null) { + if (((e = e.$$typeof), e === gr)) return 11; + if (e === wr) return 14; + } + return 2; + } + function Ue(e, n) { + var t = e.alternate; + return ( + t === null + ? ((t = ne(e.tag, n, e.key, e.mode)), + (t.elementType = e.elementType), + (t.type = e.type), + (t.stateNode = e.stateNode), + (t.alternate = e), + (e.alternate = t)) + : ((t.pendingProps = n), + (t.type = e.type), + (t.flags = 0), + (t.nextEffect = null), + (t.firstEffect = null), + (t.lastEffect = null)), + (t.childLanes = e.childLanes), + (t.lanes = e.lanes), + (t.child = e.child), + (t.memoizedProps = e.memoizedProps), + (t.memoizedState = e.memoizedState), + (t.updateQueue = e.updateQueue), + (n = e.dependencies), + (t.dependencies = + n === null ? null : { lanes: n.lanes, firstContext: n.firstContext }), + (t.sibling = e.sibling), + (t.index = e.index), + (t.ref = e.ref), + t + ); + } + function Xt(e, n, t, r, l, i) { + var o = 2; + if (((r = e), typeof e == 'function')) Pi(e) && (o = 1); + else if (typeof e == 'string') o = 5; + else + e: switch (e) { + case ke: + return En(t.children, l, i, n); + case Xo: + (o = 8), (l |= 16); + break; + case Al: + (o = 8), (l |= 1); + break; + case Kn: + return ( + (e = ne(12, t, n, l | 8)), + (e.elementType = Kn), + (e.type = Kn), + (e.lanes = i), + e + ); + case Gn: + return ( + (e = ne(13, t, n, l)), + (e.type = Gn), + (e.elementType = Gn), + (e.lanes = i), + e + ); + case Kt: + return (e = ne(19, t, n, l)), (e.elementType = Kt), (e.lanes = i), e; + case Gl: + return Ti(t, l, i, n); + case el: + return (e = ne(24, t, n, l)), (e.elementType = el), (e.lanes = i), e; + default: + if (typeof e == 'object' && e !== null) + switch (e.$$typeof) { + case Ql: + o = 10; + break e; + case $l: + o = 9; + break e; + case gr: + o = 11; + break e; + case wr: + o = 14; + break e; + case Yl: + (o = 16), (r = null); + break e; + case Xl: + o = 22; + break e; + } + throw Error(v(130, e == null ? e : typeof e, '')); + } + return ( + (n = ne(o, t, n, l)), (n.elementType = e), (n.type = r), (n.lanes = i), n + ); + } + function En(e, n, t, r) { + return (e = ne(7, e, r, n)), (e.lanes = t), e; + } + function Ti(e, n, t, r) { + return (e = ne(23, e, r, n)), (e.elementType = Gl), (e.lanes = t), e; + } + function Jr(e, n, t) { + return (e = ne(6, e, null, n)), (e.lanes = t), e; + } + function qr(e, n, t) { + return ( + (n = ne(4, e.children !== null ? e.children : [], e.key, n)), + (n.lanes = t), + (n.stateNode = { + containerInfo: e.containerInfo, + pendingChildren: null, + implementation: e.implementation, + }), + n + ); + } + function kf(e, n, t) { + (this.tag = n), + (this.containerInfo = e), + (this.finishedWork = + this.pingCache = + this.current = + this.pendingChildren = + null), + (this.timeoutHandle = -1), + (this.pendingContext = this.context = null), + (this.hydrate = t), + (this.callbackNode = null), + (this.callbackPriority = 0), + (this.eventTimes = Fr(0)), + (this.expirationTimes = Fr(-1)), + (this.entangledLanes = + this.finishedLanes = + this.mutableReadLanes = + this.expiredLanes = + this.pingedLanes = + this.suspendedLanes = + this.pendingLanes = + 0), + (this.entanglements = Fr(0)), + (this.mutableSourceEagerHydrationData = null); + } + function xf(e, n, t) { + var r = + 3 < arguments.length && arguments[3] !== void 0 ? arguments[3] : null; + return { + $$typeof: We, + key: r == null ? null : '' + r, + children: e, + containerInfo: n, + implementation: t, + }; + } + function vr(e, n, t, r) { + var l = n.current, + i = q(), + o = Oe(l); + e: if (t) { + t = t._reactInternals; + n: { + if (be(t) !== t || t.tag !== 1) throw Error(v(170)); + var u = t; + do { + switch (u.tag) { + case 3: + u = u.stateNode.context; + break n; + case 1: + if (J(u.type)) { + u = u.stateNode.__reactInternalMemoizedMergedChildContext; + break n; + } + } + u = u.return; + } while (u !== null); + throw Error(v(171)); + } + if (t.tag === 1) { + var s = t.type; + if (J(s)) { + t = Du(t, s, u); + break e; + } + } + t = u; + } else t = Fe; + return ( + n.context === null ? (n.context = t) : (n.pendingContext = t), + (n = Le(i, o)), + (n.payload = { element: e }), + (r = r === void 0 ? null : r), + r !== null && (n.callback = r), + ze(l, n), + Me(l, o, i), + o + ); + } + function br(e) { + if (((e = e.current), !e.child)) return null; + switch (e.child.tag) { + case 5: + return e.child.stateNode; + default: + return e.child.stateNode; + } + } + function $o(e, n) { + if (((e = e.memoizedState), e !== null && e.dehydrated !== null)) { + var t = e.retryLane; + e.retryLane = t !== 0 && t < n ? t : n; + } + } + function Li(e, n) { + $o(e, n), (e = e.alternate) && $o(e, n); + } + function Cf() { + return null; + } + function zi(e, n, t) { + var r = + (t != null && + t.hydrationOptions != null && + t.hydrationOptions.mutableSources) || + null; + if ( + ((t = new kf(e, n, t != null && t.hydrate === !0)), + (n = ne(3, null, null, n === 2 ? 7 : n === 1 ? 3 : 0)), + (t.current = n), + (n.stateNode = t), + mi(n), + (e[Pn] = t.current), + Lu(e.nodeType === 8 ? e.parentNode : e), + r) + ) + for (e = 0; e < r.length; e++) { + n = r[e]; + var l = n._getVersion; + (l = l(n._source)), + t.mutableSourceEagerHydrationData == null + ? (t.mutableSourceEagerHydrationData = [n, l]) + : t.mutableSourceEagerHydrationData.push(n, l); + } + this._internalRoot = t; + } + zi.prototype.render = function (e) { + vr(e, this._internalRoot, null, null); + }; + zi.prototype.unmount = function () { + var e = this._internalRoot, + n = e.containerInfo; + vr(null, e, null, function () { + n[Pn] = null; + }); + }; + function Ct(e) { + return !( + !e || + (e.nodeType !== 1 && + e.nodeType !== 9 && + e.nodeType !== 11 && + (e.nodeType !== 8 || e.nodeValue !== ' react-mount-point-unstable ')) + ); + } + function _f(e, n) { + if ( + (n || + ((n = e ? (e.nodeType === 9 ? e.documentElement : e.firstChild) : null), + (n = !(!n || n.nodeType !== 1 || !n.hasAttribute('data-reactroot')))), + !n) + ) + for (var t; (t = e.lastChild); ) e.removeChild(t); + return new zi(e, 0, n ? { hydrate: !0 } : void 0); + } + function zr(e, n, t, r, l) { + var i = t._reactRootContainer; + if (i) { + var o = i._internalRoot; + if (typeof l == 'function') { + var u = l; + l = function () { + var d = br(o); + u.call(d); + }; + } + vr(n, o, e, l); + } else { + if ( + ((i = t._reactRootContainer = _f(t, r)), + (o = i._internalRoot), + typeof l == 'function') + ) { + var s = l; + l = function () { + var d = br(o); + s.call(d); + }; + } + cs(function () { + vr(n, o, e, l); + }); + } + return br(o); + } + su = function (e) { + if (e.tag === 13) { + var n = q(); + Me(e, 4, n), Li(e, 4); + } + }; + ei = function (e) { + if (e.tag === 13) { + var n = q(); + Me(e, 67108864, n), Li(e, 67108864); + } + }; + au = function (e) { + if (e.tag === 13) { + var n = q(), + t = Oe(e); + Me(e, t, n), Li(e, t); + } + }; + fu = function (e, n) { + return n(); + }; + fl = function (e, n, t) { + switch (n) { + case 'input': + if ((tl(e, t), (n = t.name), t.type === 'radio' && n != null)) { + for (t = e; t.parentNode; ) t = t.parentNode; + for ( + t = t.querySelectorAll( + 'input[name=' + JSON.stringify('' + n) + '][type="radio"]', + ), + n = 0; + n < t.length; + n++ + ) { + var r = t[n]; + if (r !== e && r.form === e.form) { + var l = _r(r); + if (!l) throw Error(v(90)); + Go(r), tl(r, l); + } + } + } + break; + case 'textarea': + Jo(e, t); + break; + case 'select': + (n = t.value), n != null && pn(e, !!t.multiple, n, !1); + } + }; + Jl = fs; + lu = function (e, n, t, r, l) { + var i = x; + x |= 4; + try { + return Ge(98, e.bind(null, n, t, r, l)); + } finally { + (x = i), x === 0 && (zn(), pe()); + } + }; + ql = function () { + !(x & 49) && (cf(), Be()); + }; + iu = function (e, n) { + var t = x; + x |= 2; + try { + return e(n); + } finally { + (x = t), x === 0 && (zn(), pe()); + } + }; + function gs(e, n) { + var t = + 2 < arguments.length && arguments[2] !== void 0 ? arguments[2] : null; + if (!Ct(n)) throw Error(v(200)); + return xf(e, n, null, t); + } + var Nf = { Events: [Et, an, _r, tu, ru, Be, { current: !1 }] }, + Hn = { + findFiberByHostInstance: Qe, + bundleType: 0, + version: '17.0.2', + rendererPackageName: 'react-dom', + }, + Pf = { + bundleType: Hn.bundleType, + version: Hn.version, + rendererPackageName: Hn.rendererPackageName, + rendererConfig: Hn.rendererConfig, + overrideHookState: null, + overrideHookStateDeletePath: null, + overrideHookStateRenamePath: null, + overrideProps: null, + overridePropsDeletePath: null, + overridePropsRenamePath: null, + setSuspenseHandler: null, + scheduleUpdate: null, + currentDispatcherRef: qe.ReactCurrentDispatcher, + findHostInstanceByFiber: function (e) { + return (e = uu(e)), e === null ? null : e.stateNode; + }, + findFiberByHostInstance: Hn.findFiberByHostInstance || Cf, + findHostInstancesForRefresh: null, + scheduleRefresh: null, + scheduleRoot: null, + setRefreshHandler: null, + getCurrentFiber: null, + }; + if ( + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < 'u' && + ((Wn = __REACT_DEVTOOLS_GLOBAL_HOOK__), !Wn.isDisabled && Wn.supportsFiber) + ) + try { + (fi = Wn.inject(Pf)), (Xe = Wn); + } catch {} + var Wn; + ie.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Nf; + ie.createPortal = gs; + ie.findDOMNode = function (e) { + if (e == null) return null; + if (e.nodeType === 1) return e; + var n = e._reactInternals; + if (n === void 0) + throw typeof e.render == 'function' + ? Error(v(188)) + : Error(v(268, Object.keys(e))); + return (e = uu(n)), (e = e === null ? null : e.stateNode), e; + }; + ie.flushSync = function (e, n) { + var t = x; + if (t & 48) return e(n); + x |= 1; + try { + if (e) return Ge(99, e.bind(null, n)); + } finally { + (x = t), pe(); + } + }; + ie.hydrate = function (e, n, t) { + if (!Ct(n)) throw Error(v(200)); + return zr(null, e, n, !0, t); + }; + ie.render = function (e, n, t) { + if (!Ct(n)) throw Error(v(200)); + return zr(null, e, n, !1, t); + }; + ie.unmountComponentAtNode = function (e) { + if (!Ct(e)) throw Error(v(40)); + return e._reactRootContainer + ? (cs(function () { + zr(null, null, e, !1, function () { + (e._reactRootContainer = null), (e[Pn] = null); + }); + }), + !0) + : !1; + }; + ie.unstable_batchedUpdates = fs; + ie.unstable_createPortal = function (e, n) { + return gs( + e, + n, + 2 < arguments.length && arguments[2] !== void 0 ? arguments[2] : null, + ); + }; + ie.unstable_renderSubtreeIntoContainer = function (e, n, t, r) { + if (!Ct(t)) throw Error(v(200)); + if (e == null || e._reactInternals === void 0) throw Error(v(38)); + return zr(e, n, t, !1, r); + }; + ie.version = '17.0.2'; +}); +var ks = Mi((Of, Es) => { + 'use strict'; + function Ss() { + if ( + !( + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ > 'u' || + typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE != 'function' + ) + ) + try { + __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Ss); + } catch (e) { + console.error(e); + } + } + Ss(), (Es.exports = ws()); +}); +var Cs = Ms(ks()), + { + __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: Mf, + createPortal: Rf, + findDOMNode: Df, + flushSync: If, + hydrate: Ff, + render: jf, + unmountComponentAtNode: Uf, + unstable_batchedUpdates: Vf, + unstable_createPortal: Bf, + unstable_renderSubtreeIntoContainer: Hf, + version: Wf, + } = Cs, + { default: xs, ...Tf } = Cs, + Af = xs !== void 0 ? xs : Tf; +export { + Mf as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, + Rf as createPortal, + Af as default, + Df as findDOMNode, + If as flushSync, + Ff as hydrate, + jf as render, + Uf as unmountComponentAtNode, + Vf as unstable_batchedUpdates, + Bf as unstable_createPortal, + Hf as unstable_renderSubtreeIntoContainer, + Wf as version, +}; +/*! Bundled license information: + +react-dom/cjs/react-dom.production.min.js: + (** @license React v17.0.2 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/__fixtures__/remote-view-fake-cdn/v106/scheduler@0.20.2/es2022/scheduler.js b/__fixtures__/remote-view-fake-cdn/v106/scheduler@0.20.2/es2022/scheduler.js new file mode 100644 index 000000000..92a389e68 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/v106/scheduler@0.20.2/es2022/scheduler.js @@ -0,0 +1,387 @@ +/* esm.sh - esbuild bundle(scheduler@0.20.2) es2022 production */ +var z = Object.create; +var O = Object.defineProperty; +var B = Object.getOwnPropertyDescriptor; +var G = Object.getOwnPropertyNames; +var ee = Object.getPrototypeOf, + ne = Object.prototype.hasOwnProperty; +var V = (e, n) => () => (n || e((n = { exports: {} }).exports, n), n.exports); +var te = (e, n, t, l) => { + if ((n && typeof n == 'object') || typeof n == 'function') + for (let o of G(n)) + !ne.call(e, o) && + o !== t && + O(e, o, { + get: () => n[o], + enumerable: !(l = B(n, o)) || l.enumerable, + }); + return e; +}; +var re = (e, n, t) => ( + (t = e != null ? z(ee(e)) : {}), + te( + n || !e || !e.__esModule + ? O(t, 'default', { value: e, enumerable: !0 }) + : t, + e, + ) +); +var X = V((r) => { + 'use strict'; + var y, h, T, q; + typeof performance == 'object' && typeof performance.now == 'function' + ? ((H = performance), + (r.unstable_now = function () { + return H.now(); + })) + : ((C = Date), + (J = C.now()), + (r.unstable_now = function () { + return C.now() - J; + })); + var H, C, J; + typeof window > 'u' || typeof MessageChannel != 'function' + ? ((p = null), + (L = null), + (N = function () { + if (p !== null) + try { + var e = r.unstable_now(); + p(!0, e), (p = null); + } catch (n) { + throw (setTimeout(N, 0), n); + } + }), + (y = function (e) { + p !== null ? setTimeout(y, 0, e) : ((p = e), setTimeout(N, 0)); + }), + (h = function (e, n) { + L = setTimeout(e, n); + }), + (T = function () { + clearTimeout(L); + }), + (r.unstable_shouldYield = function () { + return !1; + }), + (q = r.unstable_forceFrameRate = function () {})) + : ((K = window.setTimeout), + (Q = window.clearTimeout), + typeof console < 'u' && + ((S = window.cancelAnimationFrame), + typeof window.requestAnimationFrame != 'function' && + console.error( + "This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills", + ), + typeof S != 'function' && + console.error( + "This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills", + )), + (m = !1), + (w = null), + (g = -1), + (j = 5), + (E = 0), + (r.unstable_shouldYield = function () { + return r.unstable_now() >= E; + }), + (q = function () {}), + (r.unstable_forceFrameRate = function (e) { + 0 > e || 125 < e + ? console.error( + 'forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported', + ) + : (j = 0 < e ? Math.floor(1e3 / e) : 5); + }), + (F = new MessageChannel()), + (P = F.port2), + (F.port1.onmessage = function () { + if (w !== null) { + var e = r.unstable_now(); + E = e + j; + try { + w(!0, e) ? P.postMessage(null) : ((m = !1), (w = null)); + } catch (n) { + throw (P.postMessage(null), n); + } + } else m = !1; + }), + (y = function (e) { + (w = e), m || ((m = !0), P.postMessage(null)); + }), + (h = function (e, n) { + g = K(function () { + e(r.unstable_now()); + }, n); + }), + (T = function () { + Q(g), (g = -1); + })); + var p, L, N, K, Q, S, m, w, g, j, E, F, P; + function R(e, n) { + var t = e.length; + e.push(n); + e: for (;;) { + var l = (t - 1) >>> 1, + o = e[l]; + if (o !== void 0 && 0 < x(o, n)) (e[l] = n), (e[t] = o), (t = l); + else break e; + } + } + function a(e) { + return (e = e[0]), e === void 0 ? null : e; + } + function I(e) { + var n = e[0]; + if (n !== void 0) { + var t = e.pop(); + if (t !== n) { + e[0] = t; + e: for (var l = 0, o = e.length; l < o; ) { + var f = 2 * (l + 1) - 1, + b = e[f], + v = f + 1, + d = e[v]; + if (b !== void 0 && 0 > x(b, t)) + d !== void 0 && 0 > x(d, b) + ? ((e[l] = d), (e[v] = t), (l = v)) + : ((e[l] = b), (e[f] = t), (l = f)); + else if (d !== void 0 && 0 > x(d, t)) (e[l] = d), (e[v] = t), (l = v); + else break e; + } + } + return n; + } + return null; + } + function x(e, n) { + var t = e.sortIndex - n.sortIndex; + return t !== 0 ? t : e.id - n.id; + } + var s = [], + c = [], + le = 1, + u = null, + i = 3, + M = !1, + _ = !1, + k = !1; + function Y(e) { + for (var n = a(c); n !== null; ) { + if (n.callback === null) I(c); + else if (n.startTime <= e) + I(c), (n.sortIndex = n.expirationTime), R(s, n); + else break; + n = a(c); + } + } + function U(e) { + if (((k = !1), Y(e), !_)) + if (a(s) !== null) (_ = !0), y(W); + else { + var n = a(c); + n !== null && h(U, n.startTime - e); + } + } + function W(e, n) { + (_ = !1), k && ((k = !1), T()), (M = !0); + var t = i; + try { + for ( + Y(n), u = a(s); + u !== null && + (!(u.expirationTime > n) || (e && !r.unstable_shouldYield())); + + ) { + var l = u.callback; + if (typeof l == 'function') { + (u.callback = null), (i = u.priorityLevel); + var o = l(u.expirationTime <= n); + (n = r.unstable_now()), + typeof o == 'function' ? (u.callback = o) : u === a(s) && I(s), + Y(n); + } else I(s); + u = a(s); + } + if (u !== null) var f = !0; + else { + var b = a(c); + b !== null && h(U, b.startTime - n), (f = !1); + } + return f; + } finally { + (u = null), (i = t), (M = !1); + } + } + var oe = q; + r.unstable_IdlePriority = 5; + r.unstable_ImmediatePriority = 1; + r.unstable_LowPriority = 4; + r.unstable_NormalPriority = 3; + r.unstable_Profiling = null; + r.unstable_UserBlockingPriority = 2; + r.unstable_cancelCallback = function (e) { + e.callback = null; + }; + r.unstable_continueExecution = function () { + _ || M || ((_ = !0), y(W)); + }; + r.unstable_getCurrentPriorityLevel = function () { + return i; + }; + r.unstable_getFirstCallbackNode = function () { + return a(s); + }; + r.unstable_next = function (e) { + switch (i) { + case 1: + case 2: + case 3: + var n = 3; + break; + default: + n = i; + } + var t = i; + i = n; + try { + return e(); + } finally { + i = t; + } + }; + r.unstable_pauseExecution = function () {}; + r.unstable_requestPaint = oe; + r.unstable_runWithPriority = function (e, n) { + switch (e) { + case 1: + case 2: + case 3: + case 4: + case 5: + break; + default: + e = 3; + } + var t = i; + i = e; + try { + return n(); + } finally { + i = t; + } + }; + r.unstable_scheduleCallback = function (e, n, t) { + var l = r.unstable_now(); + switch ( + (typeof t == 'object' && t !== null + ? ((t = t.delay), (t = typeof t == 'number' && 0 < t ? l + t : l)) + : (t = l), + e) + ) { + case 1: + var o = -1; + break; + case 2: + o = 250; + break; + case 5: + o = 1073741823; + break; + case 4: + o = 1e4; + break; + default: + o = 5e3; + } + return ( + (o = t + o), + (e = { + id: le++, + callback: n, + priorityLevel: e, + startTime: t, + expirationTime: o, + sortIndex: -1, + }), + t > l + ? ((e.sortIndex = t), + R(c, e), + a(s) === null && e === a(c) && (k ? T() : (k = !0), h(U, t - l))) + : ((e.sortIndex = o), R(s, e), _ || M || ((_ = !0), y(W))), + e + ); + }; + r.unstable_wrapCallback = function (e) { + var n = i; + return function () { + var t = i; + i = n; + try { + return e.apply(this, arguments); + } finally { + i = t; + } + }; + }; +}); +var $ = V((se, Z) => { + 'use strict'; + Z.exports = X(); +}); +var D = re($()), + { + unstable_now: ce, + unstable_shouldYield: fe, + unstable_IdlePriority: be, + unstable_ImmediatePriority: _e, + unstable_LowPriority: de, + unstable_NormalPriority: pe, + unstable_Profiling: ye, + unstable_UserBlockingPriority: ve, + unstable_cancelCallback: me, + unstable_continueExecution: we, + unstable_getCurrentPriorityLevel: he, + unstable_getFirstCallbackNode: ke, + unstable_next: ge, + unstable_pauseExecution: Pe, + unstable_requestPaint: xe, + unstable_runWithPriority: Te, + unstable_scheduleCallback: Ie, + unstable_wrapCallback: Me, + } = D, + { default: A, ...ie } = D, + Ce = A !== void 0 ? A : ie; +export { + Ce as default, + be as unstable_IdlePriority, + _e as unstable_ImmediatePriority, + de as unstable_LowPriority, + pe as unstable_NormalPriority, + ye as unstable_Profiling, + ve as unstable_UserBlockingPriority, + me as unstable_cancelCallback, + we as unstable_continueExecution, + he as unstable_getCurrentPriorityLevel, + ke as unstable_getFirstCallbackNode, + ge as unstable_next, + ce as unstable_now, + Pe as unstable_pauseExecution, + xe as unstable_requestPaint, + Te as unstable_runWithPriority, + Ie as unstable_scheduleCallback, + fe as unstable_shouldYield, + Me as unstable_wrapCallback, +}; +/*! Bundled license information: + +scheduler/cjs/scheduler.production.min.js: + (** @license React v0.20.2 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/__fixtures__/remote-view-fake-cdn/view1/asset-manifest.json b/__fixtures__/remote-view-fake-cdn/view1/asset-manifest.json new file mode 100644 index 000000000..fc4ddfb0f --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view1/asset-manifest.json @@ -0,0 +1,9 @@ +{ + "files": { + "main.css": "/static/css/main.1115b39e.css", + "main.js": "/static/js/main.8285d3ce.js", + "main.1115b39e.css.map": "/static/css/main.1115b39e.css.map", + "main.8285d3ce.js.map": "/static/js/main.8285d3ce.js.map" + }, + "entrypoints": ["static/css/main.1115b39e.css", "static/js/main.8285d3ce.js"] +} diff --git a/__fixtures__/remote-view-fake-cdn/view1/index.html b/__fixtures__/remote-view-fake-cdn/view1/index.html new file mode 100644 index 000000000..e01c97707 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view1/index.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/__fixtures__/remote-view-fake-cdn/view1/package.json b/__fixtures__/remote-view-fake-cdn/view1/package.json new file mode 100644 index 000000000..91937b37c --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view1/package.json @@ -0,0 +1,17 @@ +{ + "name": "view1", + "version": "1.0.0", + "license": "UNLICENSED", + "modular": { + "type": "esm-view", + "externalCdnTemplate": "https://esm.sh/[name]@[version]" + }, + "dependencies": { + "react": "18.2.0", + "@mantine/core": "5.10.4", + "minifaker": "1.34.1" + }, + "bundledDependencies": [], + "module": "/static/js/main.8285d3ce.js", + "style": "/static/css/main.1115b39e.css" +} diff --git a/__fixtures__/remote-view-fake-cdn/view1/static/css/main.1115b39e.css b/__fixtures__/remote-view-fake-cdn/view1/static/css/main.1115b39e.css new file mode 100644 index 000000000..310afc5df --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view1/static/css/main.1115b39e.css @@ -0,0 +1,2 @@ +.card-component{margin:auto;width:480px}.card-component .card{background-color:#f9f9f9}.card-component .group{margin-bottom:5px}.card-component .button{margin-top:14px} +/*# sourceMappingURL=main.1115b39e.css.map*/ \ No newline at end of file diff --git a/__fixtures__/remote-view-fake-cdn/view1/static/css/main.1115b39e.css.map b/__fixtures__/remote-view-fake-cdn/view1/static/css/main.1115b39e.css.map new file mode 100644 index 000000000..8263e5e55 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view1/static/css/main.1115b39e.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/main.1115b39e.css","mappings":"AAAA,gBAEE,WAAY,CADZ,WAEF,CAEA,sBACE,wBACF,CAEA,uBACE,iBACF,CAEA,wBACE,eACF","sources":["index.css"],"sourcesContent":[".card-component {\n width: 480px;\n margin: auto;\n}\n\n.card-component .card {\n background-color: #f9f9f9;\n}\n\n.card-component .group {\n margin-bottom: 5px;\n}\n\n.card-component .button {\n margin-top: 14px;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/__fixtures__/remote-view-fake-cdn/view1/static/js/_trampoline.js b/__fixtures__/remote-view-fake-cdn/view1/static/js/_trampoline.js new file mode 100644 index 000000000..b4061f9e1 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view1/static/js/_trampoline.js @@ -0,0 +1,6 @@ +import { createRoot } from 'https://esm.sh/react-dom@18.2.0/client'; +import React from 'https://esm.sh/react@18.2.0'; +import Component from './main.8285d3ce.js'; +var container = document.getElementById('root'); +var root = createRoot(container); +root.render(React.createElement(Component, null)); diff --git a/__fixtures__/remote-view-fake-cdn/view1/static/js/main.8285d3ce.js b/__fixtures__/remote-view-fake-cdn/view1/static/js/main.8285d3ce.js new file mode 100644 index 000000000..5cbba7b99 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view1/static/js/main.8285d3ce.js @@ -0,0 +1,145 @@ +import * as e from 'https://esm.sh/react@18.2.0'; +import * as t from 'https://esm.sh/@mantine/core@5.10.4'; +import * as a from 'https://esm.sh/minifaker@1.34.1'; +import * as r from 'https://esm.sh/minifaker@1.34.1/locales/en'; +var n = { + d: (e, t) => { + for (var a in t) + n.o(t, a) && + !n.o(e, a) && + Object.defineProperty(e, a, { enumerable: !0, get: t[a] }); + }, + o: (e, t) => Object.prototype.hasOwnProperty.call(e, t), + }, + m = {}; +n.d(m, { Z: () => c }); +const o = ((e) => { + var t = {}; + return n.d(t, e), t; +})({ + createElement: () => e.createElement, + default: () => e.default, + useState: () => e.useState, +}); +const l = ((e) => { + var t = {}; + return n.d(t, e), t; +})({ + Avatar: () => t.Avatar, + Badge: () => t.Badge, + Button: () => t.Button, + Card: () => t.Card, + Group: () => t.Group, + MantineProvider: () => t.MantineProvider, + Text: () => t.Text, + useMantineTheme: () => t.useMantineTheme, +}); +const s = ((e) => { + var t = {}; + return n.d(t, e), t; +})({ + cityName: () => a.cityName, + default: () => a.default, + domainName: () => a.domainName, + jobTitle: () => a.jobTitle, + month: () => a.month, + name: () => a.name, + number: () => a.number, + streetAddress: () => a.streetAddress, +}); +const d = ((e) => { + var t = {}; + return n.d(t, e), t; +})({ default: () => r.default }); +function i() { + const e = (0, l.useMantineTheme)(), + t = (0, o.useState)({})[1], + a = 'dark' === e.colorScheme ? e.colors.dark[1] : e.colors.gray[7], + r = Math.random() > 0.5 ? 'female' : 'male', + n = 'female' === r ? 'women' : 'men'; + return o.default.createElement( + 'div', + { className: 'card-component' }, + o.default.createElement( + l.Card, + { className: 'card', shadow: 'sm', withBorder: !0 }, + o.default.createElement( + l.Group, + { + position: 'apart', + className: 'group', + style: { marginTop: e.spacing.sm }, + }, + o.default.createElement( + l.Group, + { className: 'group', style: { marginTop: e.spacing.sm } }, + o.default.createElement(l.Avatar, { + src: `https://randomuser.me/api/portraits/${n}/${(0, s.number)({ + min: 0, + max: 99, + })}.jpg`, + alt: 'User', + color: 'indigo', + }), + o.default.createElement( + l.Text, + { weight: 500 }, + (0, s.name)({ gender: r }), + ), + ), + o.default.createElement( + l.Badge, + { color: 'pink', variant: 'light' }, + (0, s.domainName)(), + ), + ), + o.default.createElement( + l.Text, + { size: 'sm', style: { color: a, lineHeight: 2.5 } }, + o.default.createElement(l.Text, { size: 'sm', color: 'dimmed' }, 'Job'), + (0, s.jobTitle)(), + o.default.createElement( + l.Text, + { size: 'sm', color: 'dimmed' }, + 'Address', + ), + (0, s.streetAddress)(), + ', ', + (0, s.cityName)(), + o.default.createElement( + l.Text, + { size: 'sm', color: 'dimmed' }, + 'Started', + ), + (0, s.month)(), + ' ', + (0, s.number)({ min: 2e3, max: 2021 }), + ), + o.default.createElement( + l.Button, + { + variant: 'light', + color: 'blue', + fullWidth: !0, + className: 'button', + onClick: t, + }, + 'Generate another profile', + ), + ), + ); +} +s.default.addLocale('en', d.default); +const u = o.default.memo(function () { + return o.default.createElement( + l.MantineProvider, + { withGlobalStyles: !0, withNormalizeCSS: !0 }, + o.default.createElement(i, null), + ); +}); +function c() { + return o.createElement(u, null); +} +var f = m.Z; +export { f as default }; +//# sourceMappingURL=main.8285d3ce.js.map diff --git a/__fixtures__/remote-view-fake-cdn/view1/static/js/main.8285d3ce.js.map b/__fixtures__/remote-view-fake-cdn/view1/static/js/main.8285d3ce.js.map new file mode 100644 index 000000000..da2b6b585 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view1/static/js/main.8285d3ce.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/main.8285d3ce.js","mappings":"mNACA,IAAIA,EAAsB,CCA1BA,EAAwB,CAACC,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXF,EAAoBI,EAAEF,EAAYC,KAASH,EAAoBI,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDH,EAAwB,CAACS,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,sBCElF,MAAM,EAFEI,KAAO,IAAIC,EAAI,CAAC,EAAgC,OAA7Bf,EAAoBgB,EAAED,EAAGD,GAAWC,CAAC,EAE3BA,CAAE,CAAE,cAAmB,IAAME,EAA+DC,cAAe,QAAa,IAAMD,EAAwE,QAAG,SAAc,IAAMA,EAA+DE,WCAjU,MAAM,EAFEL,KAAO,IAAIC,EAAI,CAAC,EAAgC,OAA7Bf,EAAoBgB,EAAED,EAAGD,GAAWC,CAAC,EAE3B,CAAE,CAAE,OAAY,IAAMK,EAAsEC,OAAQ,MAAW,IAAMD,EAAsEE,MAAO,OAAY,IAAMF,EAAsEG,OAAQ,KAAU,IAAMH,EAAsEI,KAAM,MAAW,IAAMJ,EAAsEK,MAAO,gBAAqB,IAAML,EAAsEM,gBAAiB,KAAU,IAAMN,EAAsEO,KAAM,gBAAqB,IAAMP,EAAsEQ,kBCAhzB,MAAM,EAFEd,KAAO,IAAIC,EAAI,CAAC,EAAgC,OAA7Bf,EAAoBgB,EAAED,EAAGD,GAAWC,CAAC,EAE3B,CAAE,CAAE,SAAc,IAAMc,EAAmEC,SAAU,QAAa,IAAMD,EAA4E,QAAG,WAAgB,IAAMA,EAAmEE,WAAY,SAAc,IAAMF,EAAmEG,SAAU,MAAW,IAAMH,EAAmEI,MAAO,KAAU,IAAMJ,EAAmEK,KAAM,OAAY,IAAML,EAAmEM,OAAQ,cAAmB,IAAMN,EAAmEO,gBCA/xB,MAAM,EAFEtB,KAAO,IAAIC,EAAI,CAAC,EAAgC,OAA7Bf,EAAoBgB,EAAED,EAAGD,GAAWC,CAAC,EAE3B,CAAE,CAAE,QAAa,IAAMsB,EAAuF,UCyBnJ,SAASC,IACP,MAAMC,GAAQ,IAAAX,mBACRY,GAAU,IAAArB,UAAS,CAAC,GAAG,GAEvBsB,EACkB,SAAtBF,EAAMG,YAAyBH,EAAMI,OAAOC,KAAK,GAAKL,EAAMI,OAAOE,KAAK,GAEpEC,EAASC,KAAKC,SAAW,GAAM,SAAW,OAC1CC,EAAuB,WAAXH,EAAsB,QAAU,MAElD,OACE,wBAAC,OAAII,UAAU,kBACb,wBAAC,EAAA1B,KAAI,CAAC0B,UAAU,OAAOC,OAAO,KAAKC,YAAY,GAC7C,wBAAC,EAAA3B,MAAK,CACJ4B,SAAS,QACTH,UAAU,QACVI,MAAO,CAAEC,UAAWhB,EAAMiB,QAAQC,KAElC,wBAAC,EAAAhC,MAAK,CAACyB,UAAU,QAAQI,MAAO,CAAEC,UAAWhB,EAAMiB,QAAQC,KACzD,wBAAC,EAAApC,OAAM,CACLqC,IAAK,uCAAuCT,MAAa,IAAAd,QAAO,CAC9DwB,IAAK,EACLC,IAAK,WAEPC,IAAI,OACJC,MAAM,WAER,wBAAC,EAAAnC,KAAI,CAACoC,OAAQ,MAAM,IAAA7B,MAAK,CAAEY,aAE7B,wBAAC,EAAAxB,MAAK,CAACwC,MAAM,OAAOE,QAAQ,UACzB,IAAAjC,gBAIL,wBAAC,EAAAJ,KAAI,CAACsC,KAAK,KAAKX,MAAO,CAAEQ,MAAOrB,EAAgByB,WAAY,MAC1D,wBAAC,EAAAvC,KAAI,CAACsC,KAAK,KAAKH,MAAM,UAAS,QAG9B,IAAA9B,YACD,wBAAC,EAAAL,KAAI,CAACsC,KAAK,KAAKH,MAAM,UAAS,YAG9B,IAAA1B,iBAAgB,MAAG,IAAAN,YACpB,wBAAC,EAAAH,KAAI,CAACsC,KAAK,KAAKH,MAAM,UAAS,YAG9B,IAAA7B,SAAQ,KAAE,IAAAE,QAAO,CAAEwB,IAAK,IAAMC,IAAK,QAGtC,wBAAC,EAAArC,OAAM,CACLyC,QAAQ,QACRF,MAAM,OACNK,WAAS,EACTjB,UAAU,SACVkB,QAAS5B,GACV,6BAMT,CA/DA,oBAAoB,KAAM,WAiE1B,QAAe,gBAAW,WACxB,OACE,wBAAC,EAAAd,gBAAe,CAAC2C,kBAAgB,EAACC,kBAAgB,GAChD,wBAAChC,EAAA,MAGP,IC7Fe,SAASiC,IACtB,OAAO,gBAACC,EAAG,KACb,C","sources":["../webpack/bootstrap","../webpack/runtime/define property getters","../webpack/runtime/hasOwnProperty shorthand","../external module \"https:/esm.sh/react@18.2.0\"","../external module \"https:/esm.sh/@mantine/core@5.10.4\"","../external module \"https:/esm.sh/minifaker@1.34.1\"","../external module \"https:/esm.sh/minifaker@1.34.1/locales/en\"","App.tsx","index.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"createElement\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_react_18_2_0_f0a23e8c__.createElement, [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_react_18_2_0_f0a23e8c__[\"default\"], [\"useState\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_react_18_2_0_f0a23e8c__.useState });","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"Avatar\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_mantine_core_5_10_4_595bb8cd__.Avatar, [\"Badge\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_mantine_core_5_10_4_595bb8cd__.Badge, [\"Button\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_mantine_core_5_10_4_595bb8cd__.Button, [\"Card\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_mantine_core_5_10_4_595bb8cd__.Card, [\"Group\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_mantine_core_5_10_4_595bb8cd__.Group, [\"MantineProvider\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_mantine_core_5_10_4_595bb8cd__.MantineProvider, [\"Text\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_mantine_core_5_10_4_595bb8cd__.Text, [\"useMantineTheme\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_mantine_core_5_10_4_595bb8cd__.useMantineTheme });","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"cityName\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__.cityName, [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__[\"default\"], [\"domainName\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__.domainName, [\"jobTitle\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__.jobTitle, [\"month\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__.month, [\"name\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__.name, [\"number\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__.number, [\"streetAddress\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__.streetAddress });","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_locales_en_0d5a624a__[\"default\"] });","import React, { useState } from 'react';\nimport {\n Card,\n Text,\n Badge,\n Button,\n Group,\n Avatar,\n useMantineTheme,\n MantineProvider,\n} from '@mantine/core';\nimport {\n default as minifaker,\n name,\n jobTitle,\n streetAddress,\n cityName,\n domainName,\n month,\n number,\n} from 'minifaker';\n/* @ts-expect-error */\nimport { default as en } from 'minifaker/locales/en';\nimport './index.css';\n\nminifaker.addLocale('en', en);\n\nfunction AppInner(): JSX.Element {\n const theme = useMantineTheme();\n const refresh = useState({})[1];\n\n const secondaryColor =\n theme.colorScheme === 'dark' ? theme.colors.dark[1] : theme.colors.gray[7];\n\n const gender = Math.random() > 0.5 ? 'female' : 'male';\n const apiGender = gender === 'female' ? 'women' : 'men';\n\n return (\n
\n \n \n \n \n {name({ gender })}\n \n \n {domainName()}\n \n \n\n \n \n Job\n \n {jobTitle()}\n \n Address\n \n {streetAddress()}, {cityName()}\n \n Started\n \n {month()} {number({ min: 2000, max: 2021 })}\n \n\n \n Generate another profile\n \n \n
\n );\n}\n\nexport default React.memo(function App() {\n return (\n \n \n \n );\n});\n","import * as React from 'react';\nimport App from './App';\n\nexport default function View1(): JSX.Element {\n return ;\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","y","x","d","__WEBPACK_EXTERNAL_MODULE_https_esm_sh_react_18_2_0_f0a23e8c__","createElement","useState","__WEBPACK_EXTERNAL_MODULE_https_esm_sh_mantine_core_5_10_4_595bb8cd__","Avatar","Badge","Button","Card","Group","MantineProvider","Text","useMantineTheme","__WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__","cityName","domainName","jobTitle","month","name","number","streetAddress","__WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_locales_en_0d5a624a__","AppInner","theme","refresh","secondaryColor","colorScheme","colors","dark","gray","gender","Math","random","apiGender","className","shadow","withBorder","position","style","marginTop","spacing","sm","src","min","max","alt","color","weight","variant","size","lineHeight","fullWidth","onClick","withGlobalStyles","withNormalizeCSS","View1","App"],"sourceRoot":""} \ No newline at end of file diff --git a/__fixtures__/remote-view-fake-cdn/view2/asset-manifest.json b/__fixtures__/remote-view-fake-cdn/view2/asset-manifest.json new file mode 100644 index 000000000..f931675af --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view2/asset-manifest.json @@ -0,0 +1,7 @@ +{ + "files": { + "main.js": "/static/js/main.95dbf0ef.js", + "main.95dbf0ef.js.map": "/static/js/main.95dbf0ef.js.map" + }, + "entrypoints": ["static/js/main.95dbf0ef.js"] +} diff --git a/__fixtures__/remote-view-fake-cdn/view2/index.html b/__fixtures__/remote-view-fake-cdn/view2/index.html new file mode 100644 index 000000000..2303efe9a --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view2/index.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/__fixtures__/remote-view-fake-cdn/view2/package.json b/__fixtures__/remote-view-fake-cdn/view2/package.json new file mode 100644 index 000000000..d85a313ac --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view2/package.json @@ -0,0 +1,19 @@ +{ + "name": "view2", + "version": "1.0.0", + "license": "UNLICENSED", + "modular": { + "type": "esm-view", + "externalCdnTemplate": "https://esm.sh/[name]@[version]" + }, + "dependencies": { + "regular-table": "0.5.6", + "react": "18.2.0", + "minifaker": "1.34.1" + }, + "bundledDependencies": [], + "module": "/static/js/main.95dbf0ef.js", + "styleImports": [ + "https://esm.sh/regular-table@0.5.6/dist/css/material.css" + ] +} diff --git a/__fixtures__/remote-view-fake-cdn/view2/static/js/_trampoline.js b/__fixtures__/remote-view-fake-cdn/view2/static/js/_trampoline.js new file mode 100644 index 000000000..b091f0394 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view2/static/js/_trampoline.js @@ -0,0 +1,6 @@ +import { createRoot } from 'https://esm.sh/react-dom@18.2.0/client'; +import React from 'https://esm.sh/react@18.2.0'; +import Component from './main.95dbf0ef.js'; +var container = document.getElementById('root'); +var root = createRoot(container); +root.render(React.createElement(Component, null)); diff --git a/__fixtures__/remote-view-fake-cdn/view2/static/js/main.95dbf0ef.js b/__fixtures__/remote-view-fake-cdn/view2/static/js/main.95dbf0ef.js new file mode 100644 index 000000000..2d6ba0d75 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view2/static/js/main.95dbf0ef.js @@ -0,0 +1,135 @@ +import * as e from 'https://esm.sh/react@18.2.0'; +import * as t from 'https://esm.sh/regular-table@0.5.6'; +import * as r from 'https://esm.sh/minifaker@1.34.1/locales/en'; +import * as n from 'https://esm.sh/minifaker@1.34.1'; +var o = { 545: () => {} }, + a = {}; +function s(e) { + var t = a[e]; + if (void 0 !== t) return t.exports; + var r = (a[e] = { exports: {} }); + return o[e](r, r.exports, s), r.exports; +} +(s.d = (e, t) => { + for (var r in t) + s.o(t, r) && + !s.o(e, r) && + Object.defineProperty(e, r, { enumerable: !0, get: t[r] }); +}), + (s.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t)); +var l = {}; +(() => { + s.d(l, { Z: () => f }); + const t = ((e) => { + var t = {}; + return s.d(t, e), t; + })({ + createElement: () => e.createElement, + default: () => e.default, + useEffect: () => e.useEffect, + useRef: () => e.useRef, + }); + s(545); + ((e) => { + var t = {}; + s.d(t, e); + })({}); + const o = ((e) => { + var t = {}; + return s.d(t, e), t; + })({ default: () => r.default }); + const a = ((e) => { + var t = {}; + return s.d(t, e), t; + })({ + country: () => n.country, + default: () => n.default, + domainName: () => n.domainName, + word: () => n.word, + }); + a.default.addLocale('en', o.default); + const u = { green: '#e4ebe4', red: '#f1dbdb' }; + function c(e) { + return e[0].toUpperCase() + e.slice(1); + } + const d = t.default.memo(function () { + const e = (0, t.useRef)(null), + r = (0, t.useRef)(null), + n = (function (e) { + const t = [ + () => + `${c((0, a.word)({ type: 'adjective' }))} ${c( + (0, a.word)({ type: 'noun' }), + )}`, + () => String(Math.ceil(100 * Math.random())), + () => (0, a.country)({ useCode: 'alpha3' }), + a.domainName, + () => String((1e3 * Math.random()).toFixed(2)), + ], + r = []; + for (let n = 0; n < t.length; n += 1) { + const o = []; + for (let r = 0; r < e; r += 1) o.push(t[n]()); + r.push(o); + } + return r; + })(5e3); + return ( + (0, t.useEffect)(() => { + if (document.getElementById('view2-table')) + return void console.warn( + 'view2 was remounted and attempted to create a new table, cancelling', + ); + const t = document.createElement('regular-table'); + t.setAttribute('id', 'view2-table'), + (r.current = t), + e.current?.appendChild(t); + const o = r.current; + o.setDataListener(function (e, t, r, o) { + const a = []; + for (let l = 0; l < n[4].length; l += 1) { + const e = 100 * Math.random() - 50; + (n[4][l] = String((parseFloat(n[4][l]) + e).toFixed(2))), + (a[l] = e < 0 ? 'red' : 'green'); + } + const s = { + num_rows: n[0].length, + num_columns: n.length, + data: n.slice(e, r).map((e) => e.slice(t, o)), + column_headers: [ + ['Company Name'], + ['Employees'], + ['Country'], + ['Domain'], + ['Price'], + ], + metadata: [[], [], [], [], a], + }; + return Promise.resolve(s); + }), + o.addStyleListener(() => { + const e = o.querySelectorAll('thead th'); + for (const r of e) + (r.style.textAlign = 'left'), + (r.style.fontWeight = '900'), + (r.style.padding = '0 0 12px 0'); + const t = o.querySelectorAll('body td'); + for (const r of t) { + const e = o.getMeta(r); + e.user && (r.style.backgroundColor = u[e.user]); + } + }); + }), + (0, t.useEffect)(() => { + r.current.draw(), setInterval(() => r.current.draw(), 1e3); + }), + t.default.createElement('div', { ref: e }) + ); + }); + function f() { + return t.createElement(d, null); + } +})(); +var u = l.Z; +export { u as default }; +//# sourceMappingURL=main.95dbf0ef.js.map diff --git a/__fixtures__/remote-view-fake-cdn/view2/static/js/main.95dbf0ef.js.map b/__fixtures__/remote-view-fake-cdn/view2/static/js/main.95dbf0ef.js.map new file mode 100644 index 000000000..bdb2aaea9 --- /dev/null +++ b/__fixtures__/remote-view-fake-cdn/view2/static/js/main.95dbf0ef.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/js/main.95dbf0ef.js","mappings":"qOACIA,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIC,EAASN,EAAyBE,GAAY,CAGjDG,QAAS,CAAC,GAOX,OAHAE,EAAoBL,GAAUI,EAAQA,EAAOD,QAASJ,GAG/CK,EAAOD,OACf,CCrBAJ,EAAoBO,EAAI,CAACH,EAASI,KACjC,IAAI,IAAIC,KAAOD,EACXR,EAAoBU,EAAEF,EAAYC,KAAST,EAAoBU,EAAEN,EAASK,IAC5EE,OAAOC,eAAeR,EAASK,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDT,EAAoBU,EAAI,CAACK,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,G,gCCElF,MAAM,EAFEI,KAAO,IAAIC,EAAI,CAAC,EAAgC,OAA7BrB,EAAoBO,EAAEc,EAAGD,GAAWC,CAAC,EAE3BA,CAAE,CAAE,cAAmB,IAAMC,EAA+DC,cAAe,QAAa,IAAMD,EAAwE,QAAG,UAAe,IAAMA,EAA+DE,UAAW,OAAY,IAAMF,EAA+DG,S,OCFtZL,KAAO,IAAIC,EAAI,CAAC,EAAGrB,EAAoBO,EAAEc,EAAGD,EAAY,EAE3B,CAAE,CAAG,GCA1C,MAAM,EAFEA,KAAO,IAAIC,EAAI,CAAC,EAAgC,OAA7BrB,EAAoBO,EAAEc,EAAGD,GAAWC,CAAC,EAE3B,CAAE,CAAE,QAAa,IAAMK,EAAuF,UCAnJ,MAAM,EAFEN,KAAO,IAAIC,EAAI,CAAC,EAAgC,OAA7BrB,EAAoBO,EAAEc,EAAGD,GAAWC,CAAC,EAE3B,CAAE,CAAE,QAAa,IAAMM,EAAmEC,QAAS,QAAa,IAAMD,EAA4E,QAAG,WAAgB,IAAMA,EAAmEE,WAAY,KAAU,IAAMF,EAAmEG,OCUla,oBAAoB,KAAM,WAU1B,MAAMC,EAAS,CAAEC,MAAO,UAAWC,IAAK,WAiGxC,SAASC,EAAWC,GAClB,OAAOA,EAAE,GAAGC,cAAgBD,EAAEE,MAAM,EACtC,CAEA,QAAe,gBA5Ef,WACE,MAAMC,GAAO,IAAAb,QAAuB,MAC9Bc,GAAmB,IAAAd,QAAgB,MAEnCe,EA3BR,SAAsBC,GACpB,MAAMC,EAAM,CACV,IACE,GAAGR,GAAW,IAAAJ,MAAK,CAAEa,KAAM,kBAAmBT,GAC5C,IAAAJ,MAAK,CAAEa,KAAM,YAEjB,IAAMC,OAAOC,KAAKC,KAAqB,IAAhBD,KAAKE,WAC5B,KAAM,IAAAnB,SAAQ,CAAEoB,QAAS,WACzB,EAAAnB,WACA,IAAMe,QAAwB,IAAhBC,KAAKE,UAAiBE,QAAQ,KAGxCC,EAAsB,GAC5B,QAASC,EAAc,EAAGA,EAAcT,EAAIU,OAAQD,GAAe,EAAG,CACpE,MAAME,EAAgB,GACtB,QAASC,EAAW,EAAGA,EAAWb,EAAGa,GAAY,EAC/CD,EAAIE,KAAKb,EAAIS,MAEfD,EAAQK,KAAKF,EACf,CACA,OAAOH,CACT,CAM6BM,CAAa,KAiExC,OA/DA,IAAAhC,YAAU,KACR,GAAIiC,SAASC,eAAe,eAI1B,YAHAC,QAAQC,KACN,uEAIJ,MAAMC,EAAeJ,SAASlC,cAAc,iBAC5CsC,EAAaC,aAAa,KAAM,eAChCvB,EAAiBwB,QAAUF,EAC3BvB,EAAKyB,SAASC,YAAYH,GAwB1B,MAAMI,EAAQ1B,EAAiBwB,QAC/BE,EAAMC,iBAxBN,SAAsBC,EAAYC,EAAYC,EAAYC,GACxD,MAAMC,EAAW,GACjB,QAASC,EAAI,EAAGA,EAAIhC,EAAO,GAAGY,OAAQoB,GAAK,EAAG,CAC5C,MAAMC,EAA2B,IAAhB5B,KAAKE,SAAiB,GACvCP,EAAO,GAAGgC,GAAK5B,QAAQ8B,WAAWlC,EAAO,GAAGgC,IAAMC,GAAUxB,QAAQ,IACpEsB,EAASC,GAAKC,EAAW,EAAI,MAAQ,OACvC,CAEA,MAAME,EAAwB,CAC5BC,SAAUpC,EAAO,GAAGY,OACpByB,YAAarC,EAAOY,OACpB0B,KAAMtC,EAAOH,MAAM8B,EAAIE,GAAI3B,KAAKqC,GAAQA,EAAI1C,MAAM+B,EAAIE,KACtDU,eAAgB,CACd,CAAC,gBACD,CAAC,aACD,CAAC,WACD,CAAC,UACD,CAAC,UAEHT,SAAU,CAAC,GAAI,GAAI,GAAI,GAAIA,IAE7B,OAAOU,QAAQC,QAAQP,EACzB,IAGAV,EAAMkB,kBAAiB,KACrB,MAAMC,EACJnB,EAAMoB,iBAAiB,YACzB,UAAWC,KAAMF,EACfE,EAAGC,MAAMC,UAAY,OACrBF,EAAGC,MAAME,WAAa,MACtBH,EAAGC,MAAMG,QAAU,aAErB,MAAMC,EACJ1B,EAAMoB,iBAAiB,WACzB,UAAWO,KAAMD,EAAK,CACpB,MAAME,EAAO5B,EAAM6B,QAAQF,GACvBC,EAAKE,OACPH,EAAGL,MAAMS,gBAAkBjE,EAAO8D,EAAKE,MAE3C,IACA,KAGJ,IAAAvE,YAAU,KACPe,EAAiBwB,QAAgCkC,OAClDC,aACE,IAAO3D,EAAiBwB,QAAgCkC,QACxD,IACD,IAGI,wBAAC,OAAIE,IAAK7D,GACnB,IClHe,SAAS8D,IACtB,OAAO,gBAAC,EAAG,KACb,C","sources":["../webpack/bootstrap","../webpack/runtime/define property getters","../webpack/runtime/hasOwnProperty shorthand","../external module \"https:/esm.sh/react@18.2.0\"","../external module \"https:/esm.sh/regular-table@0.5.6\"","../external module \"https:/esm.sh/minifaker@1.34.1/locales/en\"","../external module \"https:/esm.sh/minifaker@1.34.1\"","App.tsx","index.tsx"],"sourcesContent":["// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"createElement\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_react_18_2_0_f0a23e8c__.createElement, [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_react_18_2_0_f0a23e8c__[\"default\"], [\"useEffect\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_react_18_2_0_f0a23e8c__.useEffect, [\"useRef\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_react_18_2_0_f0a23e8c__.useRef });","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ });","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_locales_en_0d5a624a__[\"default\"] });","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"country\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__.country, [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__[\"default\"], [\"domainName\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__.domainName, [\"word\"]: () => __WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__.word });","import 'regular-table/dist/css/material.css';\nimport React, { useEffect, useRef } from 'react';\nimport 'regular-table';\nimport type {\n RegularTableElement,\n DataResponse,\n MetaData,\n} from 'regular-table';\n/* @ts-expect-error */\nimport { default as en } from 'minifaker/locales/en';\nimport { default as minifaker, country, domainName, word } from 'minifaker';\n\nminifaker.addLocale('en', en);\n\ninterface ExtendedResponse extends DataResponse {\n metadata: string[][];\n}\n\ninterface ExtendedMetadata extends MetaData {\n user: 'green' | 'red';\n}\n\nconst colors = { green: '#e4ebe4', red: '#f1dbdb' };\n\nfunction createPeople(n: number) {\n const map = [\n () =>\n `${capitalize(word({ type: 'adjective' }))} ${capitalize(\n word({ type: 'noun' }),\n )}`,\n () => String(Math.ceil(Math.random() * 100)),\n () => country({ useCode: 'alpha3' }),\n domainName,\n () => String((Math.random() * 1000).toFixed(2)),\n ];\n\n const columns: string[][] = [];\n for (let columnIndex = 0; columnIndex < map.length; columnIndex += 1) {\n const row: string[] = [];\n for (let rowIndex = 0; rowIndex < n; rowIndex += 1) {\n row.push(map[columnIndex]());\n }\n columns.push(row);\n }\n return columns;\n}\n\nfunction App(): JSX.Element {\n const view = useRef(null);\n const regTableInstance = useRef(null);\n\n const people: string[][] = createPeople(5000);\n\n useEffect(() => {\n if (document.getElementById('view2-table')) {\n console.warn(\n 'view2 was remounted and attempted to create a new table, cancelling',\n );\n return;\n }\n const regularTable = document.createElement('regular-table');\n regularTable.setAttribute('id', 'view2-table');\n regTableInstance.current = regularTable;\n view.current?.appendChild(regularTable);\n function getDataSlice(x0: number, y0: number, x1: number, y1: number) {\n const metadata = [];\n for (let i = 0; i < people[4].length; i += 1) {\n const priceInc = Math.random() * 100 - 50;\n people[4][i] = String((parseFloat(people[4][i]) + priceInc).toFixed(2));\n metadata[i] = priceInc < 0 ? 'red' : 'green';\n }\n\n const res: ExtendedResponse = {\n num_rows: people[0].length,\n num_columns: people.length,\n data: people.slice(x0, x1).map((col) => col.slice(y0, y1)),\n column_headers: [\n ['Company Name'],\n ['Employees'],\n ['Country'],\n ['Domain'],\n ['Price'],\n ],\n metadata: [[], [], [], [], metadata],\n };\n return Promise.resolve(res);\n }\n const table = regTableInstance.current as RegularTableElement;\n table.setDataListener(getDataSlice);\n table.addStyleListener(() => {\n const ths: NodeListOf =\n table.querySelectorAll('thead th');\n for (const th of ths) {\n th.style.textAlign = 'left';\n th.style.fontWeight = '900';\n th.style.padding = '0 0 12px 0';\n }\n const thd: NodeListOf =\n table.querySelectorAll('body td');\n for (const td of thd) {\n const meta = table.getMeta(td) as ExtendedMetadata;\n if (meta.user) {\n td.style.backgroundColor = colors[meta.user];\n }\n }\n });\n });\n\n useEffect(() => {\n (regTableInstance.current as RegularTableElement).draw();\n setInterval(\n () => (regTableInstance.current as RegularTableElement).draw(),\n 1000,\n );\n });\n\n return
;\n}\n\nfunction capitalize(s: string) {\n return s[0].toUpperCase() + s.slice(1);\n}\n\nexport default React.memo(App);\n","import * as React from 'react';\nimport App from './App';\n\nexport default function View1(): JSX.Element {\n return ;\n}\n"],"names":["__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","y","x","__WEBPACK_EXTERNAL_MODULE_https_esm_sh_react_18_2_0_f0a23e8c__","createElement","useEffect","useRef","__WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_locales_en_0d5a624a__","__WEBPACK_EXTERNAL_MODULE_https_esm_sh_minifaker_1_34_1_1a496265__","country","domainName","word","colors","green","red","capitalize","s","toUpperCase","slice","view","regTableInstance","people","n","map","type","String","Math","ceil","random","useCode","toFixed","columns","columnIndex","length","row","rowIndex","push","createPeople","document","getElementById","console","warn","regularTable","setAttribute","current","appendChild","table","setDataListener","x0","y0","x1","y1","metadata","i","priceInc","parseFloat","res","num_rows","num_columns","data","col","column_headers","Promise","resolve","addStyleListener","ths","querySelectorAll","th","style","textAlign","fontWeight","padding","thd","td","meta","getMeta","user","backgroundColor","draw","setInterval","ref","View1"],"sourceRoot":""} \ No newline at end of file diff --git a/__fixtures__/remote-view/packages/esm-view-card/package.json b/__fixtures__/remote-view/packages/esm-view-card/package.json new file mode 100644 index 000000000..491b7c49d --- /dev/null +++ b/__fixtures__/remote-view/packages/esm-view-card/package.json @@ -0,0 +1,14 @@ +{ + "name": "esm-view-card", + "private": false, + "modular": { + "type": "esm-view", + "externalCdnTemplate": "http://localhost:8484/[name]@[version]" + }, + "dependencies": {}, + "version": "1.0.0", + "devDependencies": {}, + "files": [ + "src" + ] +} diff --git a/__fixtures__/remote-view/packages/esm-view-card/src/index.tsx b/__fixtures__/remote-view/packages/esm-view-card/src/index.tsx new file mode 100644 index 000000000..b10bd2441 --- /dev/null +++ b/__fixtures__/remote-view/packages/esm-view-card/src/index.tsx @@ -0,0 +1,19 @@ +import React, { useState } from 'react'; + +export default function EsmCardView(): JSX.Element { + const [contents, setContents] = useState('Some card contents'); + + return ( +
+

My Card

+ {contents} + +
+ ); +} diff --git a/__fixtures__/remote-view/packages/esm-view-list/package.json b/__fixtures__/remote-view/packages/esm-view-list/package.json new file mode 100644 index 000000000..54b79d3c5 --- /dev/null +++ b/__fixtures__/remote-view/packages/esm-view-list/package.json @@ -0,0 +1,14 @@ +{ + "name": "esm-view-list", + "private": false, + "modular": { + "type": "esm-view", + "externalCdnTemplate": "http://localhost:8484/[name]@[version]" + }, + "dependencies": {}, + "version": "1.0.0", + "devDependencies": {}, + "files": [ + "src" + ] +} diff --git a/__fixtures__/remote-view/packages/esm-view-list/src/index.tsx b/__fixtures__/remote-view/packages/esm-view-list/src/index.tsx new file mode 100644 index 000000000..ce00d62a3 --- /dev/null +++ b/__fixtures__/remote-view/packages/esm-view-list/src/index.tsx @@ -0,0 +1,23 @@ +import React, { useState } from 'react'; + +export default function EsmListView(): JSX.Element { + const [contents, setContents] = useState(['foo', 'bar', 'baz']); + + return ( +
+

My List

+
    + {contents.map((item) => ( +
  • {item}
  • + ))} +
+ +
+ ); +} diff --git a/__fixtures__/remote-view/packages/package.json b/__fixtures__/remote-view/packages/package.json new file mode 100644 index 000000000..0ee1f1c08 --- /dev/null +++ b/__fixtures__/remote-view/packages/package.json @@ -0,0 +1,13 @@ +{ + "name": "remote-view", + "version": "1.0.0", + "author": "App Frameworks team", + "license": "MIT", + "private": true, + "workspaces": [ + "packages/**" + ], + "modular": { + "type": "root" + } +} diff --git a/__fixtures__/remote-view/packages/view1/README.md b/__fixtures__/remote-view/packages/view1/README.md new file mode 100644 index 000000000..e48565e74 --- /dev/null +++ b/__fixtures__/remote-view/packages/view1/README.md @@ -0,0 +1 @@ +This is a component diff --git a/__fixtures__/remote-view/packages/view1/package.json b/__fixtures__/remote-view/packages/view1/package.json new file mode 100644 index 000000000..6ebb8e716 --- /dev/null +++ b/__fixtures__/remote-view/packages/view1/package.json @@ -0,0 +1,17 @@ +{ + "name": "view1", + "version": "1.0.0", + "main": "src/index.tsx", + "license": "UNLICENSED", + "modular": { + "type": "esm-view", + "externalCdnTemplate": "https://esm.sh/[name]@[version]" + }, + "dependencies": { + "react": "18.2.0", + "react-dom": "18.2.0", + "@mantine/core": "5.10.4", + "@mantine/hooks": "5.10.4", + "minifaker": "1.34.1" + } +} diff --git a/__fixtures__/remote-view/packages/view1/src/App.tsx b/__fixtures__/remote-view/packages/view1/src/App.tsx new file mode 100644 index 000000000..c26198729 --- /dev/null +++ b/__fixtures__/remote-view/packages/view1/src/App.tsx @@ -0,0 +1,97 @@ +import React, { useState } from 'react'; +import { + Card, + Text, + Badge, + Button, + Group, + Avatar, + useMantineTheme, + MantineProvider, +} from '@mantine/core'; +import { + default as minifaker, + name, + jobTitle, + streetAddress, + cityName, + domainName, + month, + number, +} from 'minifaker'; +/* @ts-expect-error */ +import { default as en } from 'minifaker/locales/en'; +import './index.css'; + +minifaker.addLocale('en', en); + +function AppInner(): JSX.Element { + const theme = useMantineTheme(); + const refresh = useState({})[1]; + + const secondaryColor = + theme.colorScheme === 'dark' ? theme.colors.dark[1] : theme.colors.gray[7]; + + const gender = Math.random() > 0.5 ? 'female' : 'male'; + const apiGender = gender === 'female' ? 'women' : 'men'; + + return ( +
+ + + + + {name({ gender })} + + + {domainName()} + + + + + + Job + + {jobTitle()} + + Address + + {streetAddress()}, {cityName()} + + Started + + {month()} {number({ min: 2000, max: 2021 })} + + + + +
+ ); +} + +export default React.memo(function App() { + return ( + + + + ); +}); diff --git a/__fixtures__/remote-view/packages/view1/src/__tests__/index.test.tsx b/__fixtures__/remote-view/packages/view1/src/__tests__/index.test.tsx new file mode 100644 index 000000000..74a06d6e5 --- /dev/null +++ b/__fixtures__/remote-view/packages/view1/src/__tests__/index.test.tsx @@ -0,0 +1,8 @@ +import * as React from 'react'; +import { render } from 'react-dom'; +import View1 from '../index'; + +test('it should render', () => { + const el = document.createElement('div'); + expect(() => render(, el)).not.toThrow(); +}); diff --git a/__fixtures__/remote-view/packages/view1/src/index.css b/__fixtures__/remote-view/packages/view1/src/index.css new file mode 100644 index 000000000..88d154715 --- /dev/null +++ b/__fixtures__/remote-view/packages/view1/src/index.css @@ -0,0 +1,16 @@ +.card-component { + width: 480px; + margin: auto; +} + +.card-component .card { + background-color: #f9f9f9; +} + +.card-component .group { + margin-bottom: 5px; +} + +.card-component .button { + margin-top: 14px; +} diff --git a/__fixtures__/remote-view/packages/view1/src/index.tsx b/__fixtures__/remote-view/packages/view1/src/index.tsx new file mode 100644 index 000000000..0d7b8fb41 --- /dev/null +++ b/__fixtures__/remote-view/packages/view1/src/index.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import App from './App'; + +export default function View1(): JSX.Element { + return ; +} diff --git a/__fixtures__/remote-view/packages/view2/README.md b/__fixtures__/remote-view/packages/view2/README.md new file mode 100644 index 000000000..e48565e74 --- /dev/null +++ b/__fixtures__/remote-view/packages/view2/README.md @@ -0,0 +1 @@ +This is a component diff --git a/__fixtures__/remote-view/packages/view2/package.json b/__fixtures__/remote-view/packages/view2/package.json new file mode 100644 index 000000000..7f1f9a6f3 --- /dev/null +++ b/__fixtures__/remote-view/packages/view2/package.json @@ -0,0 +1,16 @@ +{ + "name": "view2", + "version": "1.0.0", + "main": "src/index.tsx", + "license": "UNLICENSED", + "modular": { + "type": "esm-view", + "externalCdnTemplate": "https://esm.sh/[name]@[version]" + }, + "dependencies": { + "react": "18.2.0", + "react-dom": "18.2.0", + "minifaker": "1.34.1", + "regular-table": "0.5.6" + } +} diff --git a/__fixtures__/remote-view/packages/view2/src/App.tsx b/__fixtures__/remote-view/packages/view2/src/App.tsx new file mode 100644 index 000000000..eb33dd2fb --- /dev/null +++ b/__fixtures__/remote-view/packages/view2/src/App.tsx @@ -0,0 +1,124 @@ +import 'regular-table/dist/css/material.css'; +import React, { useEffect, useRef } from 'react'; +import 'regular-table'; +import type { + RegularTableElement, + DataResponse, + MetaData, +} from 'regular-table'; +/* @ts-expect-error */ +import { default as en } from 'minifaker/locales/en'; +import { default as minifaker, country, domainName, word } from 'minifaker'; + +minifaker.addLocale('en', en); + +interface ExtendedResponse extends DataResponse { + metadata: string[][]; +} + +interface ExtendedMetadata extends MetaData { + user: 'green' | 'red'; +} + +const colors = { green: '#e4ebe4', red: '#f1dbdb' }; + +function createPeople(n: number) { + const map = [ + () => + `${capitalize(word({ type: 'adjective' }))} ${capitalize( + word({ type: 'noun' }), + )}`, + () => String(Math.ceil(Math.random() * 100)), + () => country({ useCode: 'alpha3' }), + domainName, + () => String((Math.random() * 1000).toFixed(2)), + ]; + + const columns: string[][] = []; + for (let columnIndex = 0; columnIndex < map.length; columnIndex += 1) { + const row: string[] = []; + for (let rowIndex = 0; rowIndex < n; rowIndex += 1) { + row.push(map[columnIndex]()); + } + columns.push(row); + } + return columns; +} + +function App(): JSX.Element { + const view = useRef(null); + const regTableInstance = useRef(null); + + const people: string[][] = createPeople(5000); + + useEffect(() => { + if (document.getElementById('view2-table')) { + console.warn( + 'view2 was remounted and attempted to create a new table, cancelling', + ); + return; + } + const regularTable = document.createElement('regular-table'); + regularTable.setAttribute('id', 'view2-table'); + regTableInstance.current = regularTable; + view.current?.appendChild(regularTable); + function getDataSlice(x0: number, y0: number, x1: number, y1: number) { + const metadata = []; + for (let i = 0; i < people[4].length; i += 1) { + const priceInc = Math.random() * 100 - 50; + people[4][i] = String((parseFloat(people[4][i]) + priceInc).toFixed(2)); + metadata[i] = priceInc < 0 ? 'red' : 'green'; + } + + const res: ExtendedResponse = { + num_rows: people[0].length, + num_columns: people.length, + data: people.slice(x0, x1).map((col) => col.slice(y0, y1)), + column_headers: [ + ['Company Name'], + ['Employees'], + ['Country'], + ['Domain'], + ['Price'], + ], + metadata: [[], [], [], [], metadata], + }; + return Promise.resolve(res); + } + const table = regTableInstance.current as RegularTableElement; + table.setDataListener(getDataSlice); + table.addStyleListener(() => { + const ths: NodeListOf = + table.querySelectorAll('thead th'); + for (const th of ths) { + th.style.textAlign = 'left'; + th.style.fontWeight = '900'; + th.style.padding = '0 0 12px 0'; + } + const thd: NodeListOf = + table.querySelectorAll('body td'); + for (const td of thd) { + const meta = table.getMeta(td) as ExtendedMetadata; + if (meta.user) { + td.style.backgroundColor = colors[meta.user]; + } + } + }); + }); + + useEffect(() => { + (regTableInstance.current as RegularTableElement).draw(); + setInterval( + () => (regTableInstance.current as RegularTableElement).draw(), + 1000, + ); + }); + + return
; +} + +function capitalize(s: string) { + return s[0].toUpperCase() + s.slice(1); +} + +export default React.memo(App); diff --git a/__fixtures__/remote-view/packages/view2/src/__tests__/index.test.tsx b/__fixtures__/remote-view/packages/view2/src/__tests__/index.test.tsx new file mode 100644 index 000000000..af118b981 --- /dev/null +++ b/__fixtures__/remote-view/packages/view2/src/__tests__/index.test.tsx @@ -0,0 +1,8 @@ +import * as React from 'react'; +import { render } from 'react-dom'; +import View2 from '../index'; + +test('it should render', () => { + const el = document.createElement('div'); + expect(() => render(, el)).not.toThrow(); +}); diff --git a/__fixtures__/remote-view/packages/view2/src/index.tsx b/__fixtures__/remote-view/packages/view2/src/index.tsx new file mode 100644 index 000000000..0d7b8fb41 --- /dev/null +++ b/__fixtures__/remote-view/packages/view2/src/index.tsx @@ -0,0 +1,6 @@ +import * as React from 'react'; +import App from './App'; + +export default function View1(): JSX.Element { + return ; +} diff --git a/docs/components/index.md b/docs/components/index.md new file mode 100644 index 000000000..5f48feea7 --- /dev/null +++ b/docs/components/index.md @@ -0,0 +1,9 @@ +--- +has_children: true +title: Components +nav_order: 2 +--- + +# Components + +Components that are designed to work with Modular. diff --git a/docs/components/remote-view.md b/docs/components/remote-view.md new file mode 100644 index 000000000..2f51b132f --- /dev/null +++ b/docs/components/remote-view.md @@ -0,0 +1,332 @@ +--- +parent: Components +title: +--- + +# `` + +`` is a Modular React component that enables the micro-frontend +pattern using Modular [ESM views](https://modular.js.org/esm-views/). + +## Features + +- Build distributed UIs using the microfrontend pattern, thanks to Modular + [ESM Views](https://modular.js.org/esm-views/) and an + [ESM CDN](https://modular.js.org/esm-views/esm-cdn/) +- Supports loading local and global CSS +- Flexible error handling +- Declaratively fall back to iframes +- Compatible with any ESM CDN +- Also supports Modular [apps](https://modular.js.org/package-types/) via + iframes + +## Prerequisites + +To natively load ESM Views via ``, it is required that: + +1. The host (or "portal") application is a Modular + [ESM View](https://modular.js.org/esm-views/) itself +2. The version of React matches between the host and each ESM View being loaded + +This is due to the fact that React is a stateful dependency and loading +[more than 1 copy is unsupported](https://reactjs.org/warnings/invalid-hook-call-warning.html#duplicate-react). + +Using an iframe fallback avoids this limitation and may be suitable depending on +your use-case. + +## Getting Started + +Install the RemoteView package: + +```bash +yarn add @modular-scripts/remote-view +``` + +or + +```bash +npm install @modular-scripts/remote-view +``` + +Modular ``s work by +[dynamically importing](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import) +your Modular [ESM Views](https://modular.js.org/esm-views) and natively +rendering them into your React tree. + +To achieve this, `` loads +[ESM View manifests](https://modular.js.org/esm-views/output-package-manifest/) +that are statically served from a CDN. Once a manifest is fetched, +`` dynamically imports the ESM View's JS and CSS entrypoints and +renders them as part of the caller's React tree. + +This approach enables the microfrontend pattern, which can also be thought as +distributed UIs. + +`` also supports rendering non-ESM View modules by falling back to +iframes. In this case, an iframe is rendered in the React tree, instead of a +native React subtree. + +## Example + +Load (dynamically import) and render a set of +[esm-cdn-hosted](https://modular.js.org/esm-views/esm-cdn/) views: + +```jsx +import React, { useState } from 'react'; +import { + RemoteViewProvider, + RemoteView, + RemoteViewErrorBoundary, +} from '@modular-scripts/remote-view'; + +function MyPortal() { + // In practice, URLs to your remote ESM views can be fetched from a server + const [remoteViews, addRemoteView] = useState([ + 'https://cdn.example.com/esm-view-1', + 'https://cdn.example.com/esm-view-2', + ]); + + return ( + + {remoteViews.map((url, key) => ( +
+ + + +
+ ))} +
+ ); +} +``` + +Modular [ESM Views](https://modular.js.org/esm-views) are dynamically loaded, +whereas Modular [Apps](https://modular.js.org/package-types/app/) are loaded +into an iframe. For more information on Modular types, check out the +[Package Types breakdown on the Modular docs](https://modular.js.org/package-types/). + +## Fall back to iframes + +It is also possible to load [ESM Views](https://modular.js.org/esm-views) (in +addition to [Apps](https://modular.js.org/package-types/app/)) into an iframe if +desired - provide `loadWithIframeFallback` prop to trigger the iframe fallback: + +```jsx +// Use an iframe fallback for one particular view +function determineFallbackCases(manifest: MicrofrontendManifest) { + if (manifest.name === '@myscope/example-module') { + return true; + } + + return false; +} + +return ( + + {remoteViews.map((url, key) => ( +
+ + + +
+ ))} +
+); +``` + +## Custom loader + +You can customize the loading state of each `` by providing a +`loading` prop: + +```jsx +return ( + + + My custom loading component} + /> + + +); +``` + +By default, `` outputs a very simple loading message: +`
Loading
`. + +Alternatively, you bring your own error boundary. + +## Security + +Loading dynamic (especially remote, over http(s)) ES modules at runtime carries +certain risks and must be used carefully. Content loaded dynamically should only +ever be done from a trusted source. + +End user input should **not** be used to determine content URLs (etc) and any +application of consuming modules at runtime should be centrally controled in a +secure environment. In other words, user input should not be allowed to modify +URLs that `` will attempt to render. + +There is also no guarantee of safety, which is why it is very strongly +recommended to use error boundaries. `` attempts to render +whatever module it finds into your React tree, and this depends on runtime +imports actually returning valid React modules. + +## CSS + +`` automatically imports local and global CSS from ESM Views that +have been specified according to the +[Modular docs](https://modular.js.org/esm-views/external-css-imports/). + +When an iframe fallback is used, this does not apply. + +## Error handling + +It is strongly recommended to wrap any usage of `` with error +boundaries. There are two approaches you can take: + +- Use the provided ``, optionally customizing the + content that is displayed +- Use your own error boundary + +### Using the default error boundary + +Outputs a default, simple error component displaying the error details + +```jsx +return ( + + + + + +); +``` + +The error fallback contains a simple output: + +```jsx +return ( +
+ + Something went wrong for module at URL + "https://cdn.example.com/views/foo". + +
{error.message}
+
+); +``` + +### Customizing the content of `` + +Supply the `content` prop. If the `error` prop is an instance of +`RemoteViewError`, will contain RemoteView-specific error details. + +```tsx +function MyErrorContent({ error }: { error: Error | RemoteViewError }) { + const isRemoteViewError = error instanceof RemoteViewError; + + return ( +
+

A custom error fallback component

+ + You can render and do anything you want, it's just a React component. + +
+ This error: + + Name: {error.name} + + + Message: {error.message} + + {isRemoteViewError && ( + RemoteView could not load "{error.remoteViewUrl}" + )} +
+ ); +} + +return ( + + + + + +); +``` + +### Using a fully custom error boundary + +The RemoteView subtree can throw a `RemoteViewError` or other `Error` subclass. + +If the error relates to the loading of the ESM View, a `RemoteViewError` should +be thrown. In all other cases (e.g. any crash in the React subtree after +rendering), an `Error` (of any subclass) will throw. + +Use the standard class component `componentDidCatch` API to handle errors as you +choose. + +```jsx +return ( + + + + + +); +``` + +Examples of how errors can be handled, including recovery, can be seen in +[`packages/remote-view-demos`](https://github.com/jpmorganchase/modular/tree/main/packages/remote-view-demos). + +## Examples + +There are a range of examples implemented in +[`packages/remote-view-demos`](https://github.com/jpmorganchase/modular/tree/main/packages/remote-view-demos): + +- 2 ESM Views loaded and rendering (aka "happy path") +- Iframe fallback +- All types of error handling +- How to recover a crashed view + +## API + +### `` + +Required provider that must wrap any `` instances. Is responsible +for fetching ESM views. + +| Prop | Type | Required? | Description | Default | +| ------------------------ | --------------------------------------------------------- | --------- | -------------------------------------------------------------------------------------------------- | ----------- | +| `urls` | String[] (URLs) | Yes | URLs of the ESM Views you want to load | N/A | +| `loadWithIframeFallback` | Function `fn(manifest: MicrofrontendManifest) => boolean` | No | Optional function to determine if an iframe fallback should be used in place of a React component. | `undefined` | + +### `` + +| Prop | Type | Required? | Description | Default | +| --------- | ------------ | --------- | --------------------------------------------------------------------------------------- | -------------------- | +| `url` | String (URL) | Yes | URL to the remote view. Can be either an ESM view URL on your ESM CDN, or an iframe URL | N/A | +| `loading` | JSX.Element | No | Display a custom loading component whilst the remote view is being fetched and rendered | `
Loading
` | + +`MicrofrontendManifest` represents the `package.json` of an ESM View served over +an ESM CDN. This includes fields like the package `name`, `style`, +`styleImports` and more - see `packages/modular-types/src/types.ts` for the full +list of fields that are expected. You can also refer to the +[Modular docs on CSS imports](https://modular.js.org/esm-views/external-css-imports/). + +### `` + +Recommended (but optional) error boundary component to protect against runtime +crashes. ``s can throw during attempts to load ESM views +(unsupported manifests, unreachable manifests), but also inside the subtree that +is ultimately rendered, which is outside the control of ``. + +| Prop | Type | Required? | Description | Default | +| --------- | ------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | +| `content` | React.ComponentType | No | Optional component to customize the error boundary. If provided, receives an `error` prop of type `RemoteViewError` or `Error`. | A simple div that outputs "Something went wrong" with an accompanying error message. | diff --git a/docs/index.md b/docs/index.md index 8a765699f..9a832bf78 100644 --- a/docs/index.md +++ b/docs/index.md @@ -57,6 +57,10 @@ It supports three flags: - [workspace](./commands/workspace.md) - [check](./commands/check.md) +## Components + +- [``](./components/remote-view.md) + ## Concepts - [Micro-frontends](./concepts/microfrontends.md) diff --git a/docs/package-types/esm-view.md b/docs/package-types/esm-view.md index 973eae3f6..e5b42f040 100644 --- a/docs/package-types/esm-view.md +++ b/docs/package-types/esm-view.md @@ -159,3 +159,10 @@ ESM Views are generated by `modular add` using the For an in-depth reference of how ESM Views work and can be customized, see this [section](../esm-views). + +## Usage with `` + +The [`` component](../components/remote-view.md) is designed for +consuming ESM Views in a portal-like application. It aims to make implementing +the micro-frontend pattern easier. View the +[`` docs](../components/remote-view.md) for more information. diff --git a/package.json b/package.json index 6a322978b..ee0280cd6 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "create-modular-react-app": "ts-node packages/create-modular-react-app/src/cli.ts", "modular": "ts-node packages/modular-scripts/src/cli.ts", "test": "yarn modular test --watchAll false --runInBand --env node", - "build": "yarn workspace @modular-scripts/workspace-resolver build && yarn workspace create-modular-react-app build && yarn workspace modular-scripts build && yarn workspace modular-views.macro build", + "build": "yarn workspace @modular-scripts/workspace-resolver build && yarn workspace create-modular-react-app build && yarn workspace modular-scripts build && yarn workspace modular-views.macro build && yarn modular build @modular-scripts/remote-view", "prepare": "is-ci || husky install", "postinstall": "patch-package", "typecheck": "yarn modular typecheck", diff --git a/packages/modular-scripts/react-scripts/config/utils/esmUtils.js b/packages/modular-scripts/react-scripts/config/utils/esmUtils.js index b5a1f1922..b6b2dfb33 100644 --- a/packages/modular-scripts/react-scripts/config/utils/esmUtils.js +++ b/packages/modular-scripts/react-scripts/config/utils/esmUtils.js @@ -8,7 +8,7 @@ function parsePackageName(name) { if (!parsedName) { return; } - const [_, scope, module, submodule] = parsedName; + const [, scope, module, submodule] = parsedName; const dependencyName = (scope ? `${scope}/` : '') + module; return { dependencyName, scope, module, submodule }; } diff --git a/packages/modular-scripts/src/__tests__/utils/__snapshots__/getWorkspaceInfo.test.ts.snap b/packages/modular-scripts/src/__tests__/utils/__snapshots__/getWorkspaceInfo.test.ts.snap index 5f410009b..34667ab4e 100644 --- a/packages/modular-scripts/src/__tests__/utils/__snapshots__/getWorkspaceInfo.test.ts.snap +++ b/packages/modular-scripts/src/__tests__/utils/__snapshots__/getWorkspaceInfo.test.ts.snap @@ -2,148 +2,134 @@ exports[`getWorkspaceInfo 1`] = ` { - "location": "packages/modular-types", - "mismatchedWorkspaceDependencies": [], - "public": true, - "type": "unknown", - "version": Any, - "workspaceDependencies": [], -} -`; - -exports[`getWorkspaceInfo 2`] = ` -{ - "location": "packages/workspace-resolver", - "mismatchedWorkspaceDependencies": [], - "public": true, - "type": "unknown", - "version": Any, - "workspaceDependencies": [ - "@modular-scripts/modular-types", - ], -} -`; - -exports[`getWorkspaceInfo 3`] = ` -{ - "location": "packages/create-modular-react-app", - "mismatchedWorkspaceDependencies": [], - "public": true, - "type": "unknown", - "version": Any, - "workspaceDependencies": [], -} -`; - -exports[`getWorkspaceInfo 4`] = ` -{ - "location": "packages/eslint-config-modular-app", - "mismatchedWorkspaceDependencies": [], - "public": true, - "type": "unknown", - "version": Any, - "workspaceDependencies": [], -} -`; - -exports[`getWorkspaceInfo 5`] = ` -{ - "location": "packages/modular-scripts", - "mismatchedWorkspaceDependencies": [], - "public": true, - "type": "unknown", - "version": Any, - "workspaceDependencies": [ - "@modular-scripts/modular-types", - "@modular-scripts/workspace-resolver", - ], -} -`; - -exports[`getWorkspaceInfo 6`] = ` -{ - "location": "packages/modular-template-app", - "mismatchedWorkspaceDependencies": [], - "public": true, - "type": "template", - "version": Any, - "workspaceDependencies": [], -} -`; - -exports[`getWorkspaceInfo 7`] = ` -{ - "location": "packages/modular-template-esm-view", - "mismatchedWorkspaceDependencies": [], - "public": true, - "type": "template", - "version": Any, - "workspaceDependencies": [], -} -`; - -exports[`getWorkspaceInfo 8`] = ` -{ - "location": "packages/modular-template-node-env-app", - "mismatchedWorkspaceDependencies": [], - "public": false, - "type": "template", - "version": Any, - "workspaceDependencies": [], -} -`; - -exports[`getWorkspaceInfo 9`] = ` -{ - "location": "packages/modular-template-package", - "mismatchedWorkspaceDependencies": [], - "public": true, - "type": "template", - "version": Any, - "workspaceDependencies": [], -} -`; - -exports[`getWorkspaceInfo 10`] = ` -{ - "location": "packages/modular-template-source", - "mismatchedWorkspaceDependencies": [], - "public": true, - "type": "template", - "version": Any, - "workspaceDependencies": [], -} -`; - -exports[`getWorkspaceInfo 11`] = ` -{ - "location": "packages/modular-template-view", - "mismatchedWorkspaceDependencies": [], - "public": true, - "type": "template", - "version": Any, - "workspaceDependencies": [], -} -`; - -exports[`getWorkspaceInfo 12`] = ` -{ - "location": "packages/modular-views.macro", - "mismatchedWorkspaceDependencies": [], - "public": true, - "type": "unknown", - "version": Any, - "workspaceDependencies": [], -} -`; - -exports[`getWorkspaceInfo 13`] = ` -{ - "location": "packages/tree-view-for-tests", - "mismatchedWorkspaceDependencies": [], - "public": false, - "type": "unknown", - "version": Any, - "workspaceDependencies": [], + "@modular-scripts/modular-types": { + "location": "packages/modular-types", + "mismatchedWorkspaceDependencies": [], + "public": true, + "type": "unknown", + "version": "1.1.0", + "workspaceDependencies": [], + }, + "@modular-scripts/remote-view": { + "location": "packages/remote-view", + "mismatchedWorkspaceDependencies": [], + "public": true, + "type": "package", + "version": "0.0.0", + "workspaceDependencies": [ + "@modular-scripts/modular-types", + ], + }, + "@modular-scripts/workspace-resolver": { + "location": "packages/workspace-resolver", + "mismatchedWorkspaceDependencies": [], + "public": true, + "type": "unknown", + "version": "1.2.0", + "workspaceDependencies": [ + "@modular-scripts/modular-types", + ], + }, + "create-modular-react-app": { + "location": "packages/create-modular-react-app", + "mismatchedWorkspaceDependencies": [], + "public": true, + "type": "unknown", + "version": "4.0.0", + "workspaceDependencies": [], + }, + "eslint-config-modular-app": { + "location": "packages/eslint-config-modular-app", + "mismatchedWorkspaceDependencies": [], + "public": true, + "type": "unknown", + "version": "4.0.0", + "workspaceDependencies": [], + }, + "modular-scripts": { + "location": "packages/modular-scripts", + "mismatchedWorkspaceDependencies": [], + "public": true, + "type": "unknown", + "version": "4.0.1", + "workspaceDependencies": [ + "@modular-scripts/modular-types", + "@modular-scripts/workspace-resolver", + ], + }, + "modular-template-app": { + "location": "packages/modular-template-app", + "mismatchedWorkspaceDependencies": [], + "public": true, + "type": "template", + "version": "1.2.0", + "workspaceDependencies": [], + }, + "modular-template-esm-view": { + "location": "packages/modular-template-esm-view", + "mismatchedWorkspaceDependencies": [], + "public": true, + "type": "template", + "version": "1.1.0", + "workspaceDependencies": [], + }, + "modular-template-node-env-app": { + "location": "packages/modular-template-node-env-app", + "mismatchedWorkspaceDependencies": [], + "public": false, + "type": "template", + "version": "0.2.1", + "workspaceDependencies": [], + }, + "modular-template-package": { + "location": "packages/modular-template-package", + "mismatchedWorkspaceDependencies": [], + "public": true, + "type": "template", + "version": "1.2.0", + "workspaceDependencies": [], + }, + "modular-template-source": { + "location": "packages/modular-template-source", + "mismatchedWorkspaceDependencies": [], + "public": true, + "type": "template", + "version": "1.1.0", + "workspaceDependencies": [], + }, + "modular-template-view": { + "location": "packages/modular-template-view", + "mismatchedWorkspaceDependencies": [], + "public": true, + "type": "template", + "version": "1.2.0", + "workspaceDependencies": [], + }, + "modular-views.macro": { + "location": "packages/modular-views.macro", + "mismatchedWorkspaceDependencies": [], + "public": true, + "type": "unknown", + "version": "3.1.1", + "workspaceDependencies": [], + }, + "remote-view-demos": { + "location": "packages/remote-view-demos", + "mismatchedWorkspaceDependencies": [], + "public": false, + "type": "esm-view", + "version": "0.0.0", + "workspaceDependencies": [ + "@modular-scripts/remote-view", + ], + }, + "tree-view-for-tests": { + "location": "packages/tree-view-for-tests", + "mismatchedWorkspaceDependencies": [], + "public": false, + "type": "unknown", + "version": "2.0.1", + "workspaceDependencies": [], + }, } `; diff --git a/packages/modular-scripts/src/__tests__/utils/getWorkspaceInfo.test.ts b/packages/modular-scripts/src/__tests__/utils/getWorkspaceInfo.test.ts index 7f85aac56..47365df69 100644 --- a/packages/modular-scripts/src/__tests__/utils/getWorkspaceInfo.test.ts +++ b/packages/modular-scripts/src/__tests__/utils/getWorkspaceInfo.test.ts @@ -2,11 +2,8 @@ import { getWorkspaceInfo } from '../../utils/getWorkspaceInfo'; test('getWorkspaceInfo', async () => { const workspace = await getWorkspaceInfo(); - Object.entries(workspace) - .sort(([packageA], [packageB]) => - packageA < packageB ? -1 : packageA > packageB ? 1 : 0, - ) - .forEach(([, pkg]) => { - expect(pkg).toMatchSnapshot({ version: expect.any(String) as unknown }); - }); + Object.entries(workspace).forEach(([_, workspaceRecord]) => { + expect(typeof workspaceRecord.version).toBe('string'); + }); + expect(workspace).toMatchSnapshot(); }); diff --git a/packages/modular-types/src/types.ts b/packages/modular-types/src/types.ts index 321dfc81c..af690375b 100644 --- a/packages/modular-types/src/types.ts +++ b/packages/modular-types/src/types.ts @@ -11,15 +11,17 @@ export type UnknownType = 'unknown'; export type ModularType = PackageType | UnknownType | 'root'; +export type ModularConfiguration = { + type: ModularType | undefined; +}; + export type ModularWorkspacePackage = { path: string; location: string; name: string; version: string; workspace: boolean; - modular?: { - type: ModularType | undefined; - }; + modular?: ModularConfiguration; type: ModularType | undefined; children: ModularWorkspacePackage[]; parent: ModularWorkspacePackage | null; @@ -27,6 +29,15 @@ export type ModularWorkspacePackage = { rawPackageJson: ModularPackageJson; }; +// Represents an exposed package.json that can be consumed via a RemoteView +export type MicrofrontendManifest = { + name: string; + module: string; + style?: string; + styleImports?: string[]; + modular?: ModularConfiguration; +}; + export interface WorkspaceDependencyObject { workspaceDependencies: string[]; } diff --git a/packages/remote-view-demos/README.md b/packages/remote-view-demos/README.md new file mode 100644 index 000000000..008d9bb5b --- /dev/null +++ b/packages/remote-view-demos/README.md @@ -0,0 +1,25 @@ +# RemoteView Demos + +This package contains demos of ``. + +The examples are a reference for users, but this package is also useful for +developing `` components themselves. + +## Setup + +For demos using `` to work, we need some `esm-view`s that our +RemoteView will render. + +To this end, `view1` and `view2` have been pre-built and are exposed in the fake +ESM cdn that is also used in integration tests +(`__fixtures/remote-view-fake-cdn`). These two views have been built pointing at +esm.sh, which means that this demo only works with connectivity through to +esm.sh. Note that the other packages in that directory are designed for use in +integration tests. + +To run the demos, from the root of the monorepo: + +1. `node packages/remote-view/src/__tests__/serve.js` (boots a local static + content server on port 8484, exposing the pre-built views) +2. `yarn modular start remote-view-demos` - launches the demos on + `localhost:3000` diff --git a/packages/remote-view-demos/package.json b/packages/remote-view-demos/package.json new file mode 100644 index 000000000..bcb489c07 --- /dev/null +++ b/packages/remote-view-demos/package.json @@ -0,0 +1,17 @@ +{ + "name": "remote-view-demos", + "private": true, + "modular": { + "type": "esm-view", + "externalCdnTemplate": "https://esm.sh/[name]@[version]" + }, + "version": "0.0.0", + "dependencies": { + "@modular-scripts/remote-view": "*", + "@salt-ds/core": "1.1.0", + "@salt-ds/lab": "1.0.0-alpha.1", + "@salt-ds/theme": "1.0.0", + "react": "17.0.2", + "react-dom": "17.0.2" + } +} diff --git a/packages/remote-view-demos/src/App.tsx b/packages/remote-view-demos/src/App.tsx new file mode 100644 index 000000000..991537f4d --- /dev/null +++ b/packages/remote-view-demos/src/App.tsx @@ -0,0 +1,45 @@ +import React from 'react'; +import { H1, Text } from '@salt-ds/core'; +import { + HappyPathExample, + FallbackIframesExample, + DefaultErrorBoundaryExample, + CustomErrorContentExample, + CustomErrorBoundaryExample, + ErrorRecoveryExample, +} from './examples'; + +import './index.css'; + +function RemoteViewDemos({ + toggleThemeButton, +}: { + toggleThemeButton: JSX.Element; +}): JSX.Element { + return ( +
+

RemoteView demos

+ + Showcase of implementing the micro-frontend pattern using{' '} + {''}. + + + Views loaded by {''} are Modular{' '} + ESM Views exposed over + HTTP. They also rely on loading dependencies from an{' '} + ESM CDN, which + happens at run-time. + +
+ {toggleThemeButton} + + + + + + +
+ ); +} + +export default React.memo(RemoteViewDemos); diff --git a/packages/remote-view-demos/src/examples/custom-error-boundary.tsx b/packages/remote-view-demos/src/examples/custom-error-boundary.tsx new file mode 100644 index 000000000..d1c518c94 --- /dev/null +++ b/packages/remote-view-demos/src/examples/custom-error-boundary.tsx @@ -0,0 +1,42 @@ +import React, { useState } from 'react'; +import { MyErrorBoundary } from './my-error-boundary'; +import { RemoteView, RemoteViewProvider } from '@modular-scripts/remote-view'; +import { H2, Text } from '@salt-ds/core'; +import { Spinner } from '@salt-ds/lab'; + +export function CustomErrorBoundaryExample() { + const [badView] = useState('http://localhost:8484/this-view-will-404'); + + return ( +
+

View not found (custom error boundary)

+ + You can also bring your own error boundary for direct access to the + error. This allows implementing retry, reporting and other custom error + handling features. + + +
{''}
+
+
+
{badView}
+
+ + + } + /> + +
+
+
+
+
+ ); +} diff --git a/packages/remote-view-demos/src/examples/custom-error-content.tsx b/packages/remote-view-demos/src/examples/custom-error-content.tsx new file mode 100644 index 000000000..a84ce356a --- /dev/null +++ b/packages/remote-view-demos/src/examples/custom-error-content.tsx @@ -0,0 +1,68 @@ +import React, { useState } from 'react'; +import { + RemoteView, + RemoteViewError, + RemoteViewErrorBoundary, + RemoteViewProvider, +} from '@modular-scripts/remote-view'; +import { H1, H2, Text } from '@salt-ds/core'; +import { Spinner } from '@salt-ds/lab'; + +function MyErrorContent({ error }: { error: Error | RemoteViewError }) { + return ( +
+

A custom error fallback component

+ + You can render and do anything you want, it's just a React component. + + + Receives an error prop, which can be a{' '} + RemoteViewError or Error. + +
+ This error: + + Name: {error.name} + + + Message: {error.message} + +
+ ); +} + +export function CustomErrorContentExample() { + const [badView] = useState('http://localhost:8484/this-view-will-404'); + + return ( +
+

View not found (custom error content)

+ + Supply the content prop to conveniently customise the + content on the provided RemoteViewErrorBoundary:{' '} +
{''}
+
+ +
+
+
{badView}
+
+ + + } + /> + +
+
+
+
+
+ ); +} diff --git a/packages/remote-view-demos/src/examples/default-error-boundary.tsx b/packages/remote-view-demos/src/examples/default-error-boundary.tsx new file mode 100644 index 000000000..ab1fe71ce --- /dev/null +++ b/packages/remote-view-demos/src/examples/default-error-boundary.tsx @@ -0,0 +1,43 @@ +import React, { useState } from 'react'; +import { + RemoteView, + RemoteViewErrorBoundary, + RemoteViewProvider, +} from '@modular-scripts/remote-view'; +import { H2, Text } from '@salt-ds/core'; +import { Spinner } from '@salt-ds/lab'; + +export function DefaultErrorBoundaryExample() { + const [badView] = useState('http://localhost:8484/this-view-will-404'); + + return ( +
+

View not found (default error boundary)

+ + Simply wrap RemoteViews with the provided{' '} + RemoteViewErrorBoundary. + + +
+
+
{badView}
+
+ + + } + /> + +
+
+
+
+
+ ); +} diff --git a/packages/remote-view-demos/src/examples/error-recovery.tsx b/packages/remote-view-demos/src/examples/error-recovery.tsx new file mode 100644 index 000000000..c24d38168 --- /dev/null +++ b/packages/remote-view-demos/src/examples/error-recovery.tsx @@ -0,0 +1,72 @@ +import React, { useState } from 'react'; +import { + RemoteView, + RemoteViewErrorBoundary, + RemoteViewProvider, +} from '@modular-scripts/remote-view'; +import { H2, Text, Button } from '@salt-ds/core'; + +function SimulateCrash({ + children, + shouldCrash, +}: { + children: React.ReactNode; + shouldCrash: boolean; +}) { + if (shouldCrash) { + throw new TypeError('Crashing on purpose for demo purposes'); + } + + return
{children}
; +} + +export function ErrorRecoveryExample() { + const remoteViews = [ + 'http://localhost:8484/view1', + 'http://localhost:8484/view2', + ]; + + const [showRecoveryView, setShowRecoveryView] = useState(true); + const [shouldCrash, setShouldCrash] = useState(false); + + // Simple way to simulate remounting a for recovery purposes + function attemptRecovery() { + setShowRecoveryView(false); + setShouldCrash(false); + + setTimeout(() => { + setShowRecoveryView(true); + }, 250); + } + + return ( +
+

Retry / Error Recovery

+ + Re-mounting a RemoteViewProvider will cause any errors to + be removed and all child RemoteViews to be rendered from + scratch. + + Hit the "Cause a crash" button, then "Recover". + +
+ +
+
+
{remoteViews[0]}
+
+ {showRecoveryView && ( + + + + + + + + )} +
+
+
+
+ ); +} diff --git a/packages/remote-view-demos/src/examples/fallback-iframes.tsx b/packages/remote-view-demos/src/examples/fallback-iframes.tsx new file mode 100644 index 000000000..6476148f3 --- /dev/null +++ b/packages/remote-view-demos/src/examples/fallback-iframes.tsx @@ -0,0 +1,57 @@ +import React from 'react'; +import { + RemoteView, + RemoteViewErrorBoundary, + RemoteViewProvider, +} from '@modular-scripts/remote-view'; +import { H2, Text } from '@salt-ds/core'; +import { Spinner } from '@salt-ds/lab'; + +import type { MicrofrontendManifest } from '@modular-scripts/modular-types'; + +export function FallbackIframesExample() { + const remoteViews = [ + 'http://localhost:8484/view1', + 'http://localhost:8484/view2', + ]; + + function shouldUseIframe(manifest: MicrofrontendManifest) { + return ['view1', 'view2'].includes(manifest.name); + } + + return ( +
+

Fallback iframe example

+ + Implement loadWithIframeFallback to control any views that + should render in an iframe instead. + + +
+ {remoteViews.map((url, key) => ( +
+
{url}
+
+ + + } + /> + +
+
+ ))} +
+
+
+ ); +} diff --git a/packages/remote-view-demos/src/examples/happy-path.tsx b/packages/remote-view-demos/src/examples/happy-path.tsx new file mode 100644 index 000000000..930d31492 --- /dev/null +++ b/packages/remote-view-demos/src/examples/happy-path.tsx @@ -0,0 +1,56 @@ +import React, { useState } from 'react'; +import { + RemoteView, + RemoteViewErrorBoundary, + RemoteViewProvider, +} from '@modular-scripts/remote-view'; +import { H2, Text, Button } from '@salt-ds/core'; +import { Spinner } from '@salt-ds/lab'; + +export function HappyPathExample() { + const [remoteViews, setRemoteViews] = useState([ + 'http://localhost:8484/view1', + 'http://localhost:8484/view2', + ]); + + function addDuplicateRemoteView() { + setRemoteViews(['http://localhost:8484/view1', ...remoteViews]); + } + + return ( +
+

Happy path example

+ + Demonstrates two working RemoteViews. + + + + Adding a duplicate view demonstrates that remote modules are only loaded + once. + + +
+ {remoteViews.map((url, key) => ( +
+
{url}
+
+ + + } + /> + +
+
+ ))} +
+
+
+ ); +} diff --git a/packages/remote-view-demos/src/examples/index.ts b/packages/remote-view-demos/src/examples/index.ts new file mode 100644 index 000000000..610181d1e --- /dev/null +++ b/packages/remote-view-demos/src/examples/index.ts @@ -0,0 +1,6 @@ +export * from './happy-path'; +export * from './fallback-iframes'; +export * from './default-error-boundary'; +export * from './custom-error-content'; +export * from './custom-error-boundary'; +export * from './error-recovery'; diff --git a/packages/remote-view-demos/src/examples/my-error-boundary.tsx b/packages/remote-view-demos/src/examples/my-error-boundary.tsx new file mode 100644 index 000000000..0d3f4653c --- /dev/null +++ b/packages/remote-view-demos/src/examples/my-error-boundary.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import { RemoteViewError } from '@modular-scripts/remote-view'; + +interface BoundaryState { + error: RemoteViewError | undefined; +} + +interface BoundaryProps { + content?: React.ComponentType; + children?: React.ReactNode; +} + +export class MyErrorBoundary extends React.Component< + BoundaryProps, + BoundaryState +> { + constructor(props: BoundaryProps) { + super(props); + this.state = { error: undefined }; + } + + componentDidCatch(error: RemoteViewError, errorInfo: React.ErrorInfo): void { + const { message } = error; + console.error(message); + console.error(errorInfo.componentStack); + this.setState({ error }); + } + + render() { + if (this.state.error) { + return
The error was: {this.state.error.message}
; + } + + return this.props.children; + } +} diff --git a/packages/remote-view-demos/src/index.css b/packages/remote-view-demos/src/index.css new file mode 100644 index 000000000..131267087 --- /dev/null +++ b/packages/remote-view-demos/src/index.css @@ -0,0 +1,67 @@ +.ExamplesApp { + padding: 20px; +} + +.ExampleContainer { + display: flex; +} + +.ExampleContainer--happy-path .RemoteViewContainer { + width: 50%; +} + +.RemoteViewContainer { + padding: 15px; + overflow: hidden; + display: block; + width: 100%; + height: 450px; + position: relative; + border: 1px dotted #333; + margin: 10px; +} + +.RemoteViewContainer__label { + position: absolute; + z-index: 1; + font-size: 12px; + margin-top: -15px; + margin-left: -15px; + background: #eee; + padding: 2px 10px; +} + +.RemoteViewContainer__content { + margin: 20px 10px; + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + display: flex; + justify-content: center; +} + +.RemoteViewContainer__content .RemoteViewContainer__spinner.saltSvgSpinner { + width: 50px; + height: 50px; + align-self: center; +} + +.ExampleContainer--happy-path .RemoteViewContainer__content > div { + position: relative; + width: 100%; + height: 100%; +} + +.RemoteViewContainer__content iframe { + width: 100%; + height: 100%; + outline: none; + margin: 0; + border: 2px dashed #ccc; +} + +#view2-table { + width: 100%; + height: 450px; +} diff --git a/packages/remote-view-demos/src/index.tsx b/packages/remote-view-demos/src/index.tsx new file mode 100644 index 000000000..f658d3a9a --- /dev/null +++ b/packages/remote-view-demos/src/index.tsx @@ -0,0 +1,53 @@ +import React, { useEffect, useState } from 'react'; +import { Button, SaltProvider, Panel } from '@salt-ds/core'; +import App from './App'; +import '@salt-ds/theme/index.css'; + +const MemoPanel = React.memo(Panel); + +// When Modular 4.2 is available, instead of this, we could use a templateable index.html +function injectFonts() { + if (document.querySelectorAll('[data-injected-fonts]').length) { + return; + } + + document.body.insertAdjacentHTML( + 'beforeend', + '', + ); + document.body.insertAdjacentHTML( + 'beforeend', + '', + ); + document.body.insertAdjacentHTML( + 'beforeend', + '', + ); +} + +type SaltTheme = 'light' | 'dark'; + +export default function RemoteViewDemos(): JSX.Element { + const [theme, setTheme] = useState('light'); + + function toggleTheme() { + const newTheme = theme === 'light' ? 'dark' : 'light'; + setTheme(newTheme); + } + + useEffect(() => { + injectFonts(); + }); + + return ( + + + Toggle Theme + } + /> + + + ); +} diff --git a/packages/remote-view/CONTRIBUTING.md b/packages/remote-view/CONTRIBUTING.md new file mode 100644 index 000000000..5c2d4a72d --- /dev/null +++ b/packages/remote-view/CONTRIBUTING.md @@ -0,0 +1,13 @@ +# Contributing + +Refer to the +[main Modular contributing guidelines](https://github.com/jpmorganchase/modular/blob/main/CONTRIBUTING.md) +for a summary of contributing to Modular. + +## Build + +To [build](https://modular.js.org/commands/build) this package, run: + +```bash +yarn modular build @modular-scripts/remote-view +``` diff --git a/packages/remote-view/README.md b/packages/remote-view/README.md new file mode 100644 index 000000000..3017aee10 --- /dev/null +++ b/packages/remote-view/README.md @@ -0,0 +1,8 @@ +# `` + +`` is a Modular React component that enables the micro-frontend +pattern using Modular [ESM views](https://modular.js.org/esm-views/). + +## Docs + +View the [documentation](https://modular.js.org/components/remote-view/). diff --git a/packages/remote-view/package.json b/packages/remote-view/package.json new file mode 100644 index 000000000..d9e2628e5 --- /dev/null +++ b/packages/remote-view/package.json @@ -0,0 +1,21 @@ +{ + "name": "@modular-scripts/remote-view", + "private": false, + "modular": { + "type": "package" + }, + "main": "./src/index.ts", + "version": "0.0.0", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + }, + "devDependencies": { + "finalhandler": "^1.2.0", + "serve-static": "^1.15.0" + }, + "dependencies": { + "isomorphic-fetch": "^3.0.0", + "@modular-scripts/modular-types": "^1.1.0" + } +} diff --git a/packages/remote-view/src/__tests__/default-remote-view-error-fallback.test.tsx b/packages/remote-view/src/__tests__/default-remote-view-error-fallback.test.tsx new file mode 100644 index 000000000..1b52ff308 --- /dev/null +++ b/packages/remote-view/src/__tests__/default-remote-view-error-fallback.test.tsx @@ -0,0 +1,28 @@ +/** + * @jest-environment jsdom + */ + +import React from 'react'; +import { render, screen, waitFor } from '@testing-library/react'; +import { DefaultRemoteViewErrorFallback } from '../components/default-remote-view-error-fallback'; +import { RemoteViewError } from '../utils/remoteViewError'; + +const mockRemoteViewError = new RemoteViewError( + 'Some example error', + 'http://cdn.example.com/fake-module-url', +); + +describe('RemoteView DefaultRemoteViewErrorFallback', () => { + beforeEach(() => { + jest.spyOn(console, 'error').mockImplementation(() => undefined); + }); + + it('should render an error as expected', async () => { + render(); + const failText = + 'Something went wrong for module at URL "http://cdn.example.com/fake-module-url".'; + + await waitFor(() => screen.findByText(failText)); + expect(screen.getByText(failText)).toBeInTheDocument(); + }); +}); diff --git a/packages/remote-view/src/__tests__/default-unknown-error-fallback.test.tsx b/packages/remote-view/src/__tests__/default-unknown-error-fallback.test.tsx new file mode 100644 index 000000000..054fe2308 --- /dev/null +++ b/packages/remote-view/src/__tests__/default-unknown-error-fallback.test.tsx @@ -0,0 +1,22 @@ +/** + * @jest-environment jsdom + */ + +import React from 'react'; +import { render, screen, waitFor } from '@testing-library/react'; +import { DefaultUnknownErrorFallback } from '../components/default-unknown-error-fallback'; + +describe('RemoteView DefaultUnknownErrorFallback', () => { + beforeEach(() => { + jest.spyOn(console, 'error').mockImplementation(() => undefined); + }); + + it('should render an error as expected', async () => { + const thrownError = new TypeError('Fake TypeError'); + render(); + const failText = 'Something went wrong'; + + await waitFor(() => screen.findByText(failText)); + expect(screen.getByText(failText)).toBeInTheDocument(); + }); +}); diff --git a/packages/remote-view/src/__tests__/integration.test.tsx b/packages/remote-view/src/__tests__/integration.test.tsx new file mode 100644 index 000000000..7f22af3ba --- /dev/null +++ b/packages/remote-view/src/__tests__/integration.test.tsx @@ -0,0 +1,95 @@ +/** + * @jest-environment jsdom + */ + +/* eslint-disable testing-library/prefer-screen-queries */ + +import path from 'path'; +import puppeteer from 'puppeteer'; +import { getDocument, queries, waitFor } from 'pptr-testing-library'; +import { spawn } from 'child_process'; + +const controller = new AbortController(); + +// Launch a tiny fake ESM cdn +// See serve.js +function bootFakeEsmCdn() { + return new Promise((res) => { + const serverPath = path.join(__dirname, 'serve.js'); + const server = spawn('node', [serverPath], { + signal: controller.signal, + }); + // Resolve the promise when the server has finished booting + server.stdout.on('data', function (data: Buffer) { + if (data.toString().includes('launched on port 8484')) { + res(true); + } + }); + server.unref(); + }); +} + +describe('remote-view (integration)', () => { + let browser: puppeteer.Browser; + + beforeAll(async () => { + await bootFakeEsmCdn(); + + const launchArgs: puppeteer.LaunchOptions & + puppeteer.BrowserLaunchArgumentOptions = { + // always run in headless - if you want to debug this locally use the env var to + headless: !Boolean(process.env.NO_HEADLESS_TESTS), + args: ['--no-sandbox', '--disable-setuid-sandbox'], + }; + + browser = await puppeteer.launch(launchArgs); + }); + + afterAll(async () => { + // Terminate the fake ESM CDN after tests have run + controller.abort(); + + // Terminate the puppeteer browser + if (browser) { + await browser.close(); + } + }); + + it('should render the example remote view and work', async () => { + const page = await browser.newPage(); + await page.goto('http://localhost:8484/index.html', {}); + + // 1. The card component should render with it's default content + const $document = await getDocument(page); + // eslint-disable-next-line @typescript-eslint/no-misused-promises + await waitFor(() => queries.findByText($document, 'Some card contents')); + + const $button = await queries.findByText($document, 'Change card content'); + // eslint-disable-next-line jest-dom/prefer-in-document + expect($button).toBeTruthy(); + + // 2. Clicking the button should work + const buttonSelector = 'button'; + await page.waitForSelector(buttonSelector); + await page.click(buttonSelector); + + const $updated = await queries.findByText( + $document, + 'Some mutated card contents', + ); + // eslint-disable-next-line jest-dom/prefer-in-document + expect($updated).toBeTruthy(); + + // 3. React & ReactDOM still work, the content of the remote view got updated + const contentSelector = 'span'; + const updatedContentSelector = await page.waitForSelector(contentSelector); + const updatedContent = await updatedContentSelector?.evaluate( + (el) => el.textContent, + ); + expect(updatedContent).toBe('Some mutated card contents'); + + // 4. The list component should also have rendered + // eslint-disable-next-line @typescript-eslint/no-misused-promises + await waitFor(() => queries.findByText($document, 'baz')); + }); +}); diff --git a/packages/remote-view/src/__tests__/remote-view.test.tsx b/packages/remote-view/src/__tests__/remote-view.test.tsx new file mode 100644 index 000000000..29bd5fc08 --- /dev/null +++ b/packages/remote-view/src/__tests__/remote-view.test.tsx @@ -0,0 +1,292 @@ +/** + * @jest-environment jsdom + */ + +import React, { useState } from 'react'; +import { + render, + screen, + waitFor, + waitForElementToBeRemoved, +} from '@testing-library/react'; +import { + RemoteViewProvider, + RemoteView, + RemoteViewErrorBoundary, +} from '../components'; +import { RemoteViewError } from '../utils/remoteViewError'; + +function FakeComponentA() { + return
Faked dynamically imported module A
; +} + +function FakeComponentB() { + return
Faked dynamically imported module B
; +} + +const mockedManifestA = { + name: 'fake-component-a', + version: '1.0.0', + modular: { + type: 'esm-view', + externalCdnTemplate: 'http://localhost:8484/[name]@[version]', + }, + dependencies: { react: '17.0.2' }, + bundledDependencies: [], + module: '/static/js/main.abcd1234-a.js', + styleImports: ['http://example.com/fake-path/fake-css.css'], +}; +const mockedManifestB = { + ...mockedManifestA, + name: 'fake-component-b', + module: '/static/js/main.abcd1234-b.js', +}; + +// Has no modular config (type is required) +const badManifestA = { + ...mockedManifestA, + name: 'bad-component-a', + modular: {}, +}; + +// Has an unsupported modular type +const badManifestB = { + ...mockedManifestA, + name: 'bad-component-b', + modular: { + ...mockedManifestA.modular, + type: 'view', + }, +}; + +jest.mock('../utils/dynamicallyImport', () => { + let n = 0; + return { + dynamicallyImport: async () => { + let component; + if (n === 0) { + n += 1; + component = FakeComponentA; + return Promise.resolve(component); + } + + component = FakeComponentB; + return Promise.resolve(component); + }, + }; +}); + +function MaybeSimulateCrash({ + children, + shouldCrash, +}: { + children: React.ReactNode; + shouldCrash: boolean; +}) { + if (shouldCrash) { + throw new TypeError('Crashing on purpose'); + } + + return
{children}
; +} + +function getMicrofrontendExample({ + useIframe, + customLoader, + customFallback, + crashWithUnknownError, +}: { + useIframe?: boolean; + customLoader?: JSX.Element; + customFallback?: React.ComponentType<{ error: Error | RemoteViewError }>; + crashWithUnknownError?: boolean; +}) { + return function MicrofrontendExample() { + const [remoteViews] = useState([ + 'http://localhost:8484/esm-view-card', + 'http://localhost:8484/esm-view-list', + ]); + + return ( + useIframe || false} + urls={remoteViews} + > + + {remoteViews.map((v, key) => ( +
+ + + +
+ ))} +
+
+ ); + }; +} + +describe('RemoteView', () => { + describe('for supported manifests', () => { + beforeEach(() => { + let n = 0; + global.fetch = jest.fn(() => { + const manifest = n === 0 ? mockedManifestA : mockedManifestB; + n += 1; + + return Promise.resolve({ + json: () => manifest, + }); + }) as jest.Mock; + + jest.spyOn(console, 'error').mockImplementation(() => undefined); + }); + + it('should render a microfrontend example', async () => { + const Example = getMicrofrontendExample({ useIframe: false }); + + render(); + + await waitFor(() => + screen.findByText('Faked dynamically imported module A'), + ); + await waitFor(() => + screen.findByText('Faked dynamically imported module B'), + ); + + expect( + screen.getByText('Faked dynamically imported module A'), + ).toBeInTheDocument(); + expect( + screen.getByText('Faked dynamically imported module B'), + ).toBeInTheDocument(); + }); + + it('should render using iframe fallbacks', async () => { + const Example = getMicrofrontendExample({ useIframe: true }); + + render(); + + await waitFor(() => screen.findByTitle('fake-component-a')); + + const iframeA = screen.getByTitle('fake-component-a'); + expect(iframeA).toBeInTheDocument(); + expect(iframeA.tagName.toLowerCase()).toBe('iframe'); + expect(iframeA).toHaveAttribute( + 'src', + 'http://localhost:8484/esm-view-card/index.html', + ); + + await waitFor(() => screen.findByTitle('fake-component-b')); + const iframeB = screen.getByTitle('fake-component-b'); + expect(iframeB).toBeInTheDocument(); + expect(iframeB.tagName.toLowerCase()).toBe('iframe'); + expect(iframeB).toHaveAttribute( + 'src', + 'http://localhost:8484/esm-view-list/index.html', + ); + }); + + it('should render using a custom loader', async () => { + const Example = getMicrofrontendExample({ + customLoader:
Custom loader
, + }); + + render(); + + // Custom loaders available right away + const customLoaders = screen.getAllByText('Custom loader'); + expect(customLoaders).toHaveLength(2); + + await waitForElementToBeRemoved(() => + screen.queryAllByText('Custom loader'), + ); + }); + + it('should capture an error within a RemoteView', async () => { + const Example = getMicrofrontendExample({ + crashWithUnknownError: true, + }); + + render(); + + await waitFor(() => screen.findByText('Crashing on purpose')); + const errorText = screen.getByText('Crashing on purpose'); + expect(errorText).toBeInTheDocument(); + }); + }); + + describe('for unsupported manifests', () => { + beforeEach(() => { + let n = 0; + global.fetch = jest.fn(() => { + const manifest = n === 0 ? badManifestA : badManifestB; + n += 1; + + return Promise.resolve({ + json: () => manifest, + }); + }) as jest.Mock; + + jest.spyOn(console, 'error').mockImplementation(() => undefined); + }); + + it('should throw and display the default error fallback', async () => { + const Example = getMicrofrontendExample({}); + render(); + + const failText = + 'Something went wrong for module at URL "http://localhost:8484/esm-view-card".'; + + await waitFor(() => screen.findByText(failText)); + expect(screen.getByText(failText)).toBeInTheDocument(); + + expect.any(RemoteViewError); + }); + + it('should throw and display a custom error fallback', async () => { + function CustomFallback({ error }: { error: Error | RemoteViewError }) { + const filteredMsgMatches = error?.message?.match(/bad-component-(a|b)/); + const filteredMsg = filteredMsgMatches?.length + ? filteredMsgMatches[0] + : ''; + return
Custom fallback component: {filteredMsg}
; + } + + const Example = getMicrofrontendExample({ + customFallback: CustomFallback, + }); + render(); + + const failText = 'Custom fallback component: bad-component-a'; + + await waitFor(() => screen.findByText(failText)); + expect(screen.getByText(failText)).toBeInTheDocument(); + + expect.any(RemoteViewError); + }); + }); + + describe('when a manifest cannot be retrieved', () => { + beforeEach(() => { + global.fetch = jest.fn(() => { + return Promise.reject('Unspecified fetch rejection'); + }) as jest.Mock; + + jest.spyOn(console, 'error').mockImplementation(() => undefined); + }); + + it('gets caught by the default error boundary', async () => { + const Example = getMicrofrontendExample({}); + render(); + + const failText = + 'Something went wrong for module at URL "http://localhost:8484/esm-view-card".'; + + await waitFor(() => screen.findByText(failText)); + expect(screen.getByText(failText)).toBeInTheDocument(); + + expect.any(RemoteViewError); + }); + }); +}); diff --git a/packages/remote-view/src/__tests__/serve.js b/packages/remote-view/src/__tests__/serve.js new file mode 100644 index 000000000..e03556758 --- /dev/null +++ b/packages/remote-view/src/__tests__/serve.js @@ -0,0 +1,30 @@ +'use strict'; + +const path = require('path'); +const http = require('http'); +const serveStatic = require('serve-static'); +const finalhandler = require('finalhandler'); + +// Serve the 2 ESM views (the build output of both) +const esmViewsPath = path.resolve( + __dirname, + '..', + '..', + '..', + '..', + '__fixtures__', + 'remote-view-fake-cdn', +); + +const serve = serveStatic(esmViewsPath); + +// Create server +const server = http.createServer(function onRequest(req, res) { + res.setHeader('Access-Control-Allow-Origin', '*'); + serve(req, res, finalhandler(req, res)); +}); + +// Listen +const port = 8484; +console.log(`Static server (remote-view) launched on port ${port}`); +server.listen(port); diff --git a/packages/remote-view/src/components/default-remote-view-error-fallback.tsx b/packages/remote-view/src/components/default-remote-view-error-fallback.tsx new file mode 100644 index 000000000..384e41fd9 --- /dev/null +++ b/packages/remote-view/src/components/default-remote-view-error-fallback.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { RemoteViewError } from '../utils/remoteViewError'; + +export function DefaultRemoteViewErrorFallback({ + error, +}: { + error: RemoteViewError; +}) { + const { message, remoteViewUrl } = error; + const formattedMsg = `Something went wrong for module at URL "${remoteViewUrl}".`; + + return ( +
+ {formattedMsg} + {message &&
{message}
} +
+ ); +} diff --git a/packages/remote-view/src/components/default-unknown-error-fallback.tsx b/packages/remote-view/src/components/default-unknown-error-fallback.tsx new file mode 100644 index 000000000..8d0d7f4a6 --- /dev/null +++ b/packages/remote-view/src/components/default-unknown-error-fallback.tsx @@ -0,0 +1,20 @@ +import React from 'react'; + +interface Props { + error: Error; +} + +/** + * Used to catch unknown errors, i.e. errors that are not RemoteViewErrors. + * This handles errors of any type within a tree, assuming the user is using the + */ +export function DefaultUnknownErrorFallback({ error }: Props) { + const { message } = error; + + return ( +
+ Something went wrong + {message &&
{message}
} +
+ ); +} diff --git a/packages/remote-view/src/components/index.ts b/packages/remote-view/src/components/index.ts new file mode 100644 index 000000000..81df3dd76 --- /dev/null +++ b/packages/remote-view/src/components/index.ts @@ -0,0 +1,3 @@ +export * from './remote-view'; +export * from './remote-view-provider'; +export * from './remote-view-error-boundary'; diff --git a/packages/remote-view/src/components/remote-view-error-boundary.tsx b/packages/remote-view/src/components/remote-view-error-boundary.tsx new file mode 100644 index 000000000..21f22bcc3 --- /dev/null +++ b/packages/remote-view/src/components/remote-view-error-boundary.tsx @@ -0,0 +1,62 @@ +import React from 'react'; +import { RemoteViewError } from '../utils/remoteViewError'; +import { DefaultRemoteViewErrorFallback } from './default-remote-view-error-fallback'; +import { DefaultUnknownErrorFallback } from './default-unknown-error-fallback'; + +interface BoundaryState { + error: RemoteViewError | Error | undefined; + isRemoteViewError: boolean | undefined; +} + +interface BoundaryProps { + content?: React.ComponentType<{ error: RemoteViewError | Error }>; + children?: React.ReactNode; +} + +export class RemoteViewErrorBoundary extends React.Component< + BoundaryProps, + BoundaryState +> { + constructor(props: BoundaryProps) { + super(props); + this.state = { error: undefined, isRemoteViewError: undefined }; + } + + componentDidCatch( + error: Error | RemoteViewError, + errorInfo: React.ErrorInfo, + ): void { + const { message } = error; + console.error(message); + console.error(errorInfo.componentStack); + + this.setState({ + error, + isRemoteViewError: error instanceof RemoteViewError, + }); + } + + render() { + if (this.state.error) { + const ProvidedFallback = this.props.content; + + // User-provided error boundary content + if (ProvidedFallback) { + return ; + } + + // RemoteViewError specific error fallback + if ( + this.state.isRemoteViewError && + this.state.error instanceof RemoteViewError + ) { + return ; + } + + // Error fallback for all other cases + return ; + } + + return <>{this.props.children}; + } +} diff --git a/packages/remote-view/src/components/remote-view-provider.tsx b/packages/remote-view/src/components/remote-view-provider.tsx new file mode 100644 index 000000000..5181d255a --- /dev/null +++ b/packages/remote-view/src/components/remote-view-provider.tsx @@ -0,0 +1,122 @@ +import React, { useState, useEffect, useMemo } from 'react'; +import { ErrorContext, ViewsContext } from '../context'; +import { RemoteViewError } from '../utils/remoteViewError'; +import { dynamicallyImport } from '../utils/dynamicallyImport'; + +import type { + ManifestCheck, + RemoteViewErrorsContext, + RemoteViewsContext, +} from '../types'; +import type { MicrofrontendManifest } from '@modular-scripts/modular-types'; +import { loading } from '../utils/symbol'; + +interface Props { + children: React.ReactNode; + urls: string[]; + loadWithIframeFallback?: ManifestCheck; +} + +async function loadRemoteView( + baseUrl: string, + loadWithIframeFallback?: ManifestCheck, +): Promise { + let manifest: MicrofrontendManifest | undefined; + try { + const response = await fetch(`${baseUrl}/package.json`); + manifest = (await response.json()) as MicrofrontendManifest; + } catch (e) { + throw new RemoteViewError( + `Unable to fetch and parse package.json for package at url "${baseUrl}"`, + baseUrl, + ); + } + const type = manifest.modular?.type; + const unsupportedType = !type || (type !== 'esm-view' && type !== 'app'); + + if (unsupportedType) { + throw new RemoteViewError( + `Can't load package "${ + manifest.name + }" at url "${baseUrl}" because type is missing or not supported: "${ + type || JSON.stringify(type) + }"`, + baseUrl, + ); + } + + // Load with iframe if type is app or host decides to use fallback + if ( + type === 'app' || + (loadWithIframeFallback && loadWithIframeFallback(manifest)) + ) { + const iframeTitle = manifest.name; + return () =>